2010-07-03 5 views
2

임의의 양수 인 x이 있다고 가정합니다.이진수의 반전

이진수로 역수를 나타내는 방법이 있습니까? x의 역함수는 1/x입니다. 이진수로 표현하는 방법은 무엇입니까?

예컨대 x=5 //101
x의 역수는 1/x입니다. 바이너리 형식입니다 ...?

답변

6

십진법 양식과 동일한 방법으로 찾을 수 있습니다 : long division.

오랫동안 나누는 것이 훨씬 간단하지만 다른 기반에 있기 때문에 바로 가기가 없습니다.

Here은 이진수에 적용되는 긴 나누기에 대한 설명입니다. 당신이 알고있는 단지 수 있도록,하지만

ld

는 오늘날의 컴퓨터에서 대부분의 부동 소수점 시스템은 당신을 위해 매우 빠른 부문을한다.

1

일반적으로 임의의 소수를 "이진수로 표현"하는 유일한 실제 방법은 분자와 분모 인 부동 소수점입니다. "부동 소수점"은 가장 일반적으로 사용되는 (하드웨어 지원되는) - 분수가 분수가 최소 항으로 감소 될 때 그 분모에 정확히 나타낼 수있는 분수는 2의 거듭 제곱입니다 (물론 표현에 할당 된 고정 된 비트 수로 충분할 때만) 우리는 대표하고 싶지만, 후자의 제한은 에 대해 고정 소수점 바이너리 표현 인 (정수와 같이 가장 간단한 것을 포함)을 유지합니다.

0

그냥 바이너리 분수 번호의 처음 몇 비트가 필요한 경우,이 트릭은 당신에게 그 비트를 줄 것이다 : (2 << 31)/x. 그러나이 트릭을 실제 소프트웨어 프로젝트에 사용하지 마십시오. (이 값을 표현하기 위해, 거친 정확하고 분명 잘못된 방법이기 때문에) 더 높은 정확도/정밀도를 원하는 경우

1
0.125   = 0.001b 
0.0625   = 0.0001b 
0.0078125  = 0.0000001b 
0.00390625  = 0.00000001b 
0.00048828125 = 0.00000000001b 
0.000244140625 = 0.000000000001b 
---------------------------------- 
0.199951171875 = 0.001100110011b 
자신을 노크

.

1

또 다른 형태의 곱셈 역수는 대부분의 컴퓨터에서 구현 된 정수 연산의 모듈로 특성을 이용합니다. 귀하의 경우 5를 곱한 값이 1 (mod 4294967296) 일 때 11001100110011001100110011001101 (-858993459 signed int32 또는 3435973837 unsigned int32)의 32 비트 값. 모듈러스 2의 거듭 제곱에 비례하는 값만이 승수 역수를 갖습니다.