我确定我以前在学校有过这个,但我不记得这个东西叫什么了。
我有任意数字,我需要知道我可以将它乘以 0.9(或任何其他值 0-1)多少次,直到原始数字剩下的 x 小于 x。
在循环格式中,它看起来像:
num = 4654;
mult = 0.9;
limit = 140;
count = 0;
while(num >= limit){
num *= mult;
count++;
}
但这甚至可以在没有循环的情况下完成吗?有对数的东西?
我确定我以前在学校有过这个,但我不记得这个东西叫什么了。
我有任意数字,我需要知道我可以将它乘以 0.9(或任何其他值 0-1)多少次,直到原始数字剩下的 x 小于 x。
在循环格式中,它看起来像:
num = 4654;
mult = 0.9;
limit = 140;
count = 0;
while(num >= limit){
num *= mult;
count++;
}
但这甚至可以在没有循环的情况下完成吗?有对数的东西?
注意
num * (0.9)^k <= limit
是您希望对某个整数满足的不等式k
,并且您寻求最小的这样k
。然后
(0.9)^k <= limit / num
和
k * log(0.9) <= log(limit / num)
以便
k >= log(limit / num) / log(0.9)
不等式反转的地方,因为log(0.9) < 0
. k
因此,取大于的最小整数log(limit / num) / log(0.9)
。
所以,取 的上限log(limit / num) / log(0.9)
。
当然,这可以通过替换0.9
为r
where r
is your multiplier from 来概括(0, 1)
。
计数 = log(limit / num) / log(mult)