2017-05-07 38 views
3

今天我在C中弄亂了複數,所以(自然而然)我試圖用歐拉的身份進行編程。我們都知道e = -1但由於某種原因C想要返回(正數)1 - 爲什麼?謝謝!歐拉在C中的身份

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

double main(void){ 
    double complex exponent = M_PI*I; 
    double complex power = exp(exponent); 
    printf("%.f\n",power); 
    return power; 
} 
+8

'exp'是用於實數的,你希望'cexp'用於複數。 – pat

+1

@pat你應該發表你的評論作爲答案。 –

+0

@pat,讓它成爲一個更多的信息和例子的答案! –

回答

6

複數被強制轉換爲真實的,因爲exp需要一個double說法。 Coersion丟棄虛部,只傳遞實際部分,即0。因此,exp(0) = 1。您可以使用cexp而不是expcexp預計double complex

你也應該不通過complex直接printf,而應該明確地打印出實部和虛部如下:

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

double main(void){ 
    double complex exponent = M_PI*I; 
    double complex power = cexp(exponent); 
    printf("%.f + %.fi\n", creal(power), cimag(power)); 
    return power; 
} 

此外,返回doublemain只是普通的怪異...