如果我们有一个任意的 double
值 f
、另一个 v
和一个乘法因子 p
,我如何将值 f
对齐到最接近 v
的 p
次幂?
示例:
乘法是这样的
v
)p
)...
f
最接近 3200.0
,所以函数应该返回 3200.0
实际上有一个名字,我好像忘记了,也许这就是我找不到这样一个函数的原因。
答案 0 :(得分:2)
令 k = floor(log_p(f/v))
,其中 log_p(x) = log(x)/log(p)
是 p
函数的对数。根据 floor
和 log
的属性,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))
.