找到 N 以便连续两个值:
小于10 ^ { - 4}。
换句话说,我们需要多少个术语才能将上述系列近似到给定的数字。
下面是代码,其中我减去两个连续的和值,并将结果与所需的精度进行比较,作为精度测试:
using System;
namespace ProgrammingBasics
{
class ApproximationAccuracy
{
static void Main()
{
double eps = 10e-4;
Console.WriteLine("Precision: {0}, Needed terms: {1}",
eps, numberOfTermsForGivenPrecision(eps));
}
//------------------------------------------------------------------
static long numberOfTermsForGivenPrecision(double epsilon)
{
double lastSum = 0, currentSum = 0;
long term = 0, iterations = 0;
while (true)
{
// \sum \frac{1}{e^n}
currentSum += (1.0 / Math.Pow(Math.E, term++));
if (Math.Abs(currentSum - lastSum) < epsilon)
{
break;
}
lastSum = currentSum;
++iterations;
}
return iterations;
}
}
}
输出:
精确度:0.001,需要的术语:7
在我看来,这些术语对于那种准确性来说太少了,上面的代码和逻辑是对的吗?
答案 0 :(得分:1)
快捷方式:
e -n &lt; 10 -4
-n&lt; LN(10 -4 )
-n&lt; -4 * ln(10)
n> 4 * ln(10)〜= 9.21
n = 10
对于0.001 = 10 -3 :n = 7
答案 1 :(得分:1)
假设部分和的差值小于下一个的差值小于x并不一定要说部分和的差值比系列的和小于x。仍有无数的术语将两者分开。
您需要做的就是计算一个小于x的项,生成该项的n将是您的答案,因为这将是两个连续的部分和之间的差异。
在你的情况下,
1 /(e ^ n)&lt; 1 /(10 ^ 4)
e ^ n&gt; 10 ^ 4
n&gt; LN(10 ^ 4)= 9.2103 ...
并且满足这个的最小n将是你的n(10)。
关于你的代码 - 从输出中我们可以看到存在问题,因为1 /(e ^ 7)= 0.0009&gt; 0.0001 = 1 /(10 ^ 4)。 我们也可以看到问题出在哪里,虽然你要求输入10 ^( - 4):0.001 = 10 ^( - 3)。这与eps的定义有关。