gpt4 book ai didi

c++ - floor() 的奇怪行为

转载 作者:太空狗 更新时间:2023-10-29 23:26:31 26 4
gpt4 key购买 nike

<分区>

我开发了一个 c++ 应用程序(Windows 7、64 位、VS 2008),其中使用了以下公式(所有变量均为 double 类型):

mValue = floor(mValue/mStepping)*mStepping;

这个想法是将数字缩短到给定的小数位数。我认为有更好的方法可以做到这一点,但这不是这里的问题(但如果您有更好的选择,请提出来!)。

mValue来自用户输入,所以大多数情况下小数位数已经可以了。但在某些情况下,输出与输入不同。

例如,mStepping 的值为 0.1(应四舍五入到小数点后一位)。现在,如果 mValue 的值为 14.6,则一切正常。如果 mValue 为 14.7,则结果为 14.6。

那么,为什么 floor(14.7/0.1)*0.1 = 14.6 ?

我测试了其他值,其中大约 20% 的值相差 0.1。我进一步挖掘并发现,14.7/0.1 的二进制编码与 147.0 不同:

14.7/0.1 = ff ff ff ff ff 5f 62 40
147.0 = 00 00 00 00 00 60 62 40

我知道同一个数字可以用不同的方式编码为 double 。但是为什么 floor() 以不同的方式处理它们呢?我该怎么办呢?

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