Как ввести пи в visual studio

Обновлено: 04.07.2024

Я хочу использовать константу PI и тригонометрические функции в некоторых программах на C++. Я получаю тригонометрические функции с include <math.h> . Однако в этом заголовочном файле, похоже, нет определения для PI.

Как я могу получить PI, не определяя его вручную?

  1. на новых платформы (по крайней мере, на моем 64-битном Ubuntu 14.04) мне не нужно определять _USE_MATH_DEFINES

  2. на (последних) платформах Linux есть long double значения тоже предоставляются как расширение GNU:

Pi можно вычислить как atan(1)*4 . Можно вычислить значение таким образом, и кэшировать его.

вы также можете использовать boost, который определяет важные математические константы с максимальной точностью для требуемого типа (т. е. float vs double).

Проверьте boost documentation для получения дополнительных примеров.

получить его от Блока FPU на чипе вместо этого:

поскольку официальная стандартная библиотека не определяет константу PI, вам придется определить ее самостоятельно. Итак, ответ на ваш вопрос "Как я могу получить PI, не определяя его вручную?"is" вы не . Или вы полагаетесь на некоторые расширения, специфичные для компилятора.". Если вы не беспокоитесь о переносимости, вы можете проверить руководство вашего компилятора для этого.

C++ позволяет писать

но инициализация этой константы не гарантируется статичностью. Этот Однако компилятор G++ обрабатывает эти математические функции как внутренние и может вычислить это постоянное выражение во время компиляции.

Я бы сделал

или

Я ненабрав π с необходимой точностью. Что это значит? Элемент точность вам нужна точность T , но мы ничего не знаем о T .

можно сказать:о чем ты говоришь? T будет float , double или long double . Итак, просто введите точность long double , то есть

но вы действительно знаете, что в будущем в стандарте не будет нового типа с плавающей запятой с еще более высокой точностью, чем long double ? А ты нет.

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

и, пожалуйста, не говорите, что оценка тригонометрической функции при инициализации производительности штраф.

Я вообще предпочитаю определять свой собственный: const double PI = 2*acos(0.0); потому что не все реализации предоставляют его для вас.

вопрос о том, вызывается ли эта функция во время выполнения или статична во время компиляции, обычно не является проблемой, потому что это происходит только один раз в любом случае.

Я только что наткнулся в этой статье by Дэнни Калев который имеет большой совет для C++14 и выше.

Я думал, что это было довольно круто (хотя я бы использовал самую высокую точность PI там я мог), особенно потому, что шаблоны могут использовать его на основе типа.

на windows (cygwin + g++), я нашел необходимым добавить флаг -D_XOPEN_SOURCE=500 для препроцессора для обработки определения M_PI in math.h .

C++14 позволяет сделать static constexpr auto pi = acos(-1);

вы можете сделать это:

если M_PI уже определен в cmath , это не будет делать ничего, кроме включения cmath . Если M_PI Не определен (что имеет место, например, в Visual Studio), он определит его. В обоих случаях, вы можете использовать M_PI чтобы получить значение pi.

это значение pi происходит от qmath Qt Creator.з.

значения, такие как M_PI, M_PI_2, M_PI_4 и т. д., не являются стандартными C++, поэтому constexpr кажется лучшим решением. Можно сформулировать различные выражения const, которые вычисляют один и тот же pi, и меня интересует, обеспечивают ли они (все) мне полную точность. В стандарте C++ явно не упоминается, как вычислить pi. Поэтому я склонен возвращаться к определению pi вручную. Я хотел бы поделиться решением ниже, которое поддерживает все виды фракций pi в полной точности.

Я хочу использовать константу PI и тригонометрические функции в некоторой программе на C++. Я получаю тригонометрические функции с include <math.h> . Однако в этом заголовочном файле, похоже, нет определения для PI.

Как я могу получить PI без определения его вручную?

на некоторых (особенно старых) платформах (см. комментарии ниже) вам может потребоваться

а затем включите необходимый файл заголовка:

и значение pi можно получить через:

в своем math.h (2014) определяется как:

но проверить math.h дополнительные. Выдержка из "старого" math.h (в 2009 году):

на новых платформы (по крайней мере, на моем 64-битном Ubuntu 14.04) мне не нужно определять _USE_MATH_DEFINES

на (последних) платформах Linux есть long double значения также предоставляются как расширение GNU:

Pi можно вычислить как atan(1)*4 . Можно вычислить значение таким образом, и кэшировать его.

вы также можете использовать boost, который определяет важные математические константы с максимальной точностью для запрашиваемого типа (т. е. float vs double).

Проверьте увеличить документации для получения дополнительных примеров.

получите его от Блока FPU на обломоке вместо:

вместо того, чтобы писать

Я бы рекомендовал использовать -D_USE_MATH_DEFINES или /D_USE_MATH_DEFINES в зависимости от вашего компилятора.

поскольку официальная стандартная библиотека не определяет константу PI, вам придется определить ее самостоятельно. Итак, ответ на ваш вопрос "Как я могу получить PI без определения его вручную?"is" вы не . Или вы полагаетесь на некоторые расширения, специфичные для компилятора.". Если вы не беспокоитесь о переносимости, вы можете проверить руководство компилятора для этого.

