任何人都可以,请解释为什么舍入0.5
到FE_TONEAREST
所赐0
?它不应该给出"1"的结果吗?有没有办法来解决这个问题?
#include#include #include int main() { fesetround(FE_TONEAREST); std::cout << "Rounding 0.5 to nearest = " << std::rint(0.5) << std::endl; return 0; }
coliru上的runnable代码:http://coliru.stacked-crooked.com/a/9c179ca56f251628
FE_TONEAREST
导致std::rint
将halfway cases(±n.5
)舍入到最接近的偶数整数值.0
甚至.
如果您改为使用std::round
此模式,则中途情况会向上"向上"(远离零),这将导致1
.
请参阅文档std::rint
.
Mathematica.SE解释了为什么你可能想要这种不寻常的舍入形式.(因此,您的数据不会全部向一个方向移动).
顺便说一句,C++提供了标准头文件的正确包装版本,并在std
命名空间中添加了名称(虽然这在这里几乎不重要):通常#include
而不是#include
.