【问题标题】:How to calculate when a diminished value reaches a certain point?如何计算减少的值何时达到某个点?
【发布时间】:2011-03-09 20:43:34
【问题描述】:
我确定我以前在学校有过这个,但我不记得这个东西叫什么了。
我有任意数字,我需要知道我可以将它乘以 0.9(或任何其他值 0-1)多少次,直到原始数字剩下的小于 x。
循环格式如下:
num = 4654;
mult = 0.9;
limit = 140;
count = 0;
while(num >= limit){
num *= mult;
count++;
}
但这甚至可以在没有循环的情况下完成吗?有对数的东西?
【问题讨论】:
标签:
c++
visual-studio-2008
math
logarithm
【解决方案1】:
注意
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,不等式反转。因此,取大于log(limit / num) / log(0.9) 的最小整数k。
那么,以log(limit / num) / log(0.9) 为上限。
当然,这可以通过将0.9 替换为r 来概括,其中r 是(0, 1) 的乘数。
【解决方案2】:
count = log(limit / num) / log(mult)