考虑以下使用 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 公式定义复数,这会将结果的虚部的符号更改为错误的值。
如何处理这种影响?