gpt4 book ai didi

r - .Machine$double.eps 比必要的大吗?

转载 作者:行者123 更新时间:2023-12-01 23:31:23 27 4
gpt4 key购买 nike

文档描述了.Machine$double.eps作为 最小正 float x 使得 1 + x != 1 。所以我预计以下结果会产生 1:

options(digits=17)
1 + .Machine$double.eps
# [1] 1.0000000000000002

但事实并非如此。看来我必须低至 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

谢谢

最佳答案

只是因为它很有趣,这里是the code R uses to calculate 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);
}

根据记录,它产生 2.22e-16。

请注意,它每次都会跳跃 2 倍 - 因此它实际上不会找到 1 + x 不是 1 的严格最小浮点。但它将找到 2 的幂梯上最小的一个。

所以,我想说严格来说文档不太准确,因为 0.75*eps + 1 != 10.75*eps < eps 确实是这样。

关于r - .Machine$double.eps 比必要的大吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21068598/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com