1

C/C++ で複素数の操作を実行する次のコードを考えてみましょうfloat

float real_part = log(3.f);
float imag_part = 0.f;

float real_part2 = (imag_part)*(imag_part)-(real_part*real_part);
float imag_part2 = (imag_part)*(real_part)+(real_part*imag_part);

結果は次のようになります。

real_part2= -1.20695 imag_part2= 0
angle= 3.14159

ここangleで、 は複素数の位相で、この場合は ですpi

ここで、次のコードを検討してください。

float real_part = log(3.f);
float imag_part = 0.f;

float real_part2 = (-imag_part)*(-imag_part)-(real_part)*(real_part);
float imag_part2 = (-imag_part)*(real_part)+(real_part)*(-imag_part);

結果は次のようになります。

real_part2= -1.20695 imag_part2= 0
angle= -3.14159

結果の虚部は、結果-0の位相を にします-pi

複素数の主要な引数と浮動小数点の の符号付きプロパティを使用して達成できますが0、この変更は、複素数の関数を定義するときに問題になります。たとえばsqrt、de Moivre の公式で複素数を定義している場合、結果の虚数部の符号が間違った値に変更されます。

この影響にどう対処するか?

4

1 に答える 1