2010-01-24 3 views
3

예를 들어 0. (0011) 또는 0.0 (101)과 같이 반복되는 이진수가 있으면 십진수로 변환하는 방법은 무엇입니까? 지금까지 발굴 할 수 있었다했는지반복되는 이진수를 십진수로 변환 (일련으로 표현)

아래와 같이, 십진수로 착신 이진수로 변환하는 간단한 방법이다 : 입술 단계 N 후의 결과이며, N은

res(N+2) = res(N+1)/2 + res(N) 

현재 반복 (N = 0; n -> (2 진수)). 종결되지 진수를 반복적으로 그 적용하면 약 0.4 예를

dec:0.4 || bin: 0.(0110): 

0 /2 + 0 = 0 
0 /2 + 0 = 0 
0 /2 + 1 = 1 
1/2 /2 + 1 = 3/2 
3/2 /2 + 0 = 3/4 
3/4 /2 + 0 = 3/8 
3/8 /2 + 1 = 19/16 
19/16/2 + 1 = 51/32 
51/32/2 + 0 = 51/64 
51/64/2 + 0 = 51/128 = 0.3984 

에 대한 좋은 근사치를 제공합니다.

그래서 근사값을 계산할 수있는 방법이 있지만 이것을 표현하는 방법을 찾는 데 어려움을 겪고 있습니다. 저는 지금까지 너무 많은 성공을 거두지 않고 한계에서 n> inf로 계산할 수있는 시리즈로 작성하려고했습니다.

답변

1

정확한 답을 얻는 한 가지 방법은 무한 기하 급수를 사용하는 것입니다. 무한대의 지수 1, 0 < = r < 1에 대한 분수 r의 무한 합은 r/(1-r)입니다.

예에서 0. (0011), 0.0011은 분수 3/16을 나타냅니다. 3을 배분하면 r = 1/16이됩니다. r/(1-r) = (1/16)/(15/16) = 1/15로된다. 3을 곱하여 곱하면 3/15 = 1/5 = 0.2가됩니다.

1

컴퓨터조차 제대로되지 않습니다. 일반적으로이 값은 단순히 반올림됩니다. float 값을 너무 많이 표시하기 시작하면 0.4 대신 0.3984와 같은 별난 값이 생깁니다.

모든 기준의 소수점을 다른 기준으로 변환하면 종종 정밀도가 떨어집니다. 그 마법을 회복 할 수는 없습니다. 돈과 같은 중요한 물건을 계산하는 프로그램에서 실수로 두 번이나 수레를 사용하지 않아야하는 주된 이유입니다.

ben을 충분히 정밀하게 생각하고 반올림하기 전까지는 계속하십시오.

+0

정확한 값을 계산할 수있는 방법이 있는지 궁금 하긴하지만 정확히 그 접근법입니다. 직관적으로 나는 무한대에있는 시리즈의 한계로 그것을 할 수 있어야한다고 생각합니다, 나는 단지 그것을 쓰는 것 주위에 머리를 쓰는 것처럼 보일 수 없습니다. (나는 그런 종류의 수학을 만져 본지 2 년이 지났습니다. ..) –

3

반복되는 이진수, 예를 들어 0. (0011) 또는 0.0 (101)이 주어지면 어떻게 소수로 변환 할 것입니까?

이것은 10 진수와 마찬가지로 2 진수로 해결할 수 있습니다 (즉, 정확한 합리적인 양을 결정할 수 있음). 우리가있는 경우 소수점에서, 우리는 단순히 n이 자리의 숫자가 우리의 분자로 567999 (n9들이 수를 가지고, 0.(567) 말, 우리는이 나타내는 정확한 합리적인 수량을 결정하려면 반복 그룹)을 우리의 분모로 사용 :

0.(567) = 567/999 = 189/333 = 63/111 

지금은 가장 낮은 용어입니다. 이 과정은 완전한 무한 기하 급수적 인 결과 인 mentioned by @Rick Regan의 증류입니다. (1 바이너리에서 가장 높은 자리와 같이) 진에서

우리 대신 우리의 분모로 n9의의 것을 제외하고, 같은 일을, 우리는 n1들합니다.그래서 예를 들어

당신이, 바로이 계산 주위에 어떤 연산을 반복 그룹 전에 자리를
0.(0011) = 0011/1111 =(in decimal) 3/15 = 1/5 

: 후자의 2로 단지 0.(101) 나누어 예를 들어, 0.0(101)이되어 있으므로 0.0(101)5/14입니다 101/111, 또는 5/7입니다 .

관련 문제