为何C++/NumPy中log(inf + inf j)结果为(inf + 0.785398 j)?
复数log函数处理无穷大的特殊行为疑问
我发现C++和NumPy中的log函数在处理复数无穷大时存在特殊行为:调用log(inf + inf * 1j)得到的结果是(inf + 0.785398j),但我预期应该是*(inf + nan * 1j)*。
对复数取log时,实部是输入绝对值的log,虚部是输入的相位。返回0.785398作为虚部意味着假设实部和虚部的inf是等价的,但这与inf - inf == nan、inf / inf == nan这类运算的逻辑矛盾——这类运算认为两个inf不一定相等。
为何*log(inf + inf * 1j)*的假设逻辑不同?
复现代码
C++代码
#include <complex> #include <limits> #include <iostream> int main() { double inf = std::numeric_limits<double>::infinity(); std::complex<double> b(inf, inf); std::complex<double> c = std::log(b); std::cout << c << "\n"; }
Python(NumPy)代码
import numpy as np a = complex(float('inf'), float('inf')) print(np.log(a))
编辑说明
感谢所有参与讨论历史与数学原因的用户,你们让这个问题变得极具讨论价值。所有回答质量都很高,我本想多选几个,但最终选择了@simon的回答,因为它更详细地解释了数学原因并提供了相关文档链接(尽管我未能完全理解)。
内容的提问来源于stack exchange,提问作者Firman
相关产品推荐
相关产品推荐

