舍入到最接近的1/16并截断到C中最接近1/16的值

时间:2012-03-10 16:07:40

标签: c math truncate rounding

假设一个块的大小是1X1,我必须沿x和y方向以1/16的步长移动。我想将0.53124舍入到最接近块的大小的1/16,即0.5625。同样地,我想将0.53124截断到最接近块大小的1/16,即0.5。有没有一种有效的方法呢?请告诉我。

2 个答案:

答案 0 :(得分:5)

在大多数情况下最简单的方法和语言将是

  • 乘以16
  • 舍入到最接近的整数
  • 除以16。

答案 1 :(得分:0)

由于你似乎想要定点,我会尽可能使用定点(以1/16为单位的整数)。但是如果你真的需要混合使用浮点运算和舍入,一种方法是偏差你的所有值都是一个巨大的数字,这样1/16的位置才是最后的位置。不幸的是,对于gcc,这种方法在i387这样的系统上可能存在问题,其中浮点表达式的评估具有额外的精度,除非你已经在任何地方使用long double,所以从实际的角度来看,Joachim的答案可能更容易让人更可靠(虽然它可能表现得更糟)。