2017-01-05 1 views
-1

일부 파이썬 코드를 C 코드로 변환 중입니다.NumPy.exp가 C에서 exp와 다른 결과를 표시하는 이유

이하 파이썬 NumPy는 복소수에 대해 (6.12323399574e-17-1j)k=1, l=4에 대해 출력합니다.

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

아래와 같이 C 코드로 변환합니다. 그러나 출력은 1.000000입니다.

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

무엇이 누락 되었습니까?

+5

Y o는 C 버전에서'cexp()'를 사용해야한다. – kindall

+1

'exp' 란 무엇입니까? C++ 또는'tgmath.h '를 사용하고 있습니까? C의'exp' 함수는 일반적으로 복소수를 취하지 않습니다. 그리고 어쨌든 결과를 어떻게 검토하고 있습니까? 실행 가능한 코드를 보여주십시오. – user2357112

+0

'exp '를'cexp'로 바꾸면 numpy와 c가 같은 대답을 낼 것이라고 생각합니다. 정답은 -1i입니다. 그것은 6e-17이 실제로 0이라고 가정 할 때 numpy가 실제로 말하는 것입니다. – bruceg

답변

0

여기에 답을 인쇄 할 수있는 권한 C 코드입니다 :

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

당신은 데이터를 인쇄 cimagcreal를 사용해야합니다.

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

출력 :

0.0-1.0j 

파이썬 버전 :

import numpy as np 

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

출력 :

6.12323399574e-17-1j 
관련 문제