浮点数向下取整

浮点数向下取整


浏览opencv源码时,看到了cvFloor函数,其中的向下取整很有意思。

CV_INLINE int cvFloor( double value )
{
#if defined CV__FASTMATH_ENABLE_GCC_MATH_BUILTINS || \
    defined CV__FASTMATH_ENABLE_CLANG_MATH_BUILTINS
    return (int)__builtin_floor(value);
#elif defined __loongarch64
    int i;
    double tmp;
    __asm__ ("ftintrm.l.d     %[tmp],    %[in]       \n\t"
             "movfr2gr.d      %[i],      %[tmp]      \n\t"
             : [i] "=r" (i), [tmp] "=f" (tmp)
             : [in] "f" (value)
             :);
    return i;
#else
    int i = (int)value;
    return i - (i > value);
#endif
}

简化一下以上代码:

//首先,代码中将参数value强制转换为int类型,赋值给变量i。

//然后,代码中使用了三元运算符,判断i是否大于value,如果是,则返回i-1,否则返回i。这样的操作可以实现向下取整的效果,将小数部分直接舍去。

//最终,函数返回经过向下取整处理后的整数值。
int quzheng(double value)
{
	int i = (int)value;
	return i - (i > value);
}

测试案例

int main() {
	double a = 1.01;
	cout << quzheng(a) << endl;
	
	double b = 0.99;
	cout << quzheng(b) << endl;

	double c = 1.5;
	cout << quzheng(c) << endl;

	return 0;
}

测试结果:

1
0
1

浮点数向上取整


反之,可以反推出向上取整。

int quzheng(double value)
{
	int i = (int)value;
	return i + (i < value);
}

测试案例同上:
。。。。
测试结果:

2
1
2

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值