为什么R用大数字显示错误的数字?

为什么R用大数字显示错误的数字?,r,math,largenumber,R,Math,Largenumber,当我在R中保存一个大数字作为对象时,是否保存了错误的数字?为什么呢 选项(“scipen”=100,“数字”=4) 编号[1]201912030032451616 由(v0.2.1.9000)创建于2019-12-12,正如@Roland所说,这是一个浮点问题(关于浮点数字的维基百科页面与任何东西一样好)。尽管将其解压一点,R具有特定的整数格式,但它仅限于32位整数: >str(-2147483647L) int-2147483647 >str(2147483647L) 国际电话2147483

当我在R中保存一个大数字作为对象时,是否保存了错误的数字?为什么呢

选项(“scipen”=100,“数字”=4)
编号[1]201912030032451616

由(v0.2.1.9000)创建于2019-12-12,正如@Roland所说,这是一个浮点问题(关于浮点数字的维基百科页面与任何东西一样好)。尽管将其解压一点,R具有特定的整数格式,但它仅限于32位整数:

>str(-2147483647L)
int-2147483647
>str(2147483647L)
国际电话2147483647
>str(21474836470L)
号码21474836470
警告信息:
用L限定的非整数值21474836470L;使用数值

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

正如@Roland所说,这是一个浮点问题(维基百科关于浮点数字的页面和任何东西一样好)。尽管将其解压一点,R具有特定的整数格式,但它仅限于32位整数:

>str(-2147483647L)
int-2147483647
>str(2147483647L)
国际电话2147483647
>str(21474836470L)
号码21474836470
警告信息:
用L限定的非整数值21474836470L;使用数值

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

你的预期输出是什么?相关:你真的需要阅读一些关于浮点数的解释。当然,你有什么推荐的链接吗罗兰?一篇经典文章:。这已经将近30年了,但仍然有效。您预期的输出是什么?相关:您确实需要阅读一些关于浮点数的解释。当然,您有任何推荐的链接吗罗兰?一篇经典文章:。这已经将近30年了,但仍然有效。