Javascript数学:几何级数

Javascript数学:几何级数,javascript,math,finance,Javascript,Math,Finance,我想创建一个Roth IRA值计算器。最终结果将接受年度供款金额、利率和供款年总数的值 我需要的计算——一个几何级数是: Balance(Y) = P(1 + r)Y + c[ ((1 + r)Y + 1 - (1 + r)) / r ] <pre> Examples are as below: 1 2 3 4 5 6 **7** 1 1 1 1 1

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

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

Balance(Y) = P(1 + r)Y + c[ ((1 + r)Y + 1 - (1 + r)) / r ]
<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>
FWIW,我在这里得到我的数学信息:

如何用Javascript编写这篇文章?我一直在读关于数学函数的书,但我似乎无法理解它

如前所述


这是正确的答案,但作为旁注,如果您没有初始值p,则应在默认情况下将其设置为1。

我肯定会阅读JavaScripts

有几件事需要注意

分组具有最高优先级
()
,而不是方形制动器
[]
方括号用于访问对象成员和数组文字

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

对于数学运算,必须将运算符
4(x+1)
与throw一起使用 告诉您
4
不是函数时出错<代码>4*(x+1)有效

使用
*/%
+-
具有同等优先权。因此,数学运算的行为将类似于
pemdas

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

> .1 + .2 = 0.30000000000000004

对于求解以下任何数学级数,都可以使用算法。即使在某些情况下,它也不能满足您预期的答案,但在其他方面它是正确的

步骤如下:
1) 获取如下所示的数字之间的差值:
2) 保持差异,直到它看起来相同(差异为0)。
3) 把相同的最后一个数字放在同一个序列中,通过加上这个差来完成这个序列


举例如下:
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**                       
在下面的js代码中实现了上述相同的算法。
//输入
var-arr=[1,4,9,16];
var pa6inoArrayMelvo=函数(arrr){
var nxtar=[];
对于(i=0;i1){
tempArr=pa6inoArrayMelvo(ar);
keepAlltheArray(tempArr);
}否则{
发电机阵列(保持阵列长度-1);
log(“ans为:+keepArray[0]);
}
}
var GeneratorRay=函数(idx){
if(keepArray[idx+1]){
var a=keepArray[idx+1];
var b=基帕雷[idx];
var ans=a[a.length-1]+b[a.length-1];
keepArray[idx].推送(ans);
}否则{
var ans=keepArray[idx][keepArray[idx].length-1];
keepArray[idx].推送(ans);
}
如果(idx>0){
发电机阵列(idx-1);
}
}
keepAlltheArray(arr);

就像你做的那样,除了在所有情况下都使用
*
进行乘法,使用
()
而不是
[]
你可以使用
数学.pow(x,y)
作为指数如果我理解得好的话,你的函数看起来应该是这样的:函数平衡(y,P,r,c){P*(1+r)*y+c(((1+r)*y+1-(1+r))/r)}
<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>