Matlab除以0:Inf或-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(结束)实际上有它的符号位设置(即它是负零).尝试使用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功能的解释(强调我的):

For each element of X, sign(X) returns 1 if the element
is greater than zero, 0 if it equals zero and -1 if it is
less than zero
.

由于-0不小于零,而是等于0,符号返回0.

转载注明原文:Matlab除以0:Inf或-Inf - 代码日志