浮点数向下取整

简介: 浮点数向下取整

浮点数向下取整


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


目录
相关文章
|
Java
位移运算---为何负数不断地无符号向右移动的最小值是1呢?
位移运算---为何负数不断地无符号向右移动的最小值是1呢?
235 0
位移运算---为何负数不断地无符号向右移动的最小值是1呢?
|
JavaScript
JS:数学计算Math相关四舍五入、向上取整、向下取整、取余、保留小数
JS:数学计算Math相关四舍五入、向上取整、向下取整、取余、保留小数
103 0
|
PHP
php中的几种四舍五入取整、向上取整、向下取整、小数截取方法
php中的几种四舍五入取整、向上取整、向下取整、小数截取方法
226 0
php中的几种四舍五入取整、向上取整、向下取整、小数截取方法
|
SQL Oracle 关系型数据库
SQL中数据小数处理(向上取整、向下取整、四舍五入)
SQL中数据小数处理(向上取整、向下取整、四舍五入)
lodash浮点数向下取整
lodash浮点数向下取整
230 0
lodash浮点数向上取整
lodash浮点数向上取整
527 0
C++基础——向上取整/向下取整
C++基础——向上取整/向下取整
783 0
C++基础——向上取整/向下取整
|
算法 索引
【算法专题】使用递归取数组的平均值(向下取整)
【算法专题】使用递归取数组的平均值(向下取整)
1413. 逐步求和得到正数的最小值
给你一个整数数组 nums 。你可以选定任意的 正数 startValue 作为初始值。
127 0
Python小数向上取整和向下取整
Python小数向上取整和向下取整