Javascript 数学:几何级数

Javascript Math: Geometric Series

我想创建一个 Roth IRA 值计算器。最终结果将接受年度供款金额、利率和供款年限的值。

我需要的计算——几何级数是:

Balance(Y) = P(1 + r)Y + c[ ((1 + r)Y + 1 - (1 + r)) / r ]

FWIW,我在这里获取我的数学信息:http://www.moneychimp.com/articles/finworks/fmbasinv.htm

如何在 Javascript 中编写此内容?我一直在阅读有关数学函数的内容,但我似乎无法理解它...

Yann Chabot所说

P*(1 + r)*Y + c(((1 + r)*Y + 1 - (1 + r)) / r) 

是正确的答案,但作为旁注,如果您没有 P initialy,则默认情况下应将其设置为 1。

我肯定会阅读 JavaScripts operator precedence

一些注意事项...

分组具有最高优先级 (),不使用方括号 [] 方括号用于访问对象成员和数组文字。

JavaScript 中没有指数运算符使用 Math.pow(x, n)

对于数学运算,您必须使用带有 throw an 的运算符 4(x + 1) 错误告诉你 4 不是函数。 4 * (x + 1) 有效。

以下运算符从左到右计算 * / % + -* / %+ - 具有同等优先权。所以数学运算的行为类似于 pemdas.

另一个注意点JavaScript是一种动态松散类型语言。所有数字都是 64 位浮点数,在某些数学方程式中可能会产生奇怪的结果,例如

> .1 + .2 = 0.30000000000000004

Another good read

要解决以下任何数学系列,都可以使用算法。即使在某些情况下它不会满足您的预期答案,但在其他方面它会是正确的。

步骤如下:
1)得到数字之间的差值如下图:
2) 保持差异直到看起来相同(差异为 0)。
3) 将相同的最后一个数字放在该序列中,并通过添加该差异来完成该系列。

<pre>
Examples are as below:

1       2       3       4       5       6       **7**

   1        1       1       1       1       **1**   


1       4       9       16      25      **36**      
     3      5       7       9       **11**          
        2       2       2       **2**               



1       8       27      64      125     **216**     
    7       19      37      61      **91**          
        12      18      24      **30**              
            6       6       **6**                   
                0       **0**                       


</pre>

The same above algorithm is implemented in below js code.


<pre>
//the input

var arr=[1,4,9,16];

var pa6inoArrayMelvo = function(arrr){
var nxtArr=[];
    for(i=0;i<arrr.length;i++){
        if(arrr[i+1] != undefined){
            nxtArr.push(arrr[i+1] -arrr[i]);
        }
    }
    return nxtArr;
}
var keepArray=[];

var keepAlltheArray= function(ar){
    var tempArr=[];

        keepArray.push(ar);
        if(ar.length>1){

          tempArr=pa6inoArrayMelvo(ar);       
          keepAlltheArray(tempArr);
        }else{
            generateArray(keepArray.length-1);
            console.log("ans is:"+keepArray[0]);
        }


}

var generateArray=function(idx){
    if(keepArray[idx+1]){
        var a=keepArray[idx+1];
        var b=keepArray[idx];
        var ans=a[a.length-1]+b[a.length-1];
        keepArray[idx].push(ans);
    }else{
        var ans=keepArray[idx][keepArray[idx].length-1];
        keepArray[idx].push(ans);
    }
    if(idx>0){
        generateArray(idx-1);
    }
}

keepAlltheArray(arr);

</pre>