浮点数溢出

时间:2015-10-08 15:05:36

标签: matlab floating-point

我必须创建一个我需要对值进行平方的函数。我被告知,即使初始值不是太大或不太小,平方值仍可能溢出(返回inf)或下溢(返回0),我需要弄清楚如何防止这种情况。

我的问题是我甚至不知道当数字本身不是太大时,哪些数字会导致溢出。

我认为这可能是因为数字不是太少,例如1/3带有重复的十进制数,但MATLAB只是将其转换为0.3333

有人可以给我一个这样的数字的例子,或解释会导致这种数字的数字吗?

1 个答案:

答案 0 :(得分:2)

对于下溢,让我们考虑一下普朗克的常数:6.626070040e-34

sqrt(6.626070040e-34)
ans =
   2.5741e-17

嗯,这显然不够小,让我们变小:

sqrt(6.626070040e-340)
ans =
     0

你的下流。

溢出可以用同样的方式看,只需使用大数字:

sqrt(6.626070040e34)
ans =
   2.5741e+17

sqrt(6.626070040e340)
ans =
   Inf

下溢意味着数字太小而MATLAB无法处理,溢出意味着它们太大而无法处理MATLAB。

感谢@obchardon,这里是我的MATLAB R2012a 64位系统上的数字:

realmax('double') %//largest allowed double
ans =
  1.7977e+308
realmin('double') %//smallest allowed double
ans =
  2.2251e-308

既然我们已经知道MATLAB可以处理的最大可能值是什么,那么让我们尝试下面的那个并将其对齐:

(realmax('double')-10).^2
ans =
   Inf

所以我们试图在这里设定的数字(realmax('double')-10)是MATLAB允许的,但不是可以用的。