使用Infinity进行复数乘法的奇怪规则

Pav*_*dko 2 matlab

在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.

我的结论是,对于复杂的操作,我们需要更好和统一的语义,并且可能需要分离复杂无穷大的概念.

Tro*_*kin 6

这不是自相矛盾的行为,因为这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)

乘以Inf00i分别还产生NaN.

>> Inf*0+Inf*0i
ans =
   NaN
Run Code Online (Sandbox Code Playgroud)