Utilizar variables complejas en C o C++?

Imagen de Cristobal López
0 puntos

Hola, quisiera saber cómo tengo que declarar una variable compleja en C++ ya que lo estoy intentando y no me sale.
Lo que hago es declarar como include la librería complex.h, luego declaro la variable de tipo complejo de la siguiente forma:

_Complex double z;

Y la inicializo de la forma siguiente:

z = 0 + 0*I;

donde a la I no la declaro de ningún tipo.

Finalmente, compilo el programa así:

g++ miclase.cpp main.cpp -o main

donde miclase es código que realiza la clase miclase.h, la cual la creo yo. Al compilar me suelta lo siguiente:

En el fichero incluído de /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/backward/complex.h:31,
de dibujo.cpp:4:
/usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/backward/backward_warning.h:32:2: aviso: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the header for the header for C++ includes, or instead of the deprecated header . To disable this warning use -Wno-deprecated.
dibujo.cpp: In function ‘void RenderScene()’:
dibujo.cpp:23: error: ‘I’ no se declaró en este ámbito

¿Me podríais echar una mano?
Gracias de antemano :smile:

Imagen de Anónimo
+1
0
-1

Tu mismo te estás dando la respuesta...


z = 0 + 0*I;

donde a la I no la declaro de ningún tipo.

Y el compilador, lógicamente se queja: dibujo.cpp:23: error: ‘I’ no se declaró en este ámbito

Deberías usar una librería del estilo de libgsl0:

GSL includes data types and routines for ***complex numbers***, vectors,
matrices, basic linear algebra subroutines (BLAS), eigensystems,
simulated annealing, minimization, root finding, pseudo-random
numbers, least-squares fitting, fast Fourier transforms (FFT),
differential equations, quadrature, Monte Carlo integration, special
functions, physical constants, and much more.

¡Un saludo y suerte!

+1
0
-1
Imagen de Anónimo
+1
0
-1

Vaya, no había leído la primera parte del post, donde dices que usas complex.h
Ahora creo que el error (aparte de la declaración de I) es que estás utilizando incorrectamente ese tipo de dato. Deberías echarle un vistazo a la página del manual de complex: man 5 complex

Un saludo.

+1
0
-1
Imagen de Anónimo
+1
0
-1

¡¡¡Y asegurate de estar enlazando con -lm!!!

Otro saludo :)

+1
0
-1
Imagen de Cristobal López
+1
0
-1

Primero darte las gracias por ayudarme y darme lo de libgsl0, lo he bajado y he mirado un enlace donde explica todas las funciones que tiene, hay un montón y muy útiles, sobre todo para un licenciado en matemáticas como yo. Me falta saber cómo compilar esta librería junto con código en c++ al que le añado opengl en glut (lo de opengl se utilizarlo y compilarlo)
La duda por la que he decidido abrir un post como éste es que estoy intentando hacer un programa en el que me dibuje un fractal de mandelbrot pero en opengl en vez de con allegro que he sacado de éste enlace
http://www.netcom.es/vildeu/mandelbrot.html
resulta que en el código que pone ahí la I no la declara de ningún tipo y compila de la siguiente manera

Compilar con la opcion c99:
gcc -std=c99 -c filename.c -o filename.o

* Enlazar con la opcion de librerías matematicas y con allegro:
gcc -lm -o filename filename.o `allegro-config --libs`

Es decir, que pone -std=c99, yo lo he intentado hacer con el que yo estoy haciendo y me dice que nanay de la china porque estoy utilizando una clase que me creo yo con código C++ (obviamente pongo g++ en vez de gcc porque sino no tiraría ni para atrás)
Yo he probado a compilar y ejecutar ese mismo programa que pongo en el enlace y funciona perfecto, así que no se porqué al declarar complejos en el mio como lo pone ahí me protesta a la hora de compilar.
Muchas gracias por ayudarme :smile:

Aquí pongo el enlace de las funciones de libgsl0 http://www.gnu.org/software/gsl/manual/html_node/index.html#Top

Saludotes :smile:
http://tobalin-cristobal.blogspot.com/

+1
0
-1
Imagen de Bloodsucker
+1
0
-1

Que hace esa opción??
Muchos scripts simples no han funcionado si no añadía esa coletilla a la hora de compilar. :S

Mas dudas sobre linux?, preguntamelas en mi blog ---> http://bloodblog.coconia.net/

+1
0
-1

 

 

--- Mi Blog: http://bloodblog.coconia.net/

Imagen de Anónimo
+1
0
-1

Enlaza con la librería libm, que contiene tipos y funciones matemáticas como los complejos. Por eso no compilaba al no encontrar 'I' declarado. Se declara en esa librería.

+1
0
-1