gpt4 book ai didi

Matlab 除以 0 : Inf or -Inf

转载 作者:太空宇宙 更新时间:2023-11-03 20:17:48 28 4
gpt4 key购买 nike

我不明白为什么在以下两种情况下除以 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 的解释功能(强调我的):

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 不小于零,而是等于 0sign 返回 0 .

关于Matlab 除以 0 : Inf or -Inf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40872779/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com