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
要解决以下任何数学系列,都可以使用算法。即使在某些情况下它不会满足您的预期答案,但在其他方面它会是正确的。
步骤如下:
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>
我想创建一个 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
要解决以下任何数学系列,都可以使用算法。即使在某些情况下它不会满足您的预期答案,但在其他方面它会是正确的。
步骤如下:
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>