见
.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中获取答案值。
答案 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
实际上是double
,eps
会返回预期的epsilon。