【发布时间】:2017-04-13 20:33:01
【问题描述】:
我无法弄清楚为什么在以下两种情况下除以 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
这怎么可能?为什么?是否有某种隐藏的“标志”?
【问题讨论】:
-
虽然重复引用 Octave,但接受的答案涉及 MATLAB 和 IEEE-754 格式。
-
A(end)为负零。fprintf('%f\n', A(end))返回-0.000000
标签: matlab division infinite zero divide-by-zero