2017-01-05 2 views
-1

Ich konvertiere einige Python-Code in C-Code.Warum zeigt NumPy.exp ein anderes Ergebnis als exp in C

Unten Python NumPy exp on komplexe Anzahl Ausgänge (6.12323399574e-17-1j) für k=1, l=4.

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

Ich konvertiere es in C-Code wie unten. Aber die Ausgabe ist 1.000000.

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

Was fehlt mir?

+5

Y ou sollte 'cexp()' in der C-Version verwenden, nein? – kindall

+1

Was ist 'exp'? Verwenden Sie C++ oder 'tgmath.h'? Die 'exp'-Funktion in C nimmt normalerweise keine komplexen Zahlen. Und wie untersuchen Sie das Ergebnis? Zeigen Sie uns ausführbaren Code. – user2357112

+0

Ich denke, dass numpy und c beide die gleiche Antwort erzeugen werden, wenn man 'exp' in' cexp' umschaltet. Die richtige Antwort ist -1i. Das sagt numpy wirklich, wenn man annimmt, dass 6e-17 wirklich Null ist. – bruceg

Antwort

0

Hier ist der richtige C-Code aus Ihrer Antwort drucken:

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

Sie cimag und creal die Daten drucken verwenden müssen.

C-Version:

#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; 
} 

Ausgang:

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) 

Ausgang:

6.12323399574e-17-1j 
Verwandte Themen