記得古早、古早以前寫 C 的時候,依稀記得圓周率 PI 在 math.h 標頭檔裡面有定義一個 macro ,可以直接使用。但最近在 C++ 裡嚐試要用時,卻告訴我「未宣告的識別項」錯誤。
調出 math.h 來看,找到答案了!裡面有一段註解:
/* Define _USE_MATH_DEFINES before including math.h to expose these macro
* definitions for common math constants. These are placed under an #ifdef
* since these commonly-defined names are not part of the C/C++ standards.
*/
原來這些常數巨集不屬於 C/C++ 的標準,若要使用的話,要在引用 math.h 標頭檔時,先 #define _USE_MATH_DEFINES 才行,也就是要像下面這樣寫:
#include <cmath>
另,引用 math.h 裡的內容,這些可用的常數巨集及其值如下 ( 記得前面加上 M_ ):
/* Definitions of useful mathematical constants
* M_E - e
* M_LOG2E - log2(e)
* M_LOG10E - log10(e)
* M_LN2 - ln(2)
* M_LN10 - ln(10)
* M_PI - pi
* M_PI_2 - pi/2
* M_PI_4 - pi/4
* M_1_PI - 1/pi
* M_2_PI - 2/pi
* M_2_SQRTPI - 2/sqrt(pi)
* M_SQRT2 - sqrt(2)
* M_SQRT1_2 - 1/sqrt(2)
*/
#define M_E 2.71828182845904523536
#define M_LOG2E 1.44269504088896340736
#define M_LOG10E 0.434294481903251827651
#define M_LN2 0.693147180559945309417
#define M_LN10 2.30258509299404568402
#define M_PI 3.14159265358979323846
#define M_PI_2 1.57079632679489661923
#define M_PI_4 0.785398163397448309616
#define M_1_PI 0.318309886183790671538
#define M_2_PI 0.636619772367581343076
#define M_2_SQRTPI 1.12837916709551257390
#define M_SQRT2 1.41421356237309504880
#define M_SQRT1_2 0.707106781186547524401
沒有留言:
張貼留言