gpt4 book ai didi

c++ - C++ 建议中的舍入错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:42 25 4
gpt4 key购买 nike

我正在尝试用 C++ 对动态系统建模,但在存储值的精度方面存在一些问题。

我已阅读 question关于浮点精度,但我无法弄清楚我的情况出了什么问题。

因此,问题在于存储粒子速度。例如,粒子以 1.01 的速度开始,由于动力系统的性质,它在每次相互作用时只能增加或减少 0.4 个单位。

对于前 2890 次交互,速度值已正确存储(完全精确)。在第 2891 次交互时,速度变为

4.209999999999999

代替

4.21

发生这种情况是因为此时速度第一次达到“丑陋”的值吗?在 2890 次互动之后?

对于这个问题,我有两个可能的解决办法,想向您征求意见。请记住,我需要改变初始速度,而不仅仅是使用 1.01。

  1. 更改系统的单位,使其在每次交互时增加或减少 1.0 的速度。 (这会起作用吗?例如,如果起始速度是 1.21,它可能会在 4.21 值处得到相同的错误?)

  2. 在每次交互后将速度四舍五入到固定的小数位数。 (我不太喜欢这样,因为我必须提前知道速度的精度,这会使程序变得笨拙)

感谢您对此的可能想法。

最佳答案

Iwillnotexist Idonotexist 已经在评论中谈到了根本原因。 IEEE FP 数是二进制分数,4/10 不能完美地表示为二进制分数,就像 1/3 不能完美地表示为小数一样。

如果您必须坚持使用 FP 表示并且愿意更改您使用的值并且您必须具有完美的准确性,那么请坚持使用二进制分数,这些数字可以表示为 1/2、1/4、1/8、1/16 等...

关于c++ - C++ 建议中的舍入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25758945/

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