我确定之前在学校里有这个,但是我不记得这个叫做什么的。
我有任意数字,我需要知道有多少次我可以将它乘以0.9(或任何其他值0-1),直到距离原始数字小于x。
以循环格式显示:
num = 4654;
mult = 0.9;
limit = 140;
count = 0;
while(num >= limit){
num *= mult;
count++;
}
但这是否可以在没有循环的情况下完成?有对数的东西?
答案 0 :(得分:6)
请注意
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
来概括,其中r
是(0, 1)
的乘数。
答案 1 :(得分:1)
count = log(limit / num)/ log(mult)