【发布时间】:2011-05-14 16:32:37
【问题描述】:
我知道 511 除以 512 实际上等于 0.998046875。我也知道浮点数的精度是 7 位。我的问题是,当我在 C++ (GCC) 中进行此数学运算时,我得到的结果是 0.998047,这是一个四舍五入的值。我宁愿只得到 0.998046 的截断值,我该怎么做?
float a = 511.0f;
float b = 512.0f;
float c = a / b;
【问题讨论】:
-
你不能使用双精度来提高精度并截断它吗?
-
这是游戏代码,虽然 double 可以解决上述问题,但我正在为纹理渲染进行此计算,double 可能会增加性能损失。问题是,舍入导致纹理中有一个像素偏移。
-
是您的调试器对值进行舍入。
-
@Nick - 如果您向我们展示导致 1 像素错误的代码,我们可以为您提供帮助(作为一个单独的问题,可能......)
-
不要太确定
doubles 会导致性能下降。在许多系统上,当您使用float时,它实际上会将所有内容转换为double,进行所有数学运算,然后再转换回float——因此,当您使用float时,它实际上做了更多的工作。
标签: c++ math floating-point