我正在学习C#atm并试图解决我书中描述的一个问题。 写一个程序,计算和打印(精度为0.001)序列1 + 1/2 - 1/3 + 1/4 - 1/5 + ....我知道这是一个常见的问题,但我几乎失去了整整一天要解决它,但我不能单独做(也许我不够努力)。
static void Main()
{
double sum = 0D;
double sum1 = 0d;
int i = 1;
while ( i <100)
{
i++;
if (i % 2 == 0)
{
sum1 = sum1 +(1 / i);
}
else
{
sum1 = sum1 -(1 / i);
}
sum = sum1 + sum;
Console.WriteLine(Math.Round(sum, 3));
}
}
答案 0 :(得分:10)
由于“i”是一个整数,除法1 / i总是得到0(除了i = 1的情况),因为“/”是一个整数除法运算符,它从不给出分数。所以你应该将一个双重值1.0 / i除以得到分数。
此外,循环条件i <100不是您所需要的。最好设置那里(1.0 / i> 0.001)或变换(i <1000)。对于您所拥有的序列,它将保证所需的准确度。
答案 1 :(得分:1)
你的计算精度不是0.001,你在每一步都是四舍五入。您需要让循环运行abs(current_sum - previous_sum) >= 0.001
。 current_sum
是当前迭代的总和,previous_sum
是前一次迭代的总和。
答案 2 :(得分:-2)
你已经知道这是谐波系列吗?
这很容易计算,但我不确定你的意思 预备部分。
double harmonic = 0;
int partialSumsUpTo = 10000;
for (double i = 1; i <= partialSumsUpTo; ++i)
{
double part = 1 / i;
harmonic += Math.Round(part, 5);
}
请注意这不是扰流板,因为您需要交替谐波系列 为你的功课。但是你肯定会自己得到这个部分。