浮点数向下取整

简介: 浮点数向下取整

浮点数向下取整


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


目录
相关文章
|
9月前
|
机器学习/深度学习 算法 测试技术
【前缀和]LeetCode1862:向下取整数对和
【前缀和]LeetCode1862:向下取整数对和
|
Java
位移运算---为何负数不断地无符号向右移动的最小值是1呢?
位移运算---为何负数不断地无符号向右移动的最小值是1呢?
254 0
位移运算---为何负数不断地无符号向右移动的最小值是1呢?
35.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
60 0
35.数值的整数次方
|
PHP
php中的几种四舍五入取整、向上取整、向下取整、小数截取方法
php中的几种四舍五入取整、向上取整、向下取整、小数截取方法
238 0
php中的几种四舍五入取整、向上取整、向下取整、小数截取方法
|
前端开发 JavaScript 程序员
数值的整数次方
数值的整数次方
数值的整数次方
|
JavaScript
JS:数学计算Math相关四舍五入、向上取整、向下取整、取余、保留小数
JS:数学计算Math相关四舍五入、向上取整、向下取整、取余、保留小数
114 0
|
存储 Java
从0.2+0.4不等于0.6说浮点数
从0.2+0.4不等于0.6说浮点数,浮点数我一直心存疑惑。
162 0
从0.2+0.4不等于0.6说浮点数
|
SQL Oracle 关系型数据库
SQL中数据小数处理(向上取整、向下取整、四舍五入)
SQL中数据小数处理(向上取整、向下取整、四舍五入)
lodash浮点数向下取整
lodash浮点数向下取整
255 0