我想计算c#中指定数量的项的总和,例如
http://i.stack.imgur.com/Ssipn.png
(用我计算的术语数替换100)。
此值等于(1/2)+(1/4)+(1/8)+(1/16)+ ... +(1/2 ^ 100)。
我正在考虑使用一个while循环,它将x = 1-100加起来为1/2 ^ x,并将它们相加,我知道如何计算每个单独的术语,但如何在不使用的情况下对每个术语进行求和明确声明100个变量?
感谢您的支持!
(我不需要整个程序,只需要一个while循环类。)
不,我认为双提供足够的精确度。我正在将其应用于其他算术序列。
答案 0 :(得分:3)
您可以使用LINQ执行此操作:
int upper = 100;
var items = Enumerable.Range(1, upper);
double total = items.Select(i => 1.0 / Math.Pow(2.0, i)).Sum();
答案 1 :(得分:2)
我知道你说你不需要整个程序,但它太短了,很难不要!
public double doSummation(int maxPower) {
double sum = 0;
for (int i = 1; i <= maxPower; i++) {
sum += Math.pow(2, i * -1); // 2^(-1) + 2^(-2) + 2^(-3) + ... + 2^(-1 * maxPower)
}
return sum;
}
然后前100个术语的总和将是:
doSummation(100)
答案 2 :(得分:0)
基于Jonathan的回答,这是我完成的代码(使用w3b.sine进行任意数学运算):
using System;
using W3b.Sine;
namespace summation
{
public class Program
{
static BigNum doSummation(int maxPower)
{
BigNum sum = 0;
for (int i = 1; i <= maxPower; i++)
{
sum += Math.Pow(2, i * -1);
}
return sum;
}
static void Main(string[] args)
{
Console.WriteLine(doSummation(100));
}
}
}
W3b.Sine需要包含在装配参考中。
答案 3 :(得分:-1)
我认为这就是你要找的东西
var upperbounds = 100;
var sum = 0;
for (int i = 1;i <= upperbounds ; i++ )
{
sum += 1/Math.Pow(2, i);
}