БлогNot. Ещё раз про число пи в C++

Ещё раз про число пи в C++

Если возникла вечная "проблема с числом пи в C++", а делать вот так

#define M_PI 3.14159265358979323846

в проекте не хочется, то есть и другое решение.

В стандарте константы M_PI нет, это расширение gcc.

В Visual Studio, тем не менее, константа тоже имеется, но только при подключении math.h, а не cmath и указании директивы

#define _USE_MATH_DEFINES

перед этим.

Функции, которых нет в стандартной математической библиотеке, например, котангенс, тоже всегда можно написать или сделать макроопределением, как в показанном ниже примере (табулирование функции котангенса в заданных пределах, зависящих от значения пи).

Проверено в консоли Visual Studio 2019.

#include <iostream>
#include <iomanip> 
#define _USE_MATH_DEFINES
#include <math.h>
#define cotan(x) (pow(1./tan(x),2))
using namespace std;

int main() {
 double a = M_PI/4, b = M_PI/2;
 const int m = 15;
 double dx = (b - a) / m;

 cout.precision(6);
  
 for (double x = a; x <= b; x += dx) {
  cout << setw(12) << x << setw(12) << cotan(x) << endl;
 }
 
 cin.get(); return 0;
}

Как вариант, если мы хотим именно C++-библиотеку cmath, а не сишную math.h, в Studio строку 4 листинга мы могли бы заменить на

#include <ATLComTime.h>
#include <cmath>

Можно сделать и вот так, с помощью директивы условной компиляции:

#include <cmath>
 
#ifdef M_PI
double const pi = M_PI;
#else
double const pi = 4*std::atan(1);
#endif

В последних сборках по рецепту 1 можно вместе с директивой #define инклудить и cmath, а не только math.h

21.11.2019, 13:16 [21884 просмотра]


теги: c++ studio математика

К этой статье пока нет комментариев, Ваш будет первым