获得一个数字将与另一个数字相乘的次数,直到达到一定限度

时间:2015-03-20 18:32:10

标签: javascript math

我可以得到一个数字与另一个数字相乘的次数,直到达到一定限度:

var velocity = -5.706875;
var friction = 0.9925;
var limit = 0
var times = 0;

while (Math.floor(Math.abs(velocity)*10) > limit) {
    velocity *= friction;
    times += 1;
}
// times = 538

有没有办法让时间没有循环? 尝试Math.log(5.706875, 0.9925),但它给出了另一个结果。

2 个答案:

答案 0 :(得分:2)

当然,你有:

times = Math.ceil(Math.log(-0.1/velocity)/Math.log(friction));

编辑:

实际上,考虑到limit var,它将是:

times = Math.ceil(Math.log(-(0.1+limit/10)/velocity)/Math.log(friction));

答案 1 :(得分:0)

@lpg提供了正确的答案。澄清一下:

首先,Math.floor(Math.abs(velocity)*10) > 0是说Math.abs(velocity) > 0.1的迂回方式,因为您希望在v * 10小于1时(或换句话说{{ {1}}小于0.1)。

所以我们可以从那开始。您的迭代过程不断将速度确定为v,其中v = vi * f ^ n是迭代次数,因此我们有:

n

我们希望求解abs(v * f ^ n) > abs(0.1) 的值,使双方都相等,使其成为阈值点。

在这种情况下,我们知道n是肯定的,因为f ^ n是肯定的,我们知道f是否定的,所以v等于{{1} }}

一步一步,我们可以做到:

abs(v * f ^ n)

此时,它只是一个简单的计算,根据需要进行四舍五入以计算最后一次迭代:

-v * f ^ n
相关问题