Вот, например, число π (кстати, по-английски произносится как "пай", а не "пи"). Как его подсчитать?
Берём формулу площади круга:
A = πr2. Соответственно, π = A / r2. Если радиус круга r = 1, то число π равно его площади, π = A.
Осталось подсчитать площадь круга. Как это сделать?
Я взял известную всем формулу для полуокружности: y2 = r2 - x2. Для полуокружности радиуса 1 получаем y = √(1 - x2).
Эту полуокружность можно разбить на отдельные заострённые с одной стороны "столбики".
Их площадь посчитать уже проще простого -- прямоугольник с прямоугольным треугольником, простая геометрическая задача. Затем сложить площадь всех "столбиков" вместе. Чем больше у нас будет "столбиков", и чем более узкими они будут -- тем более высокая точность будет при расчёте площади этого полукруга.
Потом эту площадь нужно будет домножить на два, чтобы получить площадь круга. Voila -- вот вам и число π.
Можно сократить число расчётов вдвое -- рассчитывать только четверть круга, где -1 ≤ x ≤ 0
Тогда, естественно, надо будет домножать на четыре, а не на два.
Теперь к делу. Вот небольшая программка на Джаве, которая менее, чем за секунду, рассчитывает значение π с точностью до девятого знака после запятой:
public class Calc
{
public static void main (String [] agruments)
{
double deltaX = 0.0000001, Y1, Y2;
double area = 0.0;
for (double X = -1.0; X + deltaX < 0.0; X += deltaX)
{
Y1 = Math.sqrt(1 - X*X);
Y2 = Math.sqrt(1 - (X + deltaX) * (X + deltaX));
area = area + ( Y1 * deltaX + (Y2 - Y1) * deltaX / 2);
}
area = area * 4;
System.out.print(area);
}
}
В теории, число π, выдаваемое программой, должно быть несколько меньше реального. Однако на практике при дальнейшем уменьшении ∆x у меня это число получилось несколько больше (даже уменьшилась точность!), а считать программа стала уже существенно медленее.
Грешу на накапливающуся ошибку (см. http://nlothik.livejournal.com/96410.html ). Если кто-то из математиков заметил ляп -- прошу высказываться.
Конечно, можно написать свою библиотеку для работы с сильно многобитными числами с плавающей запятой, но это как-нибудь в другой раз.