gpt4 book ai didi

r - 修复天花板中的浮点不精确性

转载 作者:行者123 更新时间:2023-12-04 11:45:47 25 4
gpt4 key购买 nike

问题:

ceiling(31)
#31
ceiling(31/60*60)
#32

修复此类错误的正确方法是什么?

在除法之前进行乘法不是一种选择,我的代码如下所示:
x <- 31/60
...
y <- ceiling(x*60)

我正在考虑做一个新功能:
ceil <- function(x) {
ceiling(signif(x))
}

但我是 R 的新手,也许有更好的方法。

更新
抱歉,我没有提供更多细节,由于不同的原因,我在代码的不同部分遇到了同样的问题,但总是有上限。

我知道浮点计算中的舍入误差。也许问题的标题可以改进, 我不想修复天花板函数 的不精确性,我想做的可能恰恰相反,使天花板不那么精确。一种告诉 R 忽略明显噪声的数字的方法:
options(digits=17)
31/60*60
#31.000000000000004

但是,显然,忽略噪声数字所需的 epsilon 取决于问题的上下文。

最佳答案

我坚信,真正的问题出现在我的英雄 The Data Munger Guru 的标语中,即:“你试图解决的问题是什么?
告诉我你想做什么,而不是你想怎么做。 ”

在无数情况下,浮点精度会导致明显的整数变成 "integer +/- epsilon",因此您需要弄清楚为什么要使用 "ceiling",为什么允许您的值不是整数,等等 <-- 或多或少是 Pascal Cuoq 在他的评论中写的。

因此,解决您的问题取决于实际情况。也许你想要,说 trunc(x/60)->y 后跟 trunc(y*60) ,或者可能不是 :-) 。也许你想要 y<-round(x/60*60) +1 ,或者 jhoward 的建议方法。正如我在此强调的,这取决于您的目标是什么以及您希望如何处理极端情况。

关于r - 修复天花板中的浮点不精确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27642815/

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