四舍五入到给定值的最接近的倍数

时间:2021-02-23 06:38:36

标签: c math

如果我们有一个任意的 doublef、另一个 v 和一个乘法因子 p,我如何将值 f 对齐到最接近 vp 次幂?

示例:

  • f = 3150.0
  • v = 100.0
  • p = 2

乘法是这样的

  • 100 (v)
  • 200(乘以 p
  • 400
  • 800
  • 1600
  • 3200

...

f 最接近 3200.0,所以函数应该返回 3200.0

实际上有一个名字,我好像忘记了,也许这就是我找不到这样一个函数的原因。

1 个答案:

答案 0 :(得分:2)

k = floor(log_p(f/v)),其中 log_p(x) = log(x)/log(p)p 函数的对数。根据 floorlog 的属性,p^k v <= f < p^(k+1) v 给出了 f 形式的 p^n v 的两个最接近的值。

选择这两个值中的哪一个取决于您的用例中“nearest”的确切定义。如果采用乘法的意义(在对数刻度上很自然),“最近”值可以直接计算为 p^n v where n = round(log_p(f/v)) = round(log(f/v)/log(p)).

相关问题