如何在MATLAB中计算eps()?

jvr*_*sem 2 language-agnostic precision matlab bit-manipulation

epsMATLAB中的例程实质上返回浮点数之间的正距离.它也可以采用可选参数.

我的问题:MATLAB如何计算这个值?(它是使用查找表,还是使用某种算法在运行时计算它,或其他什么......?)

相关:在给定浮点数的情况下,如何以任何提供位访问的语言计算?

Adr*_*aan 6

WIkipedia上有相当多的页面

特别是对于MATLAB,它是2 ^( - 53),因为MATLAB默认使用双精度.这是图表: 在此输入图像描述 它是符号的一位,指数的11位和分数的其余位.

关于浮点数MATLAB文档也显示了这一点.

d = eps(x),其中x数据类型为single或double,返回正距离abs(x)到下一个相同精度的较大浮点数x.

由于并非所有分数在数字线上的间距相等,因此不同分数将在相同精度内显示到下一个浮点的不同距离.他们的位代表是:

1.0 = 0 01111111111 0000000000000000000000000000000000000000000000000000
0.9 = 0 01111111110 1100110011001100110011001100110011001100110011001101
Run Code Online (Sandbox Code Playgroud)

两者的符号都是正(0),指数不相等,当然它们的分数差别很大.这意味着下一个浮点数将是:

dec2bin(typecast(eps(1.0), 'uint64'), 64) = 0 01111001011 0000000000000000000000000000000000000000000000000000
dec2bin(typecast(eps(0.9), 'uint64'), 64) = 0 01111001010 0000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

因此,它们不一样eps(0.9)~=eps(1.0).

  • @jvriesem ["每个计算机科学家应该知道的浮点运算"](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html). (2认同)