You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:25:18