C++ позволяет писать

но инициализация этой константы не гарантируется как статическая. Этот Однако компилятор G++ обрабатывает эти математические функции как встроенные и может вычислять это постоянное выражение во время компиляции.

стандартный C++ не имеет константы для PI.

Я не набрав π с необходимой точностью. Что это значит? The точность вам нужна точность T , но мы ничего не знаем о T .

можно сказать:о чем ты говоришь? T будет float , double или long double . Итак, просто введите точность long double , т. е.

но вы действительно знаете, что в будущем в стандарте не будет нового типа с плавающей запятой с еще более высокой точностью, чем long double ? Нет.

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

и, пожалуйста, не говорите, что оценка тригонометрической функции при инициализации производительности штраф.

Я обычно предпочитаю определять свой собственный: const double PI = 2*acos(0.0); потому что не все реализации предоставляют его для вас.

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

Я использую следующее в одном из моих общих заголовков в проекте, который охватывает все базы:

Я только что наткнулся в этой статье by Дэнни Калев который имеет отличный совет для C++14 и выше.

Я думал, что это довольно круто (хотя я бы использовал самую высокую точность PI там я мог), особенно потому, что шаблоны могут использовать его на основе типа.

В windows (cygwin + g++) я нашел необходимым добавить флаг -D_XOPEN_SOURCE=500 для препроцессора для обработки определения M_PI на math.h .

Я хочу использовать константу PI и тригонометрические функции в некоторой программе на С++. Я получаю тригонометрические функции с include <math.h> . Однако в этом заголовочном файле не существует определения для PI.

Как я могу получить PI, не определяя его вручную?

ОТВЕТЫ

Ответ 1

На некоторых (особенно старых) платформах (см. комментарии ниже) вам может понадобиться

а затем включить необходимый файл заголовка:

а значение pi можно получить через:

В моем math.h (2014) он определяется как:

но еще раз проверьте math.h . Выдержка из "старого" math.h (в 2009 году):

на новых платформах (по крайней мере, на моем 64-битном Ubuntu 14.04) мне не нужно определять _USE_MATH_DEFINES

В (недавних) платформах Linux есть значения long double , также предоставляемые как расширение GNU:

Ответ 2

Pi можно рассчитать как atan(1)*4 . Вы можете вычислить значение таким образом и кешировать его.

Ответ 3

Вы также можете использовать boost, который определяет важные математические константы с максимальной точностью для запрашиваемого типа (т.е. float vs double).

Ответ 4

Получите его от блока FPU на чипе вместо этого:

Ответ 5

Ответ 6

Я бы рекомендовал использовать -D_USE_MATH_DEFINES или /D_USE_MATH_DEFINES в зависимости от вашего компилятора.

Ответ 7

Поскольку официальная стандартная библиотека не определяет константу PI, вам придется ее самостоятельно определить. Итак, ответ на ваш вопрос "Как я могу получить PI, не определяя его вручную?" msgstr "Нет - или вы полагаетесь на некоторые расширения для компилятора.". Если вы не заботитесь о переносимости, вы можете проверить это руководство для компилятора.

С++ позволяет писать

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

Ответ 8

Ответ 9

Стандарт С++ не имеет константы для PI.

Ответ 10

Я бы не печатал в π точной точности. Что это значит? Точность, в которой вы нуждаетесь, - это точность T , но мы ничего не знаем о T .

Вы могли бы сказать: о чем вы говорите? T будет float , double или long double . Итак, просто введите точность long double , т.е.

Но знаете ли вы, что в будущем в стандарте не будет нового типа с плавающей точкой с еще большей точностью, чем long double ? Вы этого не делаете.

И вот почему первое решение красиво. Вы можете быть уверены, что стандарт перегрузит тригонометрические функции для нового типа.

И, пожалуйста, не говорите, что оценка тригонометрической функции при инициализации является штрафом за производительность.

Ответ 11

Обычно я предпочитаю определять свой собственный: const double PI = 2*acos(0.0); , потому что не все его реализации предоставляют его вам.

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

Ответ 12

Я использую следующее в одном из моих общих заголовков в проекте, который охватывает все базы:

Ответ 13

Я только что натолкнулся на эту статью Дэнни Калева, в которой есть отличный совет для С++ 14 и выше.

Я подумал, что это довольно круто (хотя я бы использовал там PI с наивысшей точностью), особенно потому, что шаблоны могут использовать его в зависимости от типа.

Ответ 14

Такие значения, как M_PI, M_PI_2, M_PI_4 и т.д., Не являются стандартными C++, поэтому constexpr кажется лучшим решением. Могут быть сформулированы различные выражения const, которые вычисляют один и тот же пи, и меня интересует, обеспечивают ли они (все) полную точность. Стандарт C++ прямо не упоминает, как рассчитать число пи. Поэтому я склоняюсь к определению числа "пи" вручную. Я хотел бы поделиться решением ниже, которое поддерживает все виды дробей с полной точностью.

Ответ 15

C++ 20 std::numbers::pi

