Arc*_*her 3 c++ floating-point bit-manipulation
我正在编写一个算法来舍入浮点数.输入将是一个64位IEEE754双类型数字,非常接近X.5,其中X是小于32的整数.我想到的第一个解决方案是使用位掩码来掩盖那些最低有效位,因为它们代表2 ^ -n的非常小的分数.(给定指数不大).
但问题是我应该这样做吗?有没有其他方法可以完成同样的事情?我觉得在浮点上使用位操作是非常有争议的.谢谢!
我正在使用的语言是C++.
编辑:谢谢大家,感谢您的评论.我很感激!假设我有一个浮点数,可以是1.4999999 ...或21.50000012 ....我想把它舍入到1.5或21.5.我的目标是将任何数字四舍五入到最接近X.5的形式,因为它可以存储在IEEE754浮点数中.
您可以使用任何功能round(),floor(),ceil(),rint(),nearbyint(),和trunc().所有都在不同模式下进行四舍五入,并且都是标准C99.您需要做的唯一事情是通过指定-lm编译器标志来链接标准数学库.
至于尝试通过位操作来实现舍入,我将远离它:a)它将比使用上述函数慢得多(它们通常在可能的情况下使用硬件设施),b)它正在重新发明轮子错误的可能性,以及c)较新的C标准不喜欢你对浮点类型进行一些操作:它们使用所谓的严格别名规则,不允许你只是转换double*为一个uint64_t*.您可能需要通过强制转换为a unsigned char*并逐字节操作IEEE数字来进行位操作,或者您必须使用memcpy()将位表示从double变量复制到a uint64_t和back中.对于已经以标准化功能和硬件支持形式提供的东西来说,有很多麻烦.