【发布时间】:2017-02-16 20:37:01
【问题描述】:
#include<iostream>
long myround(float f)
{
if (f >= UINT_MAX) return f;
return f + 0.5f;
}
int main()
{
f = 8388609.0f;
std:cout.precision(16);
std::cout << myround(f) << std::endl;
}
输出:8388610.0
我正在尝试理解输出。下一个大于的浮点数 8388609.0 是 8388610 但是为什么四舍五入的值不是 8388609?
【问题讨论】:
-
“下一个大于 8388609.0 的浮点数是 8388610” 你是怎么得出这个结论的?
-
单精度浮点数没有足够的空间来保证所有这些十进制数字(超过六个)的表示。你想做什么?
-
此代码无法编译。您没有
f的声明。发布您的实际 minimal reproducible example 导致所述输出。 -
@LightnessRacesinOrbit 2^24 以下的所有整数都可以精确表示为单精度浮点数,2^23 以上的所有单精度浮点数都是整数。
-
@LightnessRacesinOrbit ...是吗?不知道你在说什么。 8388609 之后的下一个
float是 8388610 的事实直接来自这些属性,所有七位整数都可以表示为floats 的事实也是如此。
标签: c++ floating-point precision