2009-10-25 4 views
0
typedef struct Complex{ 
double real; 
int img; 
} Complex; 

J'ai vu les gens l'utilisent comme un type comme:J'ai un struct, mais je ne sais pas comment l'utiliser

Complex sqrt(double x) { 
} 

comment jouent « réel » et « img » un rôle dans ce type de fonction? Merci

+1

Qu'est-ce qui ne va pas? Il renvoie une structure 'Complex' par valeur. Le premier fragment de code utilise Complex soit pour le nom de structure et la définition de variable: il ne peut pas fonctionner. – ntd

+0

Vous manquez un 'typedef', par hasard? – pmg

+0

Rappelez-vous que les structures et les typedefs ont des espaces de noms * séparés * en C.Ainsi, 'Complex' et 'Complex Complex' sont des types valides avec la définition ci-dessus. Aussi, l'obligatoire: http://en.wikipedia.org/wiki/Complex_number. –

Répondre

4

Il peut être utilisé comme ceci:

Complex sqrt(double x) { 
    Complex c = {0.0, 0.0}; 
    if (x>= 0.0) 
     c.real = square_root(x); 
    else 
     c.img = square_root(-x); 
    return c; 
} 

Je ne sais pas si c'est une erreur, mais le complexe :: img devrait être aussi un double.

(noter que les nombres complexes est une surcouche de Reals, donc un nombre complexe peut être utilisé à la place d'un double si sa partie imaginaire est égale à zéro)

3

Vous pourriez l'utiliser comme ceci:

Complex sqrt(double x) { 
    Complex r; 
    r.real = f(x); 
    r.img = g(x); 
    return r; 
} 

Dans cet exemple, f(x) et g(x) seraient appels à des fonctions qui calculent la partie réelle et imaginaire de la racine carrée du nombre complexe x. (En réalité, vous calculerait probablement la racine carrée dans la fonction sqrt(), mais je ne fais que montrer comme un exemple de la façon d'utiliser la structure Complex.)

Voici une reference that explains structures in C, ce qui pourrait être utile pour vous.

0

Complex numbers avoir un large éventail d'utilisations en mathématiques - ce que le rôle dépend du contexte de l'application.

0

J'imagine que si la signature est

Complex sqrt(double x); 

Alors x représente une valeur réelle. Donc Complex.img pourrait être un 0/1 représentant si x était positif ou négatif.

Exemple (en x comme un nombre réel)

//C like pseudocode 
Complex sqrt(double x){ 
     Complex result={0,0}; 
     if (x==0) return result; 

     if (x<0){ 
      result.img =1; 
      real = abs(x); 
     } 
     result.real= sqrt_(x);//calculates square root of a positive value. 
     return result; 

} 

    //some other place 
    double r =-4.0; 

    Complex root = sqrt(r); 

    //prints "Square root of -4.0 is 2i" 
    printf("Square root of %.2f is %.2f%c",r,root.real,(root.img?'i':'')); 
0

La partie imaginaire doit un être à double aussi.

Pour un vrai (double x):

Sqrt(x).Real = x >= 0 : Math::Sqrt(x) : 0; 
Sqrt(x).Imaginary = x < 0 : Math::Sqrt(x) : 0; 

Comme FinnNk suggéré, lire un peu de mathématiques complexes.

0

La racine carrée d'un nombre complexe est un calcul ne trouve généralement pas sur votre calculatrice à la main ....

Découvrez le théorème de DeMoivre qui est utilisé pour modifier les variables en coordonnées polaires - pour lesquelles il est une forme fermée formule pour la racine carrée d'un nombre complexe, a + ib.

Paul

Questions connexes