Fonte : http://www.relisoft.com/science/physics/images/ucircle.gif |
Per il caso in C e' stata usata la libreria GNU Scientific Library (GSL) che offre, oltre a decine di altre funzioni, anche gli operatori ed i tipi per i numeri complessi. Per certi versi GSL puo' essere considerata la risposta alle Numerical Recipies in C
In C++ la gestione dei numeri complessi e' gia' inclusa nel linguaggio con un metodo piu' leggibile poiche' utilizza overloading degli operatori (nell'esempio e' stata usato in modo implicito l'overloading dell'operatore + somma)
L'esempio deve essere compilato come
g++ -Wall -O3 complessi.c -o complessi -lgsl-----------------------------------------------------------
#include <cstdlib>
#include <iostream>
// GSL
#include <gsl/gsl_complex.h>
#include <gsl/gsl_complex_math.h>
// C++
#include <complex>
using namespace std;
using namespace std;
int main(int argc, char *argv[])
{
//------------ GSL
cout << "GSL" << endl;
gsl_complex z,w,u;
GSL_SET_COMPLEX(&z,3,4);
cout << "Z : Reale " << GSL_REAL (z) << ":Immaginario " << GSL_IMAG (z) << endl;
GSL_SET_COMPLEX(&w,4,5);
cout << "W : Reale " << GSL_REAL (w) << ":Immaginario " << GSL_IMAG (w) << endl;
u = gsl_complex_add(z,w);
cout << "Z+W : Reale " << GSL_REAL (u) << ":Immaginario " << GSL_IMAG (u) << endl;
//------------ C++
cout << endl << "C++" <<endl;
complex<double> c1(3.0,4.0);
complex<double> c2(4.0,5.0);
complex<double> c3= c1 + c2;
cout << "Reale : "<<real(c3) << ":Immaginario " << imag(c3) << endl;
system("PAUSE");
return EXIT_SUCCESS;
}