Matlab division by 0: Inf or语言 - Inf



我无法弄清楚为什么在以下两种情况下进行0给出不同的结果。 amort是计算恒定摊销时间表的函数。我们唯一关心的是A的最后一个元素恰好是0。

amort = @(r,M) ((1+r).^(0:M)' - (1+r).^M) ./ (1-(1+r).^M)
A = amort(0.03, 20);
>> A(end)==0
ans =
     1

看起来很奇怪的是:

>> 1/0
ans =
   Inf
>> 1/A(end)
ans =
  -Inf

但是

>> sign(A(end))
ans =
     0
>> 1/abs(A(end))
ans =
   Inf

这是怎么可能的,为什么?有某种隐藏的"标志"?

A(end)实际上具有符号位设置(即它为负零)。尝试使用num2hex查看十六进制表示:

>> a = -0
a =
     0    % Note the sign isn't displayed
>> num2hex(A(end))
ans =
8000000000000000
>> num2hex(a)
ans =
8000000000000000  % Same as above
>> num2hex(0)
ans =
0000000000000000  % All zeroes
>> 1/a
ans =
  -Inf

请注意,-0显示为0,但实际上具有符号位。因此-Inf结果。

还请注意sign功能(重点矿山)的这种说明:

对于x的每个元素,符号(x)如果元素返回1 大于零,如果等于零,则0等于0 小于零。

由于-0不小于零,而是等于0sign返回0

最新更新