在E17之后,实数被切断了?

Tunguska991Tunguska991 成员职位:1新手
大家好,亲爱的社区,
这是我在任何计算机科学/数据科学相关论坛上的第一个帖子,这真的很令人兴奋,也是为什么我也希望我乐鱼平台进入没有错过讨论我的问题的帖子。我也希望我的问题不是在座各位的常识。
我基本上已经解决了我的问题,但我真的很好奇为什么会发生这种情况,如果这是正常的。

今天早上我一直在尝试处理18位长的大数字。我从Excel文件中读取数据为“real”,在我将这些数字的导入更改为“polynominal”之前。现在,当将结果选项卡中的这些数字导入为实数时,会发生一些有趣的事情:

我的Results选项卡中的示例数字表示为:123456789112345670
如果选择单元格并将焦点放在它上,则数字可能如下所示:123456789112345668
如果复制单元格而不关注它,它将粘贴为:1.2345678911234567E17
现在,如果您将其保存为csv或Excel文件,它也会将数字四舍五入为1.2345678911234567E17
如果使用数字到多边形运算符,则数字将四舍五入为123456789112345670,而不是写123456789112345668

这是故意的吗?这与存储实数时使用的位数有关吗?最大实数不应该在+/-E32或史密斯附近吗?


感谢社区和在RapidMiner工作的每个人,为这个令人兴奋的环境充满了对数据科学主题的学习和热情!乐鱼平台进入


最好的问候!






标记:

答案

  • yyhuangyyhuang 管理员,员工,RapidMiner认证分析师,RapidMiner认证专家,成员职位:362RM数据科学家
    这绝对是在RapidMiner的大数字溢出问题。您可以使用标称字符串来表示这种类型的长整数。
  • 迈克尔迈克尔 管理员,员工,RapidMiner认证分析师,RapidMiner认证专家,成员职位:30.RM数据科学家
    RapidMiner使用所谓的IEEE 754 64位浮点数(“双精度”)来表示实际属性。

    它基本上被限制为53位整数,之后您可能会遇到舍入错误。这个Stack Overflow的答案有更多的细节:

    https://stackoverflow.com/a/1848762

    2^53是一个16位数。因此,您的18位数字可能是四舍五入的。以这个从64位整数("long")到"double"再到"long"的转换为例:

    #最后的L表示64位整数(长)jshell> var x = 123456789112345668L x ==> 123456789112345668 #将x转换为双值,然后返回为长jshell>(长)(双值)x $2 ==> 123456789112345664

    现在,我不会把您看到的差异称为有意的,而只是类似的舍入问题的产物,根据应用转换的顺序,这些问题可能以不同的方式出现。

    请注意,显示值的代码也可能进行一些转换(但这不会修改底层数据)。
    MartinLiebig
登录注册置评。