我正在try 创建一个代码,它将一个uint64_t
除以另一个uint64_t
,并对结果进行四舍五入.该代码应尽可能快,并为所有的输入工作(例如,我希望它现在有和条件句).
我目前的解决方案如下所示:
static inline uint64_t divide_with_rounding(uint64_t n, uint64_t d)
{
uint64_t a = n / d;
uint64_t r = n % d;
return a + (r >= d - (d / 2));
}
GCC很好地优化了除法+模,也很好地优化了/ 2
.但我想知道是否有更短、更好的解决方案.
例如,类似这样的事情:
static inline uint64_t divide_with_rounding(uint64_t n, uint64_t d)
{
return (n + d / 2) / d;
}
然而,这一点有一个缺点,即divide_with_rounding(UINT64_MAX, 1000)
等于0.