Я ожидаю, что использование будет как:

Я попробую, когда поддержка придет в GCC, GCC 9.1.0 с g++-9 -std=c++2a все еще не поддерживает его.

В принятом предложении описывается:

5.0. "Заголовки" [заголовки] В таблице [tab: cpp.library.headers] необходимо добавить новый заголовок <math> .

[. ]

Ответ 16

В окнах (cygwin + g++) я нашел необходимым добавить флаг -D_XOPEN_SOURCE=500 для препроцессора для обработки определения M_PI в math.h .

Ответ 17

С++ 14 позволяет выполнять static constexpr auto pi = acos(-1);

Ответ 18

Вы можете сделать это:

Если M_PI уже определено в cmath , это не будет делать ничего, кроме include cmath . Если M_PI не определено (что, например, в Visual Studio), оно будет определять его. В обоих случаях вы можете использовать M_PI для получения значения pi.

Это значение pi происходит от Qt Creator qmath.h.

Ответ 19

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

Я хочу использовать константу PI и тригонометрические функции в какой-нибудь программе на C ++. Я получаю тригонометрические функции с помощью include <math.h> . Однако, похоже, в этом заголовочном файле нет определения PI.

Как я могу получить PI, не определяя его вручную?

22 ответа

На некоторых (особенно старых) платформах (см. Комментарии ниже) вам может потребоваться

А затем включите необходимый файл заголовка:

А значение пи можно получить через:

В моем math.h (2014 г.) он определяется как:

Но проверьте свой math.h , чтобы узнать больше. Выдержка из "старого" math.h (2009 г.):

на новых платформах (по крайней мере, на моем 64-битном Ubuntu 14.04) мне не нужно определять _USE_MATH_DEFINES

На (недавних) платформах Linux также есть значения long double , предоставляемые как расширение GNU:

Пи можно рассчитать как atan(1)*4 . Вы можете рассчитать значение таким образом и кэшировать его.

Вместо этого получите его от блока FPU на кристалле:

C ++ 20 std::numbers::pi

Где точный результат был рассчитан с помощью:

Скомпилируйте и запустите:

Протестировано на Ubuntu 20.04 amd64, GCC 10.2.0

В принятом предложении описывается:

5.0. «Заголовки» [заголовки] В таблице [tab: cpp.library.headers] необходимо добавить новый заголовок <math> .

[. ]

Вместо того, чтобы писать

Я бы рекомендовал использовать -D_USE_MATH_DEFINES или /D_USE_MATH_DEFINES в зависимости от вашего компилятора.

Поскольку официальная стандартная библиотека не определяет константу PI, вам придется определить ее самостоятельно. Итак, ответ на ваш вопрос «Как я могу получить PI, не определяя его вручную?» это «Вы не делаете - или вы полагаетесь на некоторые специфичные для компилятора расширения.». Если вас не беспокоит переносимость, вы можете проверить это в руководстве к вашему компилятору.

C ++ позволяет писать

Но не гарантируется, что инициализация этой константы будет статической. Однако компилятор G ++ обрабатывает эти математические функции как внутренние и может вычислять это постоянное выражение во время компиляции.

Стандартный C ++ не имеет константы для PI.

Я бы не набирал π с необходимой вам точностью . Что это вообще должно значить? Необходимая точность - это точность T , но мы ничего не знаем о T .

Вы можете сказать: О чем ты говоришь? T будет float , double или long double . Итак, просто введите точность long double , т. Е.

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

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

И, пожалуйста, не говорите, что вычисление тригонометрической функции при инициализации снижает производительность.

Я использую следующее в одном из моих общих заголовков в проекте, который охватывает все основы:

Обычно я предпочитаю определять свой собственный: const double PI = 2*acos(0.0); , потому что не все реализации предоставляют его вам.

Вопрос о том, вызывается ли эта функция во время выполнения или статически выключается во время компиляции, обычно не является проблемой, потому что в любом случае это происходит только один раз.

Я только что наткнулся на эту статью автора Danny Kalev, у которого есть отличный совет для C ++ 14 и новее.

Я подумал, что это было довольно круто (хотя я бы использовал там PI с максимальной точностью), особенно потому, что шаблоны могут использовать его в зависимости от типа.

Несколько изящных решений. Я сомневаюсь, что точность тригонометрических функций равна точности типов. Для тех, кто предпочитает писать постоянное значение, это работает для g ++: -

Такие значения, как M_PI, M_PI_2, M_PI_4 и т. Д., Не являются стандартными для C ++, поэтому constexpr кажется лучшим решением. Можно сформулировать разные константные выражения, которые вычисляют одно и то же число Пи, и меня беспокоит, обеспечивают ли они (все) полную точность. В стандарте C ++ явно не упоминается, как вычислить число Пи. Поэтому я предпочитаю определять пи вручную. Я хотел бы поделиться приведенным ниже решением, которое с полной точностью поддерживает все виды дробей числа Пи.

В Windows (cygwin + g ++) я счел необходимым добавить флаг -D_XOPEN_SOURCE=500 для препроцессора для обработки определения M_PI в math.h .

Читайте также: