Ещё раз про число пи в 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 просмотра]