Подтвердить что ты не робот

Math постоянное значение PI в C

Вычисление значения PI является одной из сложных проблем, и wikipedia говорит о approximations для этого и говорит, что сложно точно вычислить PI,

Как C вычисляет PI? Рассчитывает ли он каждый раз или использует менее точное фиксированное значение?

4b9b3361

Ответ 1

В C Pi определяется в math.h: #define M_PI 3.14159265358979323846

Ответ 2

Ближайшая вещь C делает "вычисление π" способом, который непосредственно видима для приложений acos(-1) или аналогичным. Это почти всегда выполняется с помощью полиномиальных/рациональных аппроксимаций для вычисляемой функции (либо в C, либо в микрокоде FPU).

Однако интересной проблемой является то, что вычисление тригонометрических функций (sin, cos и tan) требует уменьшения их аргумента по модулю 2π. Поскольку 2π не является диадическим рациональным (и даже не рациональным), оно не может быть представлено ни в одном типе с плавающей точкой, и поэтому использование любого приближения значения приведет к накоплению катастрофических ошибок для больших аргументов (например, если x 1e12, а 2*M_PI отличается от 2π на ε, то fmod(x,2*M_PI) отличается от правильного значения 2π до 1e12 * ε/π раз правильное значение x mod 2π. То есть это совершенно бессмысленно.

Правильная реализация стандартной математической библиотеки C просто имеет гигантское очень высокоточное представление π жесткого кодирования в своем источнике для решения проблемы правильного сокращения аргументов (и использует некоторые причудливые трюки, чтобы сделать это не совсем) так гигантская). Так работают большинство/все версии C функций sin/cos/tan. Однако некоторые реализации (например, glibc), как известно, используют сборки на некоторых процессорах (например, x86) и не выполняют правильное уменьшение аргументов, что приводит к совершенно бессмысленным выводам. (Кстати, неправильный asm обычно работает примерно с той же скоростью, что и правильный код C для небольших аргументов.)

Ответ 3

Просто определите:

#define M_PI acos(-1.0)

Он должен дать вам точный номер PI, с которым работают математические функции. Поэтому, если они меняют значение PI, они работают с касательным или косинусом или синусом, тогда ваша программа должна всегда соответствовать дате;)

Ответ 4

в любом случае у вас нет неограниченной точности, поэтому C определите константу таким образом:

#define PI 3.14159265358979323846

import math.h, чтобы использовать это

Ответ 5

В зависимости от библиотеки вы используете стандартные предопределенные математические константы GNU C здесь... https://www.gnu.org/software/libc/manual/html_node/Mathematical-Constants.html

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