在MATLAB中有以下矛盾结果的解释吗?
>> Inf*0
ans =
NaN
>> Inf*(0+1i)
ans =
0 + Infi
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是有任何解释?
更新:
有趣的是,MATLAB,Maple和Mathematica都给出了相同的结果.但编程语言遵循不同的哲学.检查例如C99附录G 5.1.6.FORTRAN也是如此.备受推崇的GNU MPC库也提供了NaN + Inf*i.
我的结论是,对于复杂的操作,我们需要更好和统一的语义,并且可能需要分离复杂无穷大的概念.
这不是自相矛盾的行为,因为这0+1i是一个数字,尽管很复杂; 因此Inf不分发.而且由于0+1i没有大小0,所以乘以Inf定义的行为; 在这种情况下无限大.显然,算术是这样的,无穷大只是明确地复杂,但是深入研究在复平面上处理无穷大,这本身就是一个有趣的讨论.
如果将数字更改为零幅度的数字,则具有相同的(实际)行为:
>> 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
Run Code Online (Sandbox Code Playgroud)
乘以Inf由0与0i分别还产生NaN.
>> Inf*0+Inf*0i
ans =
NaN
Run Code Online (Sandbox Code Playgroud)