【问题标题】:R rounding explanationR 舍入说明
【发布时间】:2011-10-28 15:52:01
【问题描述】:

谁能解释一下为什么这会产生不同的输出?

round(1.49999999999999)
1


round(1.4999999999999999)
2

我已经阅读了完整的文档,但没有提到任何关于它的内容。 我知道 R 表示二进制形式的数字,但是为什么添加两个额外的 9 会改变结果?

谢谢。

【问题讨论】:

标签: r


【解决方案1】:

1.4999999999999999 不能在内部表示,所以它被四舍五入为1.5

现在,当您应用round() 时,结果为2

【讨论】:

  • 谢谢,R 有时会给出一些带小数的奇怪结果。
  • @user557240 在这方面,R 没有什么特别之处。
【解决方案2】:

将这两个数字放入变量中,然后打印出来 - 你会发现它们是不同的。

计算机不会以这种精确值存储这种数字,(它们内部不使用十进制数字)

【讨论】:

  • 最好在打印之前设置options(digits=20),否则它们会看起来一模一样
  • 如其他回复中所述 - 1.4999999999999999 存储为 1.5,因此您不会得到相同的结果!
【解决方案3】:

我从未使用过 R,所以我不知道这是否是问题所在,但在 C/C++ 等其他语言中,像 1.4999999999999999 这样的数字由浮点数或双精度数表示。

由于这些具有有限的精度,您不能准确地表示像 1.4999999999999999 这样的东西。由于浮点精度的限制,可能是 1.4999999999999999 实际上存储为 1.50000000000000。

【讨论】:

  • R 确实使用了 IEEE 浮点运算,所以它也有同样的问题。
猜你喜欢
  • 1970-01-01
  • 2015-12-24
  • 2016-08-02
  • 2023-03-26
  • 1970-01-01
  • 2020-07-24
  • 2017-04-03
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多