IT이야기

산술 상수 PI 값(C)

cyworld 2022. 6. 29. 21:05
반응형

산술 상수 PI 값(C)

PI 값의 계산은 복잡한 문제 중 하나이며 위키피디아에서는 PI의 근사치를 설명하고 있으며 PI의 정확한 계산은 어렵다고 합니다.

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

In C Pi는 산술에 정의되어 있습니다.h:#define M_PI 3.14159265358979323846

C가 어플리케이션에서 직접 확인할 수 있는 방법으로 "컴퓨팅 ""에 가장 가까운 것은acos(-1)또는 이와 유사합니다.이는 거의 항상 계산 중인 함수에 대한 다항식/합리 근사치(C 또는 FPU 마이크로코드)를 사용하여 수행됩니다.

그러나 흥미로운 문제는 삼각함수를 계산한다는 것입니다.sin,cos,그리고.tan)의 경우 인수 modulo 2sq의 축소가 필요합니다.2'는 2차 유리(및 심지어 유리하지도 않음)가 아니기 때문에 부동소수점 유형으로 나타낼 수 없습니다.따라서 값의 근사치를 사용하면 큰 인수에 치명적인 오류가 누적됩니다(예를 들어 다음과 같은 경우).x1e12,그리고.2*M_PI2와 ,의 차이가 있다.fmod(x,2*M_PI)2µ의 정확한 값과 최대 1e12*µ/160배 차이가 납니다.xmod 2pc.즉, 전혀 의미가 없습니다.

C의 표준 수학 라이브러리의 올바른 구현은 올바른 인수 감소에 대처하기 위해 소스에 하드 코드화된 거대하고 매우 정밀도 높은 표현을 가지고 있을 뿐입니다(또한 몇 가지 화려한 속임수를 사용하여 그렇게 간단하지 않습니다).의 대부분의/모든 C버전의sin/cos/tan기능은 기능합니다.그러나 (glibc와 같은) 특정 구현에서는 일부 CPU(x86 등)에서 어셈블리 구현을 사용하고 올바른 인수 축소를 수행하지 않아 완전히 무의미한 출력이 발생합니다.(공교롭게도 잘못된 asm은 보통 작은 인수의 올바른 C 코드와 거의 같은 속도로 실행됩니다).

정의:

#define M_PI acos(-1.0)

수학 함수가 작동하는 정확한 PI 번호를 알려줄 것입니다.따라서 작업 중인 PI 값이 접선, 코사인 또는 사인에서 변경되는 경우 프로그램은 항상 최신이어야 합니다.)

이번 영상에서 여러분의 눈에 심각한 오류가 있다는 것을 알게 됩니다.

#define PI 3.14159265358979323846

이를 사용하려면 math.h를 Import합니다.

PI를 계산하는 함수는 가능한 여러 개의 무한합 계산 중 하나를 수행함으로써 만들 수 있습니다(아탄()과 같은 함수는 pi를 어떤 형태로든 사용할 수 있으므로 권장하지 않습니다).pi를 수동으로 계산하는 것은 추천하지 않는다고 합니다.math.h가 M_PI를 제공하는 것보다 더 정확한 pi를 필요로 하는 사람은 없습니다.실제로 math.h의 처음 몇 자리 숫자만 사용하면 코드를 약간 빠르게 만들 수 있기 때문에 그 대신 사용하는 것이 가장 좋습니다.만약 당신이 우주의 크기를 센티미터까지 계산하고 싶지 않다면 왜 신경써야 합니까?

그래도 계산하려면 다음 방법을 참조하십시오.

(3블루 1브라운의 방법 파이용 월리스 제품, 기하학적으로 증명됨)

double caculate_pi(int accuracy){
     double result = 1;
     int a = 2;
     int b = 1;

     for(i = 0;i < accuracy; i ++){
          result = a/b * result;
          if(a < b){
               a = a + 2;
          }
          else if(b < a){
               b = b + 2;
          }
     }

     return result * 2;
}

사용하는 라이브러리에 따라 표준 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)

IMHO 100% 확신할 수는 없지만 제 생각에는atan()보다 싸다acos().

언급URL : https://stackoverflow.com/questions/9912151/math-constant-pi-value-in-c

반응형