ilyachalov (ilyachalov) wrote,
ilyachalov
ilyachalov

Category:

Число Пи в программе на C++

Как определить число Пи в программе на языке C++? Стандартом языка эта константа не определена (но, возможно, появится в будущем).

Первая мысль — создать константу одного из вещественных типов. Сколько знаков после запятой нужно прописать? В стандарте языка определен класс-шаблон numeric_limits, с помощью которого можно узнать ограничения в том числе и вещественных типов языка. К примеру, значение std::numeric_limits<T>::digits10 возвращает количество десятичных цифр, которое тип может представлять без потери точности.

https://en.cppreference.com/w/cpp/types/numeric_limits/digits10

На сегодня для типа float это 6, для типа double это 15, а для типа long double это 18. Последнее верно, только если long double имеет 80-битное представление. К примеру, в случае компилятора среды «Visual Studio Community 2017» для типа long double обсуждаемое количество равно 15, как и для типа double (источник), так как в этой системе тип long double имеет 64-битное представление и по сути является аналогом типа double.

Итак, первый способ определения числа Пи:
const double PI = 3.141592653589793; // 15 знаков после точки
Строго говоря, в этой константе десятичных цифр 16 (одна до точки, 15 — после), но на практике (компилятор среды «Visual Studio Community 2017») именно в таком виде константа без потерь проходит, к примеру, цепочку преобразований «текст → double → текст». Если добавить, например, 16-ю цифру после точки, то после указанного преобразования она уже не сохранится.

Возможно, имеется какой-то практический смысл в том, чтобы указывать в обсуждаемой константе больше 15 цифр после запятой. Потому что в среде «Visual Studio Community 2017» определена константа M_PI, содержащая значение 3.14159265358979323846 (20 знаков после точки). Источник.

Итак, второй способ определения числа Пи — использование константы M_PI (требуется определение _USE_MATH_DEFINES и подключение соответствующего заголовочного файла):
#define _USE_MATH_DEFINES // для C++
#include <cmath>
Константа M_PI определена в одном из стандартных заголовочных файлов с помощью директивы компилятору #define M_PI 3.14159265358979323846.

Третий способ определения числа Пи — с помощью одной из обратных тригонометрических функций. Например, с помощью арккосинуса:
const double PI = acos(-1.0);

Ну и на сладкое. Получение числа Пи с помощью ассемблерной вставки (отсюда):
double get_PI()
{
    double pi;
    __asm
    {
        fldpi
        fstp pi
    }
    return pi;
}

double PI = get_PI();

Всё перечисленное проверено на «Windows 7 Профессиональная» (SP1), 64-разрядная. Компилятор среды «Visual Studio Community 2017».
Tags: Математика, Программирование
Subscribe

  • Вчера открыл беговой сезон

    Обычно начинаю с мая, но в этом году весна выдалась ранняя. Пробежал свою любимую десяточку неожиданно с первого раза. Обычно начинаю с 3-4…

  • Marcus Nimbler закрыл свой канал на YouTube

    Любопытный персонаж из Германии по имени Marcus Nimbler вел свой канал на «YouTube» с 25 февраля 2016 г. За это время у него накопилось 131 тыс.…

  • Сбыча мелких мечт

    В качестве эпиграфа: Но со временем я заметил, что для этого мира такое положение дел вполне естественно в любой области. Поначалу всегда есть две…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 2 comments