ProgramingTip

C의 수학 상수 PI 값

bestdevel 2020. 11. 27. 21:07
반응형

C의 수학 상수 PI 값


PI 값을 계산하는 것은 복잡한 문제 중 하나이며 위키 피 디아 이에 대해는 수행 근사치 에 대해 이야기하고 PI를 정확하게 계산하는 것이 어렵다고 말합니다.

C는 PI를 어떻게 계산합니까? 매번 계산하고 덜 정확한 고정 값을 사용합니까?


C에서 Pi는 math.h에 정의됩니다. #define M_PI 3.14159265358979323846


C가 응용 프로그램에서 직접 볼 수있는 방식으로 "π를 계산"하는 데 가장 가까운 일은 다음 acos(-1)과 같습니다. 이는 거의 항상 계산되는 함수에 대한 다항식 / 합리적 근사치로 수행됩니다 (C 또는 FPU 마이크로 코드).

그러나 흥미로운 문제는 삼각 함수를 계산하는 (즉 sin, costan) 자신의 주장 모듈로 2π의 감소를 필요로한다. 2π는 이성적이지 않고 이성적이지 않기 때문에 어떤 부동 소수점 유형으로도 표현할 수 없으므로 값의 근사값을 사용하면 큰 인수에 대해 치명적인 오류 누적이 발생합니다 (예 : x이다 이고 2π 1e122*M_PI다른 경우 ) . ε에 의해 fmod(x,2*M_PI)2π의 정확한 값과 최대 1e12 * ε / π에 xmod 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계산 하는 방법을 정확히 줄 알지 못합니다 . 그러나, 당신이 중 하나는 미리 정의 된 또는 같은 :PIC++CC macroconst

#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

반응형