Matlab除以0:Inf或-Inf

时间:2016-11-29 18:07:27

标签: matlab division infinite zero divide-by-zero

我无法弄清楚为什么除以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

这怎么可能?为什么?是否有某种隐藏的“标志”?

1 个答案:

答案 0 :(得分:6)

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的每个元素,如果元素,则sign(X)返回1       大于零,0如果等于零,则 -1,如果大于零       小于零

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