当与realmax一起使用时,为什么eps在矩阵中失败

时间:2016-05-05 02:56:48

标签: matlab double precision

.Subscribe(...)

然而,

>> eps([1 2 0.00001; (realmax('double')-10) realmin('double') realmax('single')])

ans =

    1.192093e-07    2.384186e-07    9.094947e-13
             NaN    1.401298e-45    2.028241e+31

我原本希望示例1中的>> eps(realmax('double') - 10) ans = 1.99584030953472e+292 从示例2中获取答案值。

1 个答案:

答案 0 :(得分:3)

问题在于,当您创建以下数组时:

[(realmax('double')-10) realmin('double') realmax('single')]
%//    Inf    0    3.402823e+38

第一个条目是无穷大,根据定义,eps(Inf) == NaN

为什么会发生这种情况,realmax('single')返回单精度数,realmax('double')返回双精度数。

  

REALMAX('single')返回最大的有限浮点数       IEEE单精度。

当你将两个MATLAB downcasts the entire array连接到一个single精度数时,显然会导致realmax('double')-10超出数据类型的范围并且变为无穷大。

class(realmax('double'))
%// double

class(realmax('single'))
%// single

class([(realmax('double')-10) realmin('double') realmax('single')])
%// single

当您单独致电eps(realmax('double') - 10)时,非常大的double实际上是doubleeps会返回预期的epsilon。