Реальные тесты происходят от реальных проблем. Как насчет численного интегрирования функции с использованием простой формулы, такой как трапециевидное правило :
Давайте попробуем доказать, что , используя C #
void Main(string[] args)
{
int N = 2097153;
double two = Integral(0, Math.PI, N);
double err = (2.0 - two) / 2.0;
Console.WriteLine("N={0} err={1}", N, err);
}
double f(double x) { return Math.Sin(x); }
double Integral(double a, double b, int N)
{
double h = (b - a) / N;
double res = (f(a) + f(b)) / 2;
for (int j = 1; j < N; j++)
{
double x = a + j*h;
res += f(x);
}
return h * res;
}
В этот момент я получаю N=2097153
и err=2.1183055309848E-13
через несколько миллисекунд. Если вы станете намного выше в точности, тогда ошибка начнет увеличиваться, так как ошибки округления начнут появляться. Я думаю, что нечто подобное может произойти с вычислением для Pi
, тогда как вы достигнете точности станка в течение нескольких миллисекунд и более того. Вы действительно рассчитываете мусор. Вы можете просто повторить интеграл несколько раз для более длительного общего эффекта.
Так что, возможно, вам будет хорошо показать уменьшение времени, скажем, с 140 мс до 90 мс и считать его победой.