gpt4 book ai didi

ruby:在 ruby​​ 中从 float 转换为整数会产生奇怪的结果

转载 作者:数据小太阳 更新时间:2023-10-29 08:17:51 27 4
gpt4 key购买 nike

ree-1.8.7-2010.02 :003 > (10015.8*100.0).to_i
=> 1001579
ree-1.8.7-2010.02 :004 > 10015.8*100.0
=> 1001580.0
ree-1.8.7-2010.02 :005 > 1001580.0.to_i
=> 1001580

ruby 1.8.7 产生相同的结果。有谁知道如何根除这种异端? =)

最佳答案

其实,这一切都是有道理的。

因为对于各种 0.8 不能用 1/2 ** x 的任何系列精确表示em>x,肯定是近似表示的,刚好这个比10015.8略小。

所以,当你只是打印它时,它是合理的四舍五入。

当您将其转换为整数而不添加 0.5, 它会将 .79999999... 截断为.7

当您输入 10001580.0, 好吧,它在所有格式中都有一个精确表示,包括 float 和 double。所以你看不到一个值的截断比下一个积分步骤稍微小一点。

float 并不是不准确,它只是对可以表示的内容有限制。是的,FP 非常准确,但不一定代表我们可以使用基数 10 轻松输入的每个数字。(更新/澄清:嗯,具有讽刺意味的是,它可以精确表示每一个整数,因为每一个整数都有一个2 ** x的组成,但是“每一个分数”就是另外一回事了。某些小数可以使用 1/2**x 系列精确组成。)

事实上,JavaScript 实现对所有数值都使用浮点存储和算术。这是因为 FP 硬件为整数产生了精确的结果,所以这让 JS 人员在(当时)几乎完全是 32 位机器上使用现有硬件进行 52 位数学运算。

关于ruby:在 ruby​​ 中从 float 转换为整数会产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5255629/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com