C의 수학 상수 PI 값
PI 값을 계산하는 것은 복잡한 문제 중 하나이며 위키 피 디아 이에 대해는 수행 된 근사치 에 대해 이야기하고 PI를 정확하게 계산하는 것이 어렵다고 말합니다.
C는 PI를 어떻게 계산합니까? 매번 계산하고 덜 정확한 고정 값을 사용합니까?
C에서 Pi는 math.h에 정의됩니다. #define M_PI 3.14159265358979323846
C가 응용 프로그램에서 직접 볼 수있는 방식으로 "π를 계산"하는 데 가장 가까운 일은 다음 acos(-1)
과 같습니다. 이는 거의 항상 계산되는 함수에 대한 다항식 / 합리적 근사치로 수행됩니다 (C 또는 FPU 마이크로 코드).
그러나 흥미로운 문제는 삼각 함수를 계산하는 (즉 sin
, cos
및 tan
) 자신의 주장 모듈로 2π의 감소를 필요로한다. 2π는 이성적이지 않고 이성적이지 않기 때문에 어떤 부동 소수점 유형으로도 표현할 수 없으므로 값의 근사값을 사용하면 큰 인수에 대해 치명적인 오류 누적이 발생합니다 (예 : x
이다 이고 2π 1e12
와 2*M_PI
다른 경우 ) . ε에 의해 fmod(x,2*M_PI)
2π의 정확한 값과 최대 1e12 * ε / π에 x
mod 2π 의 정확한 값을 곱한 것입니다 . 즉, 완전히 의미가 없습니다.
C의 표준 수학 라이브러리의 올바른 구현은 정확한 인수 감소 문제를 처리하기 위해 소스에 하드 코딩 된 π의 거대한 매우 고정밀 표현을 포함합니다 (그리고 매우 거대하지 않게 만들기 위해 멋진 릭을 사용합니다). ). 이것이 sin
/ cos
/ tan
함수 의 대부분 / 모든 C 버전이 작동하는 방식입니다. 그러나 특정 구현 (예 : glibc)은 일부 CPU (예 : x86)에서 어셈블리 구현을 사용하는 것이 아니라 올바른 인수 감소를 수행하지 않고 무의미한 출력이 발생합니다. (부수적으로 잘못된 것처럼 일반적으로 작은 인수에 대한 올바른 C 코드와 거의 동일한 속도로 실행됩니다.)
정의 :
#define M_PI acos(-1.0)
수학 함수가 작동하는 정확한 PI 번호를 제공해야합니다. 그들이 탄젠트, 코사인 또는 사인으로 작업하는 PI 값을 변경하면 프로그램이 항상 최신 상태가됩니다.)
어떤 것이 있는지는 다음과 같이 상수를 정의합니다.
#define PI 3.14159265358979323846
가져 오기를 사용하십시오.
표준 GNU C 미리 정의 된 수학 상수를 사용하는 라이브러리에 따라 여기에 있습니다 ... https://www.gnu.org/software/libc/manual/html_node/Mathematical-Constants.html
이미 가지고 있는데 왜 재정의해야합니까? 시스템 운영 계산기는 아마도 존재하는 것입니다. 그래서 당신은 할 수있는 것, 그런 것들에 대한 저장을 얻는 경향이 있기 때문에 많은 경고를 절약하기 위해 존재하는 것입니다. 즐겨!
내가 보다 익숙하기 때문에 직접 C
계산 하는 방법을 정확히 줄 알지 못합니다 . 그러나, 당신이 중 하나는 미리 정의 된 또는 같은 :PI
C++
C
C
macro
const
#define PI 3.14159265359.....
const float PI = 3.14159265359.....
const double PI = 3.14159265359.....
/* If your machine,os & compiler supports the long double */
const long double PI = 3.14159265359.....
또는 다음 두 가지 공식 중 하나로 계산할 수 있습니다.
#define M_PI acos(-1.0);
#define M_PI (4.0 * atan(1.0)); // tan(pi/4) = 1 or acos(-1)
이럴 나는 100 % 확실하지 않다하지만 난 생각 atan()
보다 우수한 acos()
.
참고 URL : https://stackoverflow.com/questions/9912151/math-constant-pi-value-in-c
'ProgramingTip' 카테고리의 다른 글
ORA-00904 : 잘못된 식별자 (0) | 2020.11.27 |
---|---|
명령의 배열에 할당 할당입니까? (0) | 2020.11.27 |
브라우저 감지 jQuery 1.9를위한 가장 가벼운 교체? (0) | 2020.11.27 |
TabWidget 현재 탭 하단 선 색상 (0) | 2020.11.27 |
SSL에 대한 Apache 2.4 구성이 작동하지 않음 작동 (0) | 2020.11.27 |