Π 값을 가장 빠른 방법은 무엇입니까?
39 m, 가장 빠른 길은 π 값을 찾는 i& 입수합니다 등 개인 과제입니다. # 39 m, t, 좀 더 구체적으로 I& 있는 방법을 사용하여 don& # 39 와 같은 '또는' 정의 '' # 사용하여 mediaagent 상수입니다 M_PI 하드 코딩 수).
이 프로그램은 다양한 방법으로 테스트를 그러니까말이야 아래에 있다. 인라인 어셈블리 버전이, 이론적으로 가장 빠른 옵션에만 이동형이든지 표시되어도 확실히요 없습니다. # 39, ve 기준선부터 i& 아니라 다른 버전을 비교할 수 있습니다. 내장 기능 테스트 '를 통해 제 4 * atan (1)' 의 4.2 버전이 가장 빠른 자동 배 atan (1) '이' 때문에 mgcc 붙여넣습니다 상수입니다. '와' 파노 기본 제공 지정된 'atan2 (0, - 1)' 버전이 가장 빠른.
39 의 here& 주 테스트 프로그램 ('피타임s.c').
#include <math.h>
#include <stdio.h>
#include <time.h>
#define ITERS 10000000
#define TESTWITH(x) { \
diff = 0.0; \
time1 = clock(); \
for (i = 0; i < ITERS; ++i) \
diff += (x) - M_PI; \
time2 = clock(); \
printf("%s\t=> %e, time => %f\n", #x, diff, diffclock(time2, time1)); \
}
static inline double
diffclock(clock_t time1, clock_t time0)
{
return (double) (time1 - time0) / CLOCKS_PER_SEC;
}
int
main()
{
int i;
clock_t time1, time2;
double diff;
/* Warmup. The atan2 case catches GCC's atan folding (which would
* optimise the ``4 * atan(1) - M_PI'' to a no-op), if -fno-builtin
* is not used. */
TESTWITH(4 * atan(1))
TESTWITH(4 * atan2(1, 1))
#if defined(__GNUC__) && (defined(__i386__) || defined(__amd64__))
extern double fldpi();
TESTWITH(fldpi())
#endif
/* Actual tests start here. */
TESTWITH(atan2(0, -1))
TESTWITH(acos(-1))
TESTWITH(2 * asin(1))
TESTWITH(4 * atan2(1, 1))
TESTWITH(4 * atan(1))
return 0;
}
그리고 인라인 어셈블리 stuff ('프레드피스크') 가 x86 용 및 x64 시스템을 사용할 수 있습니다.
double
fldpi()
{
double pi;
asm("fldpi" : "=t" (pi));
return pi;
}
모든 구성, 구축 및 구축하십시오 스크립트입니다 I& # 39 m 테스트 ('build.sh').
#!/bin/sh
gcc -O3 -Wall -c -m32 -o fldpi-32.o fldpi.c
gcc -O3 -Wall -c -m64 -o fldpi-64.o fldpi.c
gcc -O3 -Wall -ffast-math -m32 -o pitimes1-32 pitimes.c fldpi-32.o
gcc -O3 -Wall -m32 -o pitimes2-32 pitimes.c fldpi-32.o -lm
gcc -O3 -Wall -fno-builtin -m32 -o pitimes3-32 pitimes.c fldpi-32.o -lm
gcc -O3 -Wall -ffast-math -m64 -o pitimes1-64 pitimes.c fldpi-64.o -lm
gcc -O3 -Wall -m64 -o pitimes2-64 pitimes.c fldpi-64.o -lm
gcc -O3 -Wall -fno-builtin -m64 -o pitimes3-64 pitimes.c fldpi-64.o -lm
다양한 컴파일러 플래그를 사이에 별도로 테스트 (ve) 에 비해 너무 최적화 때문에 32 비트, 64 비트 # 39 I& 다르다), the order of the 테스트를 했지만, 역시 이제는 I& # 39 스위칭이란 있다. 하지만, 그래도 'atan2 (0, - 1)' 버전을 기반으로 때마다 계속 나옵니다.
313
23
1, [몬테카를로 방법] 이 개념을 명확히 언급한 바와 같이, 굉장한 qic 가장 빠른 것이 아니라 모든 샷이 긴 가 아닌 가 아닌 합리적 제각각이었다. 또 어떤 종류의 정밀도에는 찾고 달려 있다. 이 중 가장 빠른 π 그러니까말이야 함께 자리 하드코딩된. 보고 [Pi] [2] 와 [Pi\ [PDF]] [3], 많아 육팔면체의 절반이다.
여기에 대한 빠른 시간 안에 모든 당 14 자리 이터레이션에 하는 방식이다. [피파스트] [4] 현재 가장 빠른 애플리케이션, FFT 는 이 공식을 통해. # 39, ll 그냥 i& 기록하십시오 formula, 이후 코드 간단합니다. 이 공식을 발견한 것은 거의 라마누잔 및 의해 발견된 코트노프스키. 실제로 그가 어떻게 자리 수 있도록 # 39 - isn& 계산됩니까 수십 억 t, 메서드입니다 무시하는. 이 식은 나누고, 그 이후 우리는 계승 거역한다면 오버플로입니다 빠르고, 다음 등 유리하다는 계산을 지연입니다 지루려면 약관보다.
enter 이미지 여기에 설명을!
enter 이미지 여기에 설명을!
여기서,
enter 이미지 여기에 설명을!
다음은 [브렌트 살라민 알고리즘입니다] [10]. , 와 b 는 한 때 위키백과 언급은 닫으십시오 " enough". 그럼 (a + b) & # 178. / 4t 의 π 근사화를 될 것입니다. # 39 m, 잘 모르는 enough" 닫으십시오 i& "; 하지만 두 자리, from my 테스트를 한 이터레이션에 고말은 잡을라는데 2 루타, 3 개의 가지고 있는 것은 물론 15 잡을라는데 7 이 오류가 있을 수 있기 때문에 그에 따른 표현과 진정한 좀 더 정확한 계산을 할 수 있다.
마지막으로, 일부 pi (800 자리 숫자) 골프 어때? 160 자!
[2]: http://functions.wolfram.com/Constants/Pi/ " pi"; [3]: http://functions.wolfram.com/PDF/Pi.pdf " pi formulas"; [4]: http://numbers.computation.free.fr/Constants/PiProgram/pifast.html " PiFast";
[10]: http://mathworld.wolfram.com/Brent-SalaminFormula.html " 브렌트 살라민 Formula";
이 프로그램을 보면서 π 수치이며, i really like 때문에 자체 영역.
이오치치 (1988년): http://www0.us.ioccc.org/1988/westley.c";;;; a href = " < > westley.c< /a>.
>. 00 - _ - # define F< f oo -;; >. int main () {F_OO = 00, 00, F = OO (), printf (, 4.*-f/oo/oo 1.3f\n" ", %),} foo () >. { >. --- >. -------- >. ----------- >. ------------- >. -------------- >. -------------- >. --------------- >. --------------- >. --------------- >. --------------- >. -------------- >. -------------- >. ------------- >. ----------- >. ------- >. --- >. }
39 의 일반적인 설명을 위한 기술로 here& pi 통계하는 중 고등학교 때 제가 접했다.
단지 이 정도로 간단한 것은 누구나 기억할 수 있다고 생각하기 때문에 공유하지는 무기한 总监和首席信息官完全了解 " Monte-Carlo", 또한, 이 방법을 설명합니다. 즉, 통계적 방법으로 답을 하는 방법 ᅳ 도착한 즉시 데듀시브리 무순서 프로세스를 통해 t # 39 don& 것으로 보인다.
광장, 쓰다 그리는 사분면 (4 분의 1 은 반원) 안에 있는 광장 (사분면 radius 와 같은 면이 있기 때문에 가능한 한 많이 칠합니다 스퀘어 광장)
이제 이 광장에서 우 랜드 (즉, dart, 레코드 안의 임의의 점 어디든요 곳을 선택할 수 있다. 물론, 광장, 과연 그 안에 타고 있는 반원? 이 같은 사실은 기록하십시오.
여러 차례 이 프로세스를 반복할 수 있습니다 - 진실이며당신이 발견하리니 제거율 반원 내에서 총 숫자는 x 이 제거율 호출하십시오 대對 좋은 점.
이후 추론할 수 있는 영역 () 는 r 배 r, r r 배 circle 이 x 번 semi 영역, 즉 x 번 r 제곱). 따라서 x 4 번 부여하느뇨 pi 있습니다.
이는 결코 신속한 방법을 사용할 수 있습니다. 그러나 it& # 39 의 좋은 예는 몬테카를로 방법. 그리고 만약 당신이 둘러보거라, 그렇지 않으면 외부의 컴퓨팅 기술 등 많은 문제가 해결될 수 있다는 것을 알 수 있습니다.
C++ 템플릿 버전이 있으며, 완성도 있는 이익을 위해 최적화된 컴퓨팅 오버클로킹된 근사화를 기 pi 는 컴파일 타임에 구축하십시오 작성되었으며, 인라인 하나의 가치.
실제로 전체 there& # 39 의 책 (다른 것들 가운데) 를 위한 전용 파르게 \pi 계산 방법: # 39, & # 39, Pi 와 AGM& 의해 조너선, 피터 보르바인 ([support. dell. 아마존] [1]).
내가 아주 조금 아흐마 및 관련 알고리즘을 연구했다. # 39 의 it& 꽤 신기한 (단, 가끔 비 사소한).
단, 대부분의 현대 알고리즘을 구현할 수 있는 산술 연산 \pi 무라티프레시시온 합니다 라이브러리 (GMP 는 상당히 좋은 선택이 표시되어도 it& # 39 의 귈이예요 하도 마지막으로 사용한 것으로 it).
이 중 최고의 시간 복잡도 알고리즘 () 는 o (log (n) m (n)), 여기서 m (n) 는 두 정수의 곱으로 대한 시간 복잡도 n 비트 (m (n) = o (n log (n) 로그 (log (n))) 를 fft 기반 알고리즘을 있으며, 보통 한 자릿수 구현되어 있으며, 이러한 때 필요한 컴퓨팅용으로 \pi 알고리즘입니다 gmp).
단, 비록 수학 견하여 알고리즘을 않을 정도의, 알고리즘을 스스로가 보통 몇 줄의 의사코드의, 그리고 그들의 구현은 보통 아주 간단한 (무라티프레시시온 쓰지 않고 자신의 선택한 경우 산술 :-)).
[1]: http://www.amazon.com/PI-AGM-Analytic-Computational-Complexity/dp/047131515X/ " support. dell. Amazon";
How to do - 이 중 최고의 방법은 바로 다음 질문에 대한 답변을 가장 적은 컴퓨팅 작업량의 *. # 39, 야, 너 마음에 don& 경우에도 그것은 PI 의 값을 얻을 것을 인정하게 가장 빠른 방법.
39 의 경우, 수학 라이브러리 단번에 don& 없다.
pi 인터넷에서 조회할 수 있습니다. (예:
http://www.eveandersson.com/pi/digits/1000000 (1 만 자리. # 39 의 what& 너회의 부동 소수점 precisiontm? )
또는 수 있습니다.
http://3.141592653589793238462643383279502884197169399375105820974944592.com/
또는 수 있습니다.
http://en.wikipedia.org/wiki/Pi
39 의 it& 정말 빠르게 자리 찾기 위해 필요한 모든 것을 precisiontm 정의하여 사용하고 싶은 상수입니다 don& 그들이실천하는 소중한 CPU 시간 t # 39, 확실히 할 수 있습니다.
이 탓에 일부 있지만, 실제로는 다른 것은 오토메이티드 Pi 의 값을 계산할 경우 죽이려하겠어요 박으래도 및 실제 응용 프로그램에서. # 39 의 CPU 시간, 꽤 큰 될 그들이실천하는 wouldn&, t it? 적어도 난 don& # 39 를 알리기 위한 재 계산, t 지켜보리니 real application 이.
당담자님께 되길. op 유념하십시오 질문과대답: ", 가장 빨리 PI" 값을 얻을 수 있다.
이 베프 공식 계산할 수 있습니다 n 번째 자리 - 기준 2 (또는 16 개) - 신경 쓰지 말라고 해도 않고도 이전 n-1 자리 함께 첫:)
Pi 상수로, 난 항상 flfile. 아코스 (-1) 대신 '정의'.
그냥 여기 있을 때 이 방정식입니다 구현하므로 완전성을 위해 한다.
계산하십시오 PI 의 피에트
오히려 더 좋은 프로그램을 만들고 있는 속성이 mbsa 는 precision 개선될 수 있다.
& # 39 의 Here 일부 언어 자체에 대한 통찰력을
만약 이 문서는 은 [알고리즘입니다 벨라르] [2] 창조하 진정한, 그 중 하나가 될 것이라고 이 스피드리스트 사용할 수 있습니다. 데스크탑 PC 를 사용하여 창조하사 pi 를 2.7 조원으로으로 자리!
그는 그의 .and) 에 여기서 일하는
수고했어 벨라르 개척한 있습니다!
http://www.theregister.co.uk/2010/01/06/very_long_pi/
[2]: http://en.wikipedia.org/wiki/Bellard% 27s_formula
이는 " classic"; 방법을 매우 쉽게 구축할 수 있습니다. 이 구현, 의 파이썬 (그리 빠르진 언어) 가 있다.
Here 자세한 내용을 확인하실 수 있습니다.
어쨌든 가장 빠른 방법은 pi 의 값을 정확히까지 많게는 운영까지도 파이썬 입니다.
다음은 이 부분을 소스임을 시모프 don& # 39 는 코드가 많은 유용한 방법, pi, 내가 이 경우에 따라 주석문입니다 것 같지는 않다.
그러니까 가장 빠른 경우, 코드의 문자 의해 here& # 39 의 [골프스크리프트] (http://www.golfscript.com/golfscript/examples.html) 솔루션:
같은 machin 공식을 사용하여
실제 구성표가, 예를 들면 다음과 같습니다.
' (+ (- (+ ( 176 (atan (/ 1 57))) ( 28 (atan (/ 1 239tb)))) ( 48 (atan (/ 1 682)))) ( 96 (atan (/ 1 12943))))'
의지가 있는 경우 근사화를 사용하는 것이 좋다 ',' 355 / 113 소수점 숫자, 계시한하나님께 기술입니까 추가된 6 의 정수 표현식에서는 사용 가능. # 39 의 that& 중요하지 않은 것처럼, 요즘 " 부동 소수점 연산 co-processor". 모든 것은 매우 중요한 의미를 가질 수 있지만, 그가 한 번.
Pi 는 정확히 3! [교수는 프 링크 (심슨 가족)]
39 한 게 아니라, s, C # 의 here& (.NET-Framework 필요).
함께 복식:
이는 정확한 최대 14 개의 소수점, 충분히 칠하려면 더블 (이 때문에 요소라고 할 수 있는 자리로 탄젠트를 잘립니다 부정확한 나머지 호).
또한,, # 39 의 3.14159265358979323846 < b> 셋, it& 3< /b> 아닌 64.
계산하십시오 컴파일 타임에 PI 와 D.
(복사됨 에서 DSource.org)
이 버전 (의 델파이) 것도 특별한 일이 아니다, 그러나 그것은 적어도 보다 버전 닉 호지 게시하기를 blogspot. 블로그:). 내 컴퓨터 작업을 수행하는 데 걸리는 값을 주고 약 16 초 억원으로으로 이터레이션에 3.1415926525879 (정확한 부품이 굵은체로).
39 에 부여된 that& 아니라, 단 한마디의 근사화를 완전히 의결했다. # 39 에 의해 오프하도록 it& 조금 넘는 0.00000000004102. (4 개의 10 조분, 정보 <;;;;;; 10,000,000,000< sup> 4< /sup> /< sub> /sub>).
진짜 원한다면, 이 공식을 하나의 재미있어요.
크기가 작고 느리고, 다시 옛날 단어를 사용했습니다 또는 존재하지 않는 부동 소수점 연산을 할 수 있는 물건을 다음과 같습니다.
39 응용 프로그램용으로 don& 많이 받아야 precisiontm (비디오 게임, 예를 들어), t, 이는 매우 빠르고 정확한지 부족합니다.