【发布时间】:2010-12-09 16:41:37
【问题描述】:
我需要编写一个从 unsigned long long 舍入到 float 的函数,并且舍入应该是最接近的偶数。 我不能只做 C++ 类型转换,因为 AFAIK 标准没有指定舍入。 我正在考虑使用 boost::numeric,但在阅读文档后我找不到任何有用的线索。这可以使用那个库来完成吗? 当然,如果有替代品,我很乐意使用它。
任何帮助将不胜感激。
编辑:添加一个示例以使事情更清晰。 假设我想将 0xffffff7fffffffff 转换为它的浮点表示。 C++ 标准允许以下任一种:
- 0x5f7fffff ~ 1.9999999*2^63
- 0x5f800000 = 2^64
现在如果你添加round to最接近偶数的限制,只有第一个结果是可以接受的。
【问题讨论】:
-
如何舍入一个整数值?最接近的甚至是
i & ~1ull。 -
转换完成后对浮点值进行四舍五入。
-
你确定你没有那个倒退吗?应该是
float到unsigned long long? -
是的,我确定。双向转换是相当合法的。
-
你需要弄清楚你真正想要什么。 ULL按标准转换为float的结果可能精确也可能不精确,可以大于或小于原始值,不必表示整数,浮点数可以带小数。
标签: c++ boost floating-point rounding numeric