2012-03-24 2 views
3

계산기가 (예 : 카시오 포켓과 같은) 계산기가 '500/12'와 같은 방정식을 관리하고 '125/3'을 결과로 반환하는 방법을 설명 할 수 있습니까?포켓 계산기는 분수를 어떻게 단순화하고 부정확 한 숫자를 분수로 유지합니까?

부정확 한 숫자는 고정 된 소수 자릿수 (예 : 0.333 되풀이)로 표현할 수없는 숫자를 의미합니다.

Windows 계산기에서 '1/3'을 수행하면 대답이 '0.3333333333333333'이되지만 3을 곱하면 '1'이됩니다.

+3

단순한 것은 아닙니다. 부정확 한 숫자를 분수로 유지하십시오. corsiKa

+0

Windows 계산기는 아무 것도하지 않습니다. 결과가 1에 충분히 가깝기 때문에 IEEE 부동 소수점 숫자에서 1로 반올림됩니다. –

답변

1

내 HP의 분수 표시하자 당신이 분수 표시에 대한 몇 가지 모드를 설정합니다

  • 최대 분모를 설정합니다. 표시된 소수부는 내부 부동 소수점 값에 가장 가까운 n/d이고 d은 최대 값을 초과하지 않습니다. 예를 들어 최대 값을 10으로 설정하면 pi의 부동 소수점 숫자는 분수 22/7에 가장 가깝습니다. 그러나 최대 값이 1000 인 경우 가장 가까운 분수는 355/113입니다.

  • 정확한 분모를 설정하고 결과를 줄입니다. 표시된 분수는 d이 정확한 분모와 같은 내부 부동 소수점 값에 가장 가까운 n/d입니다. n을 계산하면 분수는 최대 공통 분모로 감소합니다. 예를 들어, 분모가 32로 고정되면 부동 소수점 수 0.51은 16/32에 가장 근접하며 1/2으로 감소합니다. 마찬가지로, 부동 소수점 수 0.516은 기각되지 않는 17/32에 가장 가깝습니다.

  • 정확한 분모를 설정하고 결과를 줄이지 마십시오. 예를 들어, 0.51은 환원되지 않은 부분 인 16/32으로 표시됩니다.

최대 분모 접근법의 알고리즘은 continued fractions을 사용합니다. Python의 예제를 따르기 쉬운 것은 http://hg.python.org/cpython/file/2.7/Lib/fractions.py#l206의 limit_denominator 메소드에서 찾을 수 있습니다.

정확한 분모 접근법은 더 쉽습니다. 분모가 d이고 부동 소수점 숫자가 x 인 경우 분자는 가장 가까운 정수로 반올림 한 d * x입니다. 그런 다음 n/d을 계산하여 greatest common divisor.

을 줄여서 원래의 부동 소수점 숫자를 표시된 분수로 바꿀 수 있습니다 (선택 사항). 이것을 그리드에 스냅이라고합니다. 이렇게하면 0.333을 입력하여 인 정확히 인 분수를 만들 수 있습니다. 1/3입니다. 이렇게하면 반올림하지 않고 정확한 분수 연산을 수행 할 수 있습니다.

희망 사항이 답변을 통해 모든 것을 지울 수 있습니다 .--) 어떤 부분에 정교화 나 추가 설명이 필요한지 알려주세요.

1

GMP 라이브러리의 rational number functions을 살펴 보시기 바랍니다. 연산 순서가 특히 간단한 경우가 아니면 어떤 시점에서 계산에 유한 정밀도를 적용해야합니다.비이 성적인 것 (초월 함수/상수)은 예를 들어 연속적인 분수로만 근사 할 수 있습니다.

관련 문제