.Machine $ double.eps大于必要的?

Bra*_*ney 3 r

该文档描述.Machine$double.eps最小的正浮点数x1 + x != 1.所以我希望以下产生1:

options(digits=17)
1 + .Machine$double.eps
# [1] 1.0000000000000002
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.似乎我必须尽可能低到0.5*.Machine$double.eps达到预期的四舍五入之前.我误解了一些事情.Machine$double.eps吗?这个平台依赖吗?(下面的sessionInfo())

> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-apple-darwin10.8.0 (64-bit)

locale:
[1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.0.2
Run Code Online (Sandbox Code Playgroud)

谢谢

Owe*_*wen 8

仅仅因为它很有趣,这里是代码R用来计算eps(提取到自己的程序中):

#include <stdio.h>

int main() {
    double temp, tempa, a;
    double eps;

    double one = 1;
    double zero = one - one;
    double beta = 2;

    a = 1.38777878078144568e-17;
    for(;;) {
        temp = one + a;
        if (temp - one != zero)
            break;
        a = a * beta;
    }
    eps = a;

    printf("%e\n", eps);
}
Run Code Online (Sandbox Code Playgroud)

据记载,它产生2.22e-16.

请注意,它由2倍,每次跳-所以它不是真正要找到严格的最小浮动点1 + x不是1.但它会在2阶的权力阶梯中找到最小的一个.

所以,我要说的是,严格说来文件是不是很准确,因为它的确是真实的0.75*eps + 1 != 10.75*eps < eps.