7

Оптимизируя игру, которую мы разрабатываем, мы сталкиваемся с фазой, на которой рассчитывается каждый выигранный цикл ЦП. Мы используем радианы для расчета местоположения объектов, окружающих другие объекты, и я хочу сократить ненужную точность в моих таблицах поиска. Для этого мы активно используем предопределенный Pi. Насколько точным должен быть этот Pi?Как определить точность Pi (π)

Итак, мой вопрос:

  • Насколько точны достаточно точны?
  • Или еще лучше, как определить необходимую точность?
+12

Я не понимаю, как точность PI будет влиять на циклы вычислений, любые операции с двойным значением будет принимать тот же промежуток времени, независимо от насколько точно это или sn't. Что мне не хватает? Благодарю. –

+1

Я думаю, что, возможно, этот вопрос не понял этого, и предположил, что действительно точное значение больше времени для умножения или чего-то еще. – mquander

+2

@ mquander - Ты прав. Я понятия не имел, что это так. – Kriem

ответ

18

Вы могли бы просто сделать его таким же точным, как любое представление с плавающей точкой, которое вы можете сохранить. Для выполнения вычислений не потребуется больше времени, используя более точное число с плавающей запятой того же типа.

Точность обычно измеряется как количество значащих цифр; вам нужно будет решить, сколько цифр точности вы интересуете. Если вы используете менее точное значение для pi, то погрешность этого значения будет распространяться на другие вычисления, в которых он находится.

+3

+1 для всего использования всего представления с плавающей запятой. Что-нибудь еще будет усечено, что-то меньшее - глупое - зачем вводить преднамеренную ошибку для абсолютно никакой пользы? – Eclipse

+0

Что делать, если решение будет принято между плавающей и двойной? –

+1

Тогда почти наверняка выберите float, потому что float довольно точен, но вам нужно проанализировать конкретный сценарий использования (в том виде, в котором вы продемонстрировали в своем ответе), чтобы определить, действительно ли вам нужна точность двойного. – mquander

0

Не совсем понятно, что ты делаешь. Вы ищете координаты на основе угла? В этом случае точность Pi не имеет значения. Важным является размер таблицы поиска, и вы, конечно, предварительно рассчитаете ее с максимально возможной точностью. Дальнейшая точность не требует дополнительного времени выполнения, кроме того, вы думаете об изменении типа данных с одного на двойной.

+0

Это именно то, что я делаю.Как точность Pi не имеет значения? – Kriem

1

Если вы предварительно рассчитали его и сохранили, вы можете просто использовать математическую библиотеку в своей системе, чтобы вычислить ее один раз как можно точнее. Хороший вариант:

double PI = (16.0 * atan(1/5)) - (4.0 * atan(1/239)); 

Это даст вам достаточно точное значение PI, которое вы можете вычислить при запуске и повторно использовать по мере необходимости. Трудно получить более точную версию, чем то, что легко можно повторно использовать.

+4

Почему бы просто не жестко определить его как константу? – mquander

+0

@mquander На всякий случай он меняется = D – DevinB

+3

О, нет проблем - просто загрузите константу из файла конфигурации XML! – mquander

0

Если вы предварительно вычисляете значение, сделайте его максимально точным, чтобы его можно было сохранить, но чтобы получить истинное представление о том, какая точность на самом деле необходима, вам нужно взглянуть на ваши формулы и точность других компонентов, а не убедиться, что Точность, которую вы имеете для pi, подходит для других компонентов. Численный анализ даст вам множество подсказок.

6

В сравнении: Я думаю, что НАСА использует pi с точностью до 7 десятичных знаков, чтобы иметь возможность состыковываться в пространстве.

Прежде всего нам необходимо определить, насколько точны ваши расчеты по местоположению, т. Е. Насколько точны формулы в вашей программе, которые зависят от pi. Нам нужно начать с того, чтобы узнать, насколько точны pi, необходимые для достижения этого.

Как только это будет определено, вы, вероятно, можете использовать более или менее прямой численный анализ, чтобы определить, насколько хороша точность для pi. Я могу помочь вам в этом, но мне нужны формулы позиции для этого:

Редактировать: Я подозреваю, что ваши формулы линейно зависят от pi, т. Е. Вы не используете какую-то неясную функцию f (x, y, z, pi), где pi квадратично или аналогично. В этом случае точность вашей формулы является фактором, умноженным на точность pi, например. K * EPS (пи). В противном случае это в основном фактор умножает производную от f по отношению к pi. Не считая точности всех других параметров f зависит от!

Cheers!

3

Это зависит от того, сколько significant digits у вас есть в ваших расчетах. Учитывая формулу

C = пи * d

, если вы хотите знать, сколько дюймов в окружности один мили в диаметре, вам потребуется шесть цифр пи держать вы хотите, так как в миле 63 636 дюймов, а в окружности будет 199 051 дюйм. Поскольку в ответе есть шесть значащих цифр, мне нужно шесть цифр pi, чтобы вычислить их с необходимой точностью.

3,14 * 63.360 = 198950,4

3,142 * 63.360 = 199077,12

3,1416 * 63.360 = 199051,776

3,14159 * 63.360 = 199051,1424

Как вы можете видеть, я получил правильный ответ в этом случае всего 5 цифр pi, но это не всегда так. Вам нужно как минимум столько цифр pi, сколько у вас есть значащие цифры до , чтобы обеспечить у вас достаточно точности.

+0

Это звучит разумно. Думаю, вам сначала нужно увидеть самое большое число, которое появляется в ваших расчетах, а затем проверить значимые цифры. – xxxxxxx

-1

Библия говорит, что значение Pi равно 3 (link). Так, конечно, вы должны просто использовать этот :)

+0

Вы даже прочитали эту ссылку? Это довольно ясно развенчивает ваше заявление. – Kevin

+0

извините вот еще один: http://gospelofreason.wordpress.com/2007/06/13/god-said-pi-3-stand-by-your-beliefs-dammit/ – Yogi

+0

BTW Надеюсь, вы осознаете, что я Я просто шучу. – Yogi

-1

новую формулу для пи

Pi=2.m.sin(90/m) 

Pi=3.m.sin(60/m) 

Pi=4.m.sin(45/m) 

Pi=5.m.sin(36/m) 

Для миллионов людей по всему значению PI свободный калькулятор XP, XM, ... .. рекомендую т = 1.0E + 10000000 в успех калькулятора Вам необходимо установить netframework2.0

http://harry-j-smith-memorial.com/index.html