在减去和添加数组项之间交替
Alternate between subtracting and adding array items
我正在尝试使用 Gregory-Leibniz series 创建一个计算圆周率的公式。我创建了一个 for 循环,它用各个值填充一个新数组,但我需要一种方法来交替减去和添加每个数组项,然后吐出结果数。本质上,我需要做这样的事情:
(4/1) - (4/3) + (4/5) - (4/7) + (4/9) - (4/11) + (4/13) - (4/ 15)
以下 for 循环正在正确填充新数组:
var arrLimit = 39;
var newArray = [];
for(i = 1; i <= arrLimit; i += 2) {
newArray.push(4/i);
}
此时我卡住了。我需要一些方法来获取 newArray 并在减法和加法之间交替,然后生成最终数字。
保留一个额外的变量,isNeg = true
。在循环的每次迭代中,只需将其替换为 isNeg = !isNeg;
.
var arrLimit = 39;
var newArray = [];
var isNeg = false;
for(i = 1; i <= arrLimit; i += 2) {
isNeg = !isNeg;
var val = 4/i;
if (isNeg) {
val *= -1;
}
newArray.push(val);
}
你也可以给变量赋值1,然后每次乘以-1来翻转:
var arrLimit = 39;
var newArray = [];
var factor = 1;
for(i = 1; i <= arrLimit; i += 2) {
factor *= -1;
var val = factor * 4 / i;
newArray.push(val);
}
我个人更喜欢第二种方法,但两种方法都很好。
您可以添加一个额外的变量。如果你愿意,你可以同时求和。
var arrLimit = 39;
var newArray = [];
var a=-1
var sum =0
for(i = 1; i <= arrLimit; i += 2) {
a*=-1;
newArray.push(a*4/i);
sum+=a*4/i
}
你可以用reduce对你的数组进行求和,然后根据数组的索引判断*=-1或*=1。
代码如下:
//Test Case 1
var arrLimit = 39;
var newArray = [];
for(i = 1; i <= arrLimit; i += 2) {
newArray.push(4/i);
}
console.log(newArray.reduce(function(pre, cur, currentIndex){
return pre+cur*(currentIndex%2 ? -1 : 1);
}, 0));
//Test Case 2
arrLimit = 11139;
newArray = [];
for(i = 1; i <= arrLimit; i += 2) {
newArray.push(4/i);
}
console.log(newArray.reduce(function(pre, cur, currentIndex){
return pre+cur*(currentIndex%2 ? -1 : 1);
}, 0));
I need some way to take newArray and alternate between subtracting and adding the values, and then produce the final number.
// Your code, unchanged
var arrLimit = 39;
var newArray = [];
for(i = 1; i <= arrLimit; i += 2) {
newArray.push(4/i);
}
// reduce the array to the final result
// (2*(-i%2)+1) alternates between `-1` and `1`.
var result = newArray.reduce( (prev,curr,i) => prev + (2*(-i%2)+1)*curr );
console.log( result );
首先取消数组并能够 "calculate" pi 使用任意多的术语如何?
let pi = 0,
terms = 100;
for (var i = 0; i < terms; i++){
pi += 4/(2*i + 1) * ( i % 2 == 0 ? 1 : -1)
}
console.log(pi);
建的时候可以看看newArray
的长度,乘以-1或者+1
var arrLimit = 39;
var newArray = [];
for(i = 1; i <= arrLimit; i += 2) {
newArray.push(4 / i * (newArray.length % 2 ? 1 : -1));
}
console.log(newArray);
我正在尝试使用 Gregory-Leibniz series 创建一个计算圆周率的公式。我创建了一个 for 循环,它用各个值填充一个新数组,但我需要一种方法来交替减去和添加每个数组项,然后吐出结果数。本质上,我需要做这样的事情:
(4/1) - (4/3) + (4/5) - (4/7) + (4/9) - (4/11) + (4/13) - (4/ 15)
以下 for 循环正在正确填充新数组:
var arrLimit = 39;
var newArray = [];
for(i = 1; i <= arrLimit; i += 2) {
newArray.push(4/i);
}
此时我卡住了。我需要一些方法来获取 newArray 并在减法和加法之间交替,然后生成最终数字。
保留一个额外的变量,isNeg = true
。在循环的每次迭代中,只需将其替换为 isNeg = !isNeg;
.
var arrLimit = 39;
var newArray = [];
var isNeg = false;
for(i = 1; i <= arrLimit; i += 2) {
isNeg = !isNeg;
var val = 4/i;
if (isNeg) {
val *= -1;
}
newArray.push(val);
}
你也可以给变量赋值1,然后每次乘以-1来翻转:
var arrLimit = 39;
var newArray = [];
var factor = 1;
for(i = 1; i <= arrLimit; i += 2) {
factor *= -1;
var val = factor * 4 / i;
newArray.push(val);
}
我个人更喜欢第二种方法,但两种方法都很好。
您可以添加一个额外的变量。如果你愿意,你可以同时求和。
var arrLimit = 39;
var newArray = [];
var a=-1
var sum =0
for(i = 1; i <= arrLimit; i += 2) {
a*=-1;
newArray.push(a*4/i);
sum+=a*4/i
}
你可以用reduce对你的数组进行求和,然后根据数组的索引判断*=-1或*=1。
代码如下:
//Test Case 1
var arrLimit = 39;
var newArray = [];
for(i = 1; i <= arrLimit; i += 2) {
newArray.push(4/i);
}
console.log(newArray.reduce(function(pre, cur, currentIndex){
return pre+cur*(currentIndex%2 ? -1 : 1);
}, 0));
//Test Case 2
arrLimit = 11139;
newArray = [];
for(i = 1; i <= arrLimit; i += 2) {
newArray.push(4/i);
}
console.log(newArray.reduce(function(pre, cur, currentIndex){
return pre+cur*(currentIndex%2 ? -1 : 1);
}, 0));
I need some way to take newArray and alternate between subtracting and adding the values, and then produce the final number.
// Your code, unchanged
var arrLimit = 39;
var newArray = [];
for(i = 1; i <= arrLimit; i += 2) {
newArray.push(4/i);
}
// reduce the array to the final result
// (2*(-i%2)+1) alternates between `-1` and `1`.
var result = newArray.reduce( (prev,curr,i) => prev + (2*(-i%2)+1)*curr );
console.log( result );
首先取消数组并能够 "calculate" pi 使用任意多的术语如何?
let pi = 0,
terms = 100;
for (var i = 0; i < terms; i++){
pi += 4/(2*i + 1) * ( i % 2 == 0 ? 1 : -1)
}
console.log(pi);
建的时候可以看看newArray
的长度,乘以-1或者+1
var arrLimit = 39;
var newArray = [];
for(i = 1; i <= arrLimit; i += 2) {
newArray.push(4 / i * (newArray.length % 2 ? 1 : -1));
}
console.log(newArray);