如何计算减值达到某一点的时间?

时间:2011-03-09 20:43:34

标签: c++ visual-studio-2008 math logarithm

我确定之前在学校里有这个,但是我不记得这个叫做什么的。

我有任意数字,我需要知道有多少次我可以将它乘以0.9(或任何其他值0-1),直到距离原始数字小于x。

以循环格式显示:

num = 4654;
mult = 0.9;
limit = 140;
count = 0;
while(num >= limit){
    num *= mult;
    count++;
}

但这是否可以在没有循环的情况下完成?有对数的东西?

2 个答案:

答案 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)