2014-02-15 2 views
2

반복 싸인을 수행 할 때 파이썬이 어떻게 내 계산기처럼 동작하는지 모르겠습니다.파이썬으로 계산기 결과 복제하기

내 파이썬 코드 :

number = float(.565) 
pi = float(math.pi) 

for j in range(25): 
    number = round(math.sin(number*pi), 16) 

이 0.446445551265를 반환합니다.

계산기로 동일한 작업을 수행하면 0.4464454868이됩니다.

round()에 사용하는 정밀도에 관계없이 계산기와 같은 결과를 얻을 수 없습니다.

또한 Decimal 라이브러리를 사용해 보았지만 더 나은 결과를 얻지 못했습니다. 어떤 아이디어? 80 진수 정밀도 실행

+4

계산기의 결과가 정확하다는 것을 어떻게 알 수 있습니까? –

+0

계산기가 제공하는 것과 실행중인 프로그램의 차이가'10e-8'보다 작습니다. 차이점은 누가 신경 쓰겠습니까? 부동 소수점의 중요한 점 중 하나는 정밀도가 제한된 실수의 표현으로 작업하고 있다는 것입니다. 계산기와 컴퓨터 사이의 내부 표현의 작은 차이점은 누적 효과로 인해 나타나는 작은 차이에 책임이 있습니다. –

+3

또한, pi는 항상 어떤 점에서 반올림되어야하므로 불일치의 원인은 'math.pi'와 계산기의'π '버튼의 정밀도가 동일하지 않은 것일 수 있습니다. –

답변

2

는 결과

0.4464455542636494555603375755720232254414694834911

알고리즘의 오차 분석은 각 단계에서, 이전의 에러에 대한 PI 곱한 것으로 나타낸다 (상기의 코사인 시작 현재 점), 즉 약 3이며 현재 부동 소수점 오류가 잡음으로 추가됩니다. 오차 범위는 기계 엡실론의 3^25 배입니다.

오류 취소 및 실제 미분 값을 허용하는 경우 오류 확대 계수는 약 2^25, 즉 이중 숫자 가수의 53 비트 중 마지막으로 얻을 수있는 25 비트 문제의 진술에 반영된 것처럼 신뢰성있는 10 진수 약 7-8에 해당하는 다소 신뢰성있는 첫 번째 28 개만 남아 있습니다.

포켓 계산기는 일반적으로 표시된 정밀도보다 훨씬 큰 내부 정밀도를 가지므로 여기서 더 정확한 결과를 찾는 것은 예상치 못한 일이 아닙니다.