gpt4 book ai didi

降低 R 中 double

转载 作者:行者123 更新时间:2023-12-02 08:06:58 29 4
gpt4 key购买 nike

我正在寻找一种方法来始终忽略 R 中 float 之间的微小差异(根据 IEC 60559,这些是 double 浮点),通过使用基本 R 工具而不诉诸 C 或 C++。换句话说,我想“四舍五入” double float 的有效数字部分,这样这样的事情就会返回 TRUE 而不是 FALSE:

1.45 - .55 == 2.45 - 1.55
## [1] FALSE

类似:

round_significand(1.45 - .55, bits=48) == round_significand(2.45 - 1.55, bits=48)
## [1] TRUE

简单的 round 不起作用,因为我们需要舍入到的级别取决于数字的大小。

data.table?setNumericRounding:

Computers cannot represent some floating point numbers (such as 0.6) precisely, using base 2. This leads to unexpected behaviour when joining or grouping columns of type 'numeric'; i.e. 'double', see example below. In cases where this is undesirable, data.table allows rounding such data up to approximately 11 s.f. which is plenty of digits for many cases. This is achieved by rounding the last 2 bytes off the significand. Other possible values are 1 byte rounding, or no rounding (full precision, default).

我正在研究一个 hack 实现,它将所有内容缩放为十进制数 x 使得 floor(log10(x)) == 1 并四舍五入,例如:

rnd_sig <- function(x, precision=10) {
exp <- floor(log10(abs(x)))
round(x * 10 ^ (-exp), precision) / 10 ^ (-exp)
}

但我对 float 的了解还不够,无法确保这是安全的(或者何时安全,而不是安全)。

最佳答案

对于使用浮点计算的结果可能与精确的数学结果有多大差异,没有通用答案。通常,计算序列的最终误差范围可以从零到无穷大(并且当存在精确的数学结果时也可能产生非数字结果,或者在没有定义的数学结果时可能产生数字结果)。因此,确定使用什么容差来对两个计算结果是否相等进行分类需要针对具体问题的解决方案:必须分析具体问题中涉及的计算和数量,确定可能的误差范围或权衡具体的优缺点接受不正确的分类。

对导致数值计算的错误的研究是numerical analysis .这是一个广泛的领域,许多 books .没有简单的答案。

在简单的情况下,可以确定错误的界限,并表明这些界限小于已知不同结果之间的差异。换句话说,给定一个理想情况下会产生结果 ab 但实际上会产生 ab 的计算,有可能表明错误上有一些绑定(bind)的 E 使得 |a - b| <E 当且仅当 a 等于 b。但是,如果不知道执行了哪些计算,并且可能不知道输入值的域是什么,就不可能回答这个问题。

关于降低 R 中 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50568973/

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