求支持向最近整数取整且中间值向零取整的GNU舍入函数
GNU舍入函数需求问题
我查看了GNU提供的舍入函数集,没找到完全符合需求的函数。
根据GNU文档,rint()及其相关函数会按照当前舍入模式将数值舍入为整数,默认模式是「向最近整数取整」。这基本符合我的需求,但它处理中间值时是向无穷大方向取整,具体表现如下:
llround ( 1.500000 == 2), want 1 llround (-1.500000 == -2), want -1 llrint ( 1.500000 == 2), want 1 llrint (-1.500000 == -2), want -1
round()及其相关函数的文档说明:「这些函数与rint类似,但会将中间值向远离零的方向舍入,而非按当前舍入模式取最近整数。」
我没能找到任何默认舍入模式下,具备「中间值向零取整」语义的函数。
我的具体需求是:
- 向最近整数取整
- 中间值向零取整
- 同时支持正负数值
请问是否存在这类函数?
目前我用了一个临时方案,虽然不满意但能满足当前有限的使用场景:
(float_val > 0) ? llrint(float_val - __FLT_EPSILON__) : llrint(float_val + __FLT_EPSILON__)
内容的提问来源于stack exchange,提问作者Tim Kane
相关产品推荐
相关产品推荐

