Javascript数学:几何级数
我想创建一个Roth IRA值计算器。最终结果将接受年度供款金额、利率和供款年总数的值 我需要的计算——一个几何级数是: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
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>