2016-07-04 5 views
0

재미있게, 임의의 정밀도 부동 소수점 라이브러리를 사용하여 Java에서 pi를 계산하려면 Chudnovsky 알고리즘을 구현하려고합니다. 한 가지 분명한 것은 수식이 1/pi = 합계 (...)로 표시되기 때문에 숫자 1/n의 역수를 계산해야한다는 것입니다.부동 소수점 연산에서 역수의 정밀도

얼마나 많은 유효 자릿수/정밀도 1/n이 원하는 정밀도를 갖기 위해서는 부동 소수점 수 n이 필요합니까? 이것에 대한 쉬운 대답이 있습니까? 나는 1/0.100009999999 = 9.99900010009와 같은 계산을 시도하여 소수점 이하 5 자리의 정확한 자리수를 갖는 0.1의 역수를 결정했다. 나는 내가 소수점 다음에 첫 3 자리를 취하고 결과 값을 반올림하면 올바른 값 10을 얻지 만, 1/n 연산 후에 얼마나 많은 자리수가 올바른지에 대한 일반적인 규칙이 있습니까? 나는 또한 같은 결과에 관심이 있지만 2 진수와 16 진수로되어있다.

시도해 보았고 Stackoverflow에서 빠른 검색을 시도했지만이 것에 대한 이전 답변을 찾지 못했습니다. 중복이있는 경우 사과드립니다.

+1

pi의 경우 1에서 10 사이이므로 한 자리 숫자 범위 내에 있어야합니다. 따라서 1000 자리의 정밀도를 얻으려면 상호 역수에 1001 자리까지의 정밀도가 필요합니다. 정확히 알고 싶습니까? 어쨌든 정밀도가 끝나면 예상 값을 얻고 있습니다. 따라서 여기 또는 그 중 하나의 숫자는 거의 중요하지 않습니까? 모든 언어에서 내장 된 double/float 값을 사용하여 테스트하지 않으 셨길 바랍니다. –

+0

입력 해 주셔서 감사합니다. pi가 아닌 n이라는 숫자에 대한 일반적인 대답은 무엇입니까 (pi는 1과 10 사이의 기수 2가 아닙니다)? 아니요, double/float로 작성된 것은 사용하지 않습니다. Java 내장 BigDecimal 또는 apfloat를 사용합니다. – user1661303

답변

1

1/x를 계산하고 싶지만 d = delta x를 절단 오류로 계산하면 1/(x + d)입니다. 이항 정리에 의해,

1/(x+d) = (x-d)/(x²-d²) 

우리가 d²을 가정 할 수 있기 때문에 훨씬 부동 소수점 오류 아래, 상호의 오류가 -d/x²하고 관련성 상대 오차는 -d/X입니다.

Artur Biesiadowski의 의견을 확인한 결과, 1/x가 1과 10 사이에있는 경우 오류 배율은 최악의 경우 10 배가됩니다.

관련 문제