Python 复数/分支割变元的数值稳定性

Python 复数/分支割变元的数值稳定性,python,c++,precision,floating-accuracy,complex-numbers,Python,C++,Precision,Floating Accuracy,Complex Numbers,我正在对一些分析表达式进行数值计算,这些表达式涉及的因素有exp(1i*arg(z)/2),其中z原则上是一个复数,有时几乎是实数(即浮点精度,例如4.440892098500626e-16j) 我在Python和C++中实现了计算,发现有时结果不一致,因为“几乎实数”的虚数部分在符号上略有不同,然后分支代码的行为 >(即 ARG(-1 +0J)=Pi,但 ARG(-1-0J)= -Pi)显著改变了结果…我想知道是否有任何常用的协议来缓解这些问题 非常感谢。为什么您会关心阶段是pi还是-pi?如

我正在对一些分析表达式进行数值计算,这些表达式涉及的因素有
exp(1i*arg(z)/2)
,其中
z
原则上是一个复数,有时几乎是实数(即浮点精度,例如
4.440892098500626e-16j

我在Python和C++中实现了计算,发现有时结果不一致,因为“几乎实数”的虚数部分在符号上略有不同,然后分支代码的行为<<代码> ARG(z)< /C> >(即<代码> ARG(-1 +0J)=Pi<代码>,但<代码> ARG(-1-0J)= -Pi)显著改变了结果…我想知道是否有任何常用的协议来缓解这些问题


非常感谢。

为什么您会关心阶段是
pi
还是
-pi
?如果它是一个阶段,并且您使用它,那么您不应该关心阶段的范围;i、 你得切个地方。无论如何,如果出于某种原因,你依赖于它,为什么你不能将相位“标准化”到你想要的范围呢?总是有
fmod(arg(z)+2*pi,2*pi)
@Acorn,我不关心+pi或-pi,但有些术语依赖于
exp(1i*arg(z)/2)
,因此相位+pi/2或-pi/2很重要…@Faser:这些术语本身有分支切割(就像
csqrt
那样)。如果差异很重要,你必须考虑多值函数或者移动分支切割。