在 MATLAB 中出现以下矛盾的结果有什么解释吗?
>> Inf*0
ans =
NaN
>> Inf*(0+1i)
ans =
0 + Infi
这是一个错误还是对此有任何解释?
更新:
有趣的是,MATLAB、Maple 和 Mathematica 都给出了相同的结果。但是编程语言遵循不同的哲学。例如检查 C99附录 G 5.1.6。 FORTRAN 也一样。受人尊敬GNU MPC库还提供 NaN + Inf*i。
我的结论是,对于复杂的操作,我们需要更好和统一的语义,对于复杂的无穷大,可能需要单独的概念。
最佳答案
这并不矛盾,因为 0+1i
是一个数字,虽然很复杂; Inf
因此不会分发。由于 0+1i
的大小不是 0
,因此将它乘以 Inf
具有定义的行为;在这种情况下无限大。显然,该算法使得无穷大仅显式复杂,但它深入研究了复平面中的无穷大,即 interesting discussion。靠自己。
如果您将数字更改为零幅度的 1,则您具有相同的(真实)行为:
>> Inf*(1+0i) % Real with magnitude 1
ans =
Inf
>> Inf*(0+1i) % Imaginary with magnitude 1
ans =
0.0000 + Infi
>> Inf*(1/sqrt(2)+1i/sqrt(2)) % Complex with magnitude 1
ans =
Inf + Infi
>> Inf*(0+0i) % Imaginary with magnitude 0
ans =
NaN
将 Inf
分别乘以 0
和 0i
也会产生 NaN
。
>> Inf*0+Inf*0i
ans =
NaN
关于matlab - 无穷大复数乘法的奇怪规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33200151/