r - R 中浮点精度的极端数值

标签 r floating-point rounding precision ieee-754

有人可以向我解释以下输出。我知道它与浮点精度有关,但大小的顺序(差异 1e308)让我感到惊讶。

0:高精度

> 1e-324==0
[1] TRUE
> 1e-323==0
[1] FALSE

1:非常不精确
> 1 - 1e-16 == 1
[1] FALSE
> 1 - 1e-17 == 1
[1] TRUE

最佳答案

R 使用 IEEE 754 double 浮点数。

浮点数在零附近更密集。这是因为它们被设计为在很宽的范围内进行准确计算(如您所见,相当于大约 16 位有效十进制数字)。

也许您期望具有统一绝对精度的定点系统。在实践中,不动点要么是浪费的,要么必须事先仔细估计每个中间计算的范围,如果它们是错误的,后果将很严重。

正浮点数看起来像这样,示意性地:

+-+-+-+--+--+--+----+----+----+--------+--------+- -------+---
0

最小的正正规 double 数是 2 的最小指数次方。接近一, double 浮点数已经分散得很远。从一到它下面的数字有2-53的距离,从一到它上面的数字有2-52的距离。

关于r - R 中浮点精度的极端数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24847918/

相关文章:

c - 将打印浮点值转换为分数的程序不起作用..?

go - 生成 n 个不是 ∞ 或 NaN 的不同 float (在 Go 中)

python - python2 和 python3 之间的舍入行为不同

floating-point - IEEE754 浮点最常见的舍入算法

r - 使 .combine 函数可扩展

r - xtable 与 p 值的相关矩阵

r - 多方体中没有空间的盒子

使用 R 读取 CSV,其中标题位于第二行

javascript - 在格式化浮点值时,JavaScript 如何确定要生成的位数?

c++ - 使用 4/5 舍入规则对数字进行舍入