2017-01-05 2 views
-1

Je convertis du code Python en code C.Pourquoi NumPy.exp affiche un résultat différent de exp en C

En dessous de Python NumPy exp sur les sorties numériques complexes (6.12323399574e-17-1j) pour k=1, l=4.

numpy.exp(-2.0*1j*np.pi*k/l) 

Je le convertis en code C comme ci-dessous. Mais la sortie est 1.000000.

#include <complex.h> 
#define PI 3.1415926535897932384626434 
exp(-2.0*I*PI*k/l) 

Que manque-t-il?

+5

Y Vous devriez utiliser 'cexp()' dans la version C, non? – kindall

+1

Qu'est-ce que 'exp'? Utilisez-vous C++ ou 'tgmath.h'? La fonction 'exp' de C ne prend normalement pas de nombres complexes. Et comment examinez-vous le résultat, de toute façon? Montrez-nous le code exécutable. – user2357112

+0

Je pense que numpy et c produiront tous deux la même réponse une fois que vous passerez 'exp' à' cexp'. La bonne réponse est -1i. C'est ce que veut vraiment dire quand on suppose que 6e-17 est vraiment nul. – bruceg

Répondre

0

est ici le bon code C pour imprimer votre réponse:

x = cexp(-2.0*I*PI*0.25); 
    printf("%f + i%f\n", creal(x), cimag(x)); 
2

Vous devez utiliser cimag et creal pour imprimer les données.

version C:

#include <stdio.h> 
#include <complex.h> 
#include <tgmath.h> 


int main(){ 
    int k=1; 
    int l=4; 
    double PI = acos(-1); 
    double complex z = exp(-2.0*I*PI*k/l); 
    printf(" %.1f%+.1fj\n", creal(z), cimag(z)); 
    return 0; 
} 

sortie:

0.0-1.0j 

python Version:

import numpy as np 

k=1 
l=4 
z = np.exp(-2.0*1j*np.pi*k/l) 
print(z) 

sortie:

6.12323399574e-17-1j