pi의 숫자를 순차적으로 제공하는 프로그램을 구현하기 위해 다양한 방법을 시도했습니다. Taylor 시리즈 방법을 사용해 보았지만 시간이 지나면 결과를 온라인 값과 비교할 때 매우 느리게 수렴되는 것으로 나타났습니다. 어쨌든, 나는 더 나은 알고리즘을 시도하고 있습니다.
따라서 프로그램을 작성하는 동안 모든 알고리즘과 마찬가지로 문제가 발생했습니다. n
계산 된 숫자가 정확한지 어떻게 알 수 있습니까?
pi의 숫자를 순차적으로 제공하는 프로그램을 구현하기 위해 다양한 방법을 시도했습니다. Taylor 시리즈 방법을 사용해 보았지만 시간이 지나면 결과를 온라인 값과 비교할 때 매우 느리게 수렴되는 것으로 나타났습니다. 어쨌든, 나는 더 나은 알고리즘을 시도하고 있습니다.
따라서 프로그램을 작성하는 동안 모든 알고리즘과 마찬가지로 문제가 발생했습니다. n
계산 된 숫자가 정확한지 어떻게 알 수 있습니까?
답변:
나는 파이의 가장 자리 수에 대한 현재 세계 기록 보유자이므로, 나는 2 센트를 추가 할 것입니다 :
실제로 새로운 세계 기록을 설정하지 않는 한 일반적인 관행은 계산 된 자릿수를 알려진 값과 비교하는 것입니다. 충분히 간단합니다.
실제로, 나는 계산에 대한 계산을 목적으로 자릿수를 나열하는 웹 페이지를 가지고 있습니다 : http://www.numberworld.org/digits/Pi/
그러나 세계 신기록을 세우면 비교할 것이 없습니다.
역사적으로 계산 된 숫자가 올바른지 확인하는 표준 방법은 두 번째 알고리즘을 사용하여 숫자를 다시 계산하는 것입니다. 따라서 계산이 잘못되면 끝에있는 숫자가 일치하지 않습니다.
일반적으로 두 번째 알고리즘이 느리기 때문에 필요한 시간이 두 배 이상 증가합니다. 그러나 계산되지 않은 영토와 새로운 세계 기록의 미지의 영역으로 방황 한 후 계산 된 숫자를 확인하는 유일한 방법입니다.
슈퍼 컴퓨터가 레코드를 설정하던 시절에 두 가지 다른 AGM 알고리즘 이 일반적으로 사용되었습니다.
이들은 O(N log(N)^2)
구현하기 매우 쉬운 알고리즘입니다.
그러나 요즘에는 상황이 약간 다릅니다. 마지막 세 개의 세계 기록에서 두 번의 계산을 수행하는 대신 가장 빠른 알려진 공식 ( Chudnovsky Formula )을 사용하여 하나의 계산 만 수행했습니다 .
이 알고리즘은 구현하기가 훨씬 어렵지만 AGM 알고리즘보다 훨씬 빠릅니다.
그런 다음 숫자 추출을 위해 BBP 수식을 사용하여 이진수를 확인합니다 .
이 수식을 사용하면 모든 숫자 를 계산 하지 않고도 임의의 이진수를 계산할 수 있습니다 . 따라서 마지막으로 계산 된 이진 숫자를 확인하는 데 사용됩니다. 따라서 전체 계산보다 훨씬 빠릅니다.
이것의 장점은 다음과 같습니다.
단점은 다음과 같습니다.
마지막 몇 자리를 확인하는 것이 모든 자리가 올바른 것을 암시하는 이유에 대한 세부 사항을 살펴 보았습니다. 그러나 계산 오류가 마지막 숫자로 전파되기 때문에 이것을 쉽게 알 수 있습니다.
이제이 마지막 단계 (변환 확인)는 실제로 상당히 중요합니다. 이전의 세계 기록 보유자 중 한 명이 실제로 우리에게 전화를 걸었습니다 .
그래서 내 블로그 에서이 스 니펫을 가져 왔습니다.
N = # of decimal digits desired
p = 64-bit prime number
밑이 10 인 산술을 사용하는 A와 이진 산술을 사용하는 B를 계산합니다.
인 경우 A = B
"매우 높은 확률"이면 변환이 올바른 것입니다.
자세한 내용은 내 블로그 게시물 Pi-5 Trillion Digits를 참조하십시오 .
ArcTan(1)
는 대수적으로 수렴됩니다. 따라서 수렴하기 위해서는 기하 급수적으로 많은 수의 용어가 필요합니다. 간단히 말해서 사용하지 마십시오.
Log(151931373056000)/Log(10) = 14.181647462725477655...
)
의심 할 여지없이, 당신의 목적을 위해 (나는 단지 프로그래밍 연습이라고 가정한다), 가장 좋은 방법은 웹상의 pi 숫자 목록과 비교하여 결과를 확인하는 것이다.
그리고 우리는 그 가치가 올바른지 어떻게 알 수 있습니까? 글쎄, 나는 알고리즘의 구현이 올바른지 증명하는 컴퓨터 과학 방법이 있다고 말할 수있다.
좀 더 실용적으로, 다른 사람들이 다른 알고리즘을 사용하고 모두 소수점 이하 수천 자리에 동의하면 (정확한), 그것은 당신에게 그들이 맞다는 따뜻한 퍼지 느낌을 줄 것입니다.
역사적으로 William Shanks는 1873 년에 소수점 이하 707 자리까지 pi를 출판했습니다. 가난한 사람, 그는 소수점 이하 528 번째 자리에서 실수를했습니다.
매우 흥미롭게도 1995 년 에 이전의 모든 자릿수를 계산할 필요없이 pi의 n 번째 자릿수 (기본 16)를 직접 계산하는 특성을 가진 알고리즘이 발표되었습니다 !
마지막으로, 초기 알고리즘이 pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...
프로그래밍이 가장 간단하지는 않았지만 가장 느린 방법 중 하나입니다. 빠른 접근 방법 은 Wikipedia의 pi 기사를 확인하십시오 .
여러 접근 방식을 사용하여 동일한 답변으로 수렴되는지 확인할 수 있습니다. 또는 'net에서 일부를 가져옵니다. Chudnovsky 알고리즘은 일반적으로 pi를 계산하는 매우 빠른 방법으로 사용됩니다. http://www.craig-wood.com/nick/articles/pi-chudnovsky/
Taylor 시리즈는 파이를 근사화하는 한 가지 방법입니다. 언급했듯이 천천히 수렴합니다.
Taylor 계열의 부분 합은 pi의 실제 값에서 멀리 떨어진 다음 항의 승수 내에있는 것으로 표시 될 수 있습니다.
pi를 근사화하는 다른 방법에는 최대 오차를 계산하는 비슷한 방법이 있습니다.
수학적으로 증명할 수 있기 때문에 이것을 알고 있습니다.
죄와 죄를 위해 (공정하게) 신속하게 수렴하는 전력 계열을 사용하여 컴퓨팅 sin(pi/2)
(또는 cos(pi/2)
그 문제)을 시도 할 수 있습니다. (더 나은 : 더 x=0
빠른 수렴 을 위해 더 가까이 계산하기 위해 다양한 배가 수식을 사용하십시오 .)
BTW tan(x)
는 시리즈를 사용하는 것보다 낫습니다 cos(x)
. 블랙 박스 라고 말하는 컴퓨팅 (예 : 위와 같이 테일러 시리즈를 사용할 수 있음)은 Newton을 통해 근본을 찾는 것입니다. 분명히 더 나은 알고리즘이 있지만 톤 수를 확인하지 않으려면 충분합니다 (구현하기가 까다 롭지 않으며 작동 이유를 이해하기 위해서는 약간의 미적분 만 필요합니다.)
sin(pi/2)
하지 않은 값이 필요 합니까?
sin(x)
하고 cos(x)
높은 정밀도를 얻는 것이 훨씬 어렵다는 것은 모든 사람에게 분명하지 않은 것 같습니다.