【问题标题】:Why does R display wrong number with large numbers?为什么 R 用大数字显示错误的数字?
【发布时间】:2019-12-12 10:00:28
【问题描述】:

当我在 R 中将大量数字保存为对象时,会保存错误的数字吗?这是为什么呢?

options("scipen"=100, "digits"=4)
num <- 201912030032451613 

num
#> [1] 201912030032451616

reprex package (v0.2.1.9000) 于 2019 年 12 月 12 日创建

【问题讨论】:

标签: r math largenumber


【解决方案1】:

正如@Roland 所说,这是一个浮点问题(关于浮点数的维基百科页面和任何东西一样好)。稍微拆开包装,R 具有 specific 整数格式,但仅限于 32 位整数:

> str(-2147483647L)
 int -2147483647
> str(2147483647L)
 int 2147483647
> str(21474836470L)
 num 21474836470
Warning message:
non-integer value 21474836470L qualified with L; using numeric value 

因此,当 R 获取您的数字时,它会将其存储为浮点数而不是整数。浮点数的存储精度有限,通常只有大约 17 个有效数字。因为您的数字有更多的有效数字,所以会丢失精度。丢失最小数字的精度通常对计算机算术无关紧要,但如果你的大数字是某种键(或日期戳),那么你就有更多麻烦了。 bit64 包的设计考虑了这种用例,或者您可以将其作为字符串导入,具体取决于您想要做什么。

【讨论】:

    猜你喜欢
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    相关资源
    最近更新 更多