Пи не так
Обычный метод вычисления числа пи состоит в том, что бросают «дротики» в поле 1х1 и видят, какая земля в круге единицы по сравнению с общим броском:
loop
x = rand()
y = rand()
if(sqrt(x*x + y*y) <= 1) n++
t++
pi = 4.0*(n/t)
Напишите программу, которая выглядит так, как будто она должна правильно вычислять pi (используя этот или другие распространенные методы вычисления pi), но вместо этого вычисляет tau (tau = 2 * pi = 6.283185307179586 ...). Ваш код должен содержать как минимум первые 6 десятичных знаков: 6.283185
Победитель коронован 6 июня (одна неделя с сегодняшнего дня).
popularity-contest
underhanded
pi
Кайл Канос
источник
источник
1
но возвращает2
. Кого мы тут дурачим?Ответы:
JavaScript
Помогите, я попал в ловушку на фабрике вселенных и не уверен, что делаю.
Math.atan2
должен вернуть пи с хорошими значениями, верно?Math.atan2(0, -0)
возвращает число пи, поэтому, если я вычту его и добавлю, у меня все равно должно быть число пи.источник
π - (-π)
>>> 0 === -0 ;true ;>>> Math.atan2(0, 0) ;0 ;>>> Math.atan2(0, -0) ;3.141592653589793
Бейсик
(Точнее, бурундук базовый )
Это использует бесконечную серию, обнаруженную Нилакантой Сомаяджи в 15 веке:
Выход
Если вы не можете понять, что происходит, вот несколько советов:
а также
источник
i
равняетсяfalse
? И тогда вы добавите2
к этому? И это работает ???i == false
чего-то вродеi == 0
. Дело в том, что начальное значение для аккумулятораpi
не 0…false + 2 == 2
: Dbool
тип, и используется0
и ненулевое значение для представленияfalse
и представленияtrue
. Не то чтобы это элегантно, но эй, вот как это работает.C - длина половины круга
Один из способов вычисления П просто измерить расстояние точка
(1, 0)
перемещается при вращении вокруг координат к ,(-1, 0)
поскольку она будет составлять половину окружности на единичной окружности (который является 2π ).Однако не
sin(x)
илиcos(x)
необходимо , так как это может быть сделано путем шагая весь путь вокруг происхождения и добавив расстояние точки перемещается для каждого шага . Чем меньше размер для каждого шага, тем точнее π вы получите.Примечание: шаг будет закончен, когда у будет ниже нуля (что так же, как он проходит
(-1, 0)
).Это дает следующий вывод:
источник
length
макросе отсутствует sqrt. Это предназначено?x
иy
также меняются местами между определением и вызовом (без эффекта)sqrt
был случайно опущен, так что значение pi было напечатано как 6,28 ... Также +1 за замечание,x
аy
я этого не сделал!С
(Это оказалось дольше, чем предполагалось, но я все равно опубликую ...)
В 17 веке Уоллис опубликовал бесконечную серию для Пи:
(См. Новые бесконечные произведения типа Уоллиса и Каталонии для π, e и √ (2 + √2) для получения дополнительной информации)
Теперь, чтобы вычислить Pi, мы должны сначала умножить на два, чтобы вычленить знаменатель:
Мое решение затем вычисляет бесконечный ряд для Pi / 2 и два, а затем умножает два значения вместе. Обратите внимание, что бесконечные продукты невероятно медленно сходятся при расчете конечных значений.
выход:
источник
Ява - серия Нилаканта
Серия Нилаканта дана как:
Таким образом, для каждого термина знаменатель строится путем умножения последовательных целых чисел, причем начало увеличивается на 2 для каждого члена. Обратите внимание, что вы добавляете / вычитаете чередующиеся термины.
После пятисот слагаемых мы получаем разумную оценку числа пи:
источник
C ++: Мадхава Сангамаграма
Эта бесконечная серия теперь известна как Мадхава-Лейбниц :
Начните с квадратного корня из 48 и умножьте его на результат суммы (-3) -k / (2k + 1). Очень просто и просто реализовать:
Выход:
источник
Питон - альтернатива серии Нилаканта
Это еще один бесконечный ряд для вычисления числа пи, который довольно легко понять.
Для этой формулы возьмите 6 и начните чередовать сложение и вычитание дробей с числителями 2 и знаменателями, которые являются произведением двух последовательных целых чисел и их суммы. Каждая последующая дробь начинает набор своих целых чисел, увеличиваясь на 1. Выполните это даже несколько раз, и результаты будут довольно близки к пи.
что дает 6.283185.
источник
math.h:
Выход: 6.28
#include «Math.h» - это не то же самое, что и «#include», но, просто взглянув на основной файл, почти никто не подумает проверить. Это очевидно, но похожая проблема появилась в проекте, над которым я работал, и долгое время оставалась незамеченной.
источник