Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Math.pow()重构for()循环?_Javascript_Loops_Pow - Fatal编程技术网

Javascript 使用Math.pow()重构for()循环?

Javascript 使用Math.pow()重构for()循环?,javascript,loops,pow,Javascript,Loops,Pow,这里有一个问题,我希望它能提高我的编程水平。我有一个循环,它根据年度付款计算未来金额,按利息增加,按通货膨胀贬值。它来自Excel中的PV函数: var pmt = 66,449.75 // annual payment var ip = 0.03 // interest rate var fv = 0 // future value, not require here var k = 1 // interest is applied at beginning / end of period v

这里有一个问题,我希望它能提高我的编程水平。我有一个循环,它根据年度付款计算未来金额,按利息增加,按通货膨胀贬值。它来自Excel中的PV函数:

var pmt = 66,449.75 // annual payment
var ip = 0.03 // interest rate
var fv = 0 // future value, not require here
var k = 1 // interest is applied at beginning / end of period
var n = 25 // number of periods (years in this case)
var ri = 0.025 // rate of inflation
var pv = 0;    
for (var i = n - 1; i >= 0; i -= 1) {
    pv = (pv + (pmt * k - fv) * Math.pow(1 + ri, i)) / (1 + ip);
}

是否可以使用Math.pow来重现这个循环所做的事情?

为了简化,我重命名了一些表达式

a=pmt*k-fv; b=1+ri; c=1+ip; x=pv; 所以你的代码变成了

对于var i=n-1;i>=0-我{ x=x/c+a*Math.powb,i/c; } 然后

x_0 x_1=x_0/c+ab^{n-1}/c x_2=x_1/c+ab^{n-2}/c=x_0/c^2+ab^{n-1}/c^2+ab^{n-2}/c ... x_i=x_{i-1}/c+ab^{n-i}/c=x_0/c^i+\sum{k=1}^i a b^{n-k}/c^{i-k+1} ... x_n=x_0/c^n+\sum{k=1}^n a*b^{n-k}/c^{n-k+1} 根据,

x_n=x_0/c^n+a b^n-c^n/c^n b-c 因此,您可以使用

var foo=Math.pow1+ip,n;//c^n pv=pv/foo+pmt*k-fv*数学功率1+ri,n-foo/foo/ri ip;
您在每个迭代中都在重新创建pv,您想要归档什么?它在做什么?我不是编译器,你的变量命名对问题没有帮助。你的问题需要更多细节。如果这是实现一个特定的数学方法或算法,请添加信息,说明哪一种方法可能是完全不同的、更有效的实现,以达到相同的结果。另外,请确保您的代码解释了您的变量。如果这是一个复制粘贴,需要额外的努力重命名您的变量,以便我们能够理解它们的用途,或者在您的帖子中解释它们。如果没有这些,pmt、k、fv、ri和ip可能是我们所知道的常数,而像pmt*k-fv这样的东西在循环中毫无意义。感谢您的努力!然而,使用此代码不会产生与我以前的代码相同的结果。抱歉,但正如一些读者指出的那样,我确实遗漏了一些可能至关重要的细节——我现在已经在上面添加了这些细节。当我将你的代码与我的代码并排比较时,你的代码生成的值为125046905.28783791,我的代码生成的值为184770003.67224348。@stylecramper使用pmt=66449.75 66449.75抛出,你的代码是1522310.2610685586,我的代码是1522310.2610685711。1.25e-8的微小差异是正常的,因为存在精度错误。@Stylecrapper一点也不:如果答案解决了您的问题,请随意将其标记为已接受。