2017-05-07 11 views
3

今日、私はCで複素数を扱っていたので、オイラーのアイデンティティをプログラムしようとしました。私たちは皆、それを知っています = -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

expdouble引数を期待するので、複素数は実数に強制されています。和集合は、虚数部を破棄し、実数部(0)のみを渡します。従って、exp(0) = 1

expの代わりにcexpを使用する必要があります。 cexpは、double complexを予期しています。

あなたはまた、printfに直接complexを渡すべきではありませんが、以下のように明示的に実部と虚部を印刷する必要があります:

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

また、mainからdoubleを返すことは単なる奇妙です...