浮点数向下取整

简介: 浮点数向下取整

浮点数向下取整


浏览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


目录
相关文章
|
7月前
|
机器学习/深度学习
什么是浮点数加减运算里的对阶,阶码和尾数
什么是浮点数加减运算里的对阶,阶码和尾数
95 1
|
JavaScript
JS:数学计算Math相关四舍五入、向上取整、向下取整、取余、保留小数
JS:数学计算Math相关四舍五入、向上取整、向下取整、取余、保留小数
79 0
|
SQL Oracle 关系型数据库
SQL中数据小数处理(向上取整、向下取整、四舍五入)
SQL中数据小数处理(向上取整、向下取整、四舍五入)
06:浮点数向零舍入
06:浮点数向零舍入
175 0
|
Java
位移运算---为何负数不断地无符号向右移动的最小值是1呢?
位移运算---为何负数不断地无符号向右移动的最小值是1呢?
165 0
位移运算---为何负数不断地无符号向右移动的最小值是1呢?
lodash浮点数向下取整
lodash浮点数向下取整
173 0
lodash浮点数向上取整
lodash浮点数向上取整
470 0
|
PHP
php中的几种四舍五入取整、向上取整、向下取整、小数截取方法
php中的几种四舍五入取整、向上取整、向下取整、小数截取方法
194 0
php中的几种四舍五入取整、向上取整、向下取整、小数截取方法
|
算法 索引
【算法专题】使用递归取数组的平均值(向下取整)
【算法专题】使用递归取数组的平均值(向下取整)
【3.整数与浮点数二分】
1.整数二分 >### 二分本质 >- 有单调性,一定可以二分 >- 二分的题目,不一定非要有单调性 >### 思路:分俩种情况,有俩种模板
76 0
【3.整数与浮点数二分】