C 四舍五入到给定值的最近倍数
如果我们有一个任意的C 四舍五入到给定值的最近倍数,c,math,C,Math,如果我们有一个任意的double值f,另一个v和一个乘法因子p,我如何将值f捕捉到最接近的vp的幂 例如: f=3150.0 v=100.0 p=2 乘法将是这样的 100(v) 200(乘以p) 四百 八百 1600 3200 f最接近3200.0,因此函数应返回3200.0 实际上,它有一个名字,我似乎已经忘记了,也许这就是为什么我找不到这样一个函数。让k=floor(log\u p(f/v))其中log\u p(x)=log(x)/log(p)是以p函数为底的对数。根据floor
double
值f
,另一个v
和一个乘法因子p
,我如何将值f
捕捉到最接近的v
p的幂
例如:
- f=3150.0
- v=100.0
- p=2
- 100(
)v
- 200(乘以
)p
- 四百
- 八百
- 1600
- 3200
f
最接近3200.0
,因此函数应返回3200.0
实际上,它有一个名字,我似乎已经忘记了,也许这就是为什么我找不到这样一个函数。让
k=floor(log\u p(f/v))
其中log\u p(x)=log(x)/log(p)
是以p
函数为底的对数。根据floor
和log
的属性,可以得出p^k v“最近的”是指绝对差值还是比率log\u p(f/v)
应该让您知道在哪里查找。@dxiv该值应该被捕捉到最近的乘法。在本例中,该值为所列值之一(如果值舍入log_p(f/v))
到最接近的整数k
,那么您要查找的数字是p^kv
。如果这不是您想要的,那么请提问并澄清。@dxiv什么是log\u p
?如果这是一个函数名,在C中没有。或者它是在pThe上方的log。您可以将log\u p(f/v)
计算为log(f/v)/log(p)
。你的数学很好。我也需要学习所有这些。另外,你认为如何使用适当的术语编辑我的问题,以便更容易从他人那里找到和理解?如果你认为这很有用,以便其他人可以找到我的问题和你的答案。@Edenia这个问题写得很好,除了你打错了用“二的幂”代替“p的幂”。计算出的例子也有帮助,剩下的歧义是关于“最近的”是如何定义的,这是我无法猜测的。例如,4
在线性意义上比8
更接近2
(因为4-2<8-4
),但在乘法意义上与2
和8
相同(因为4/2=8/4
)。因此我应该添加最近的(线性意义上)。或“最近的(最小距离意义上)”,这可能更容易理解。但是,在这种情况下,解决方案不是由round
给出的,而是由floor
或ceil
中的一个给出的,它必须通过比较f-p^k v
与p^(k+1)v-f
的两个距离来选择。正确的解决方案似乎只有round