2014-12-25 59 views
0

균일 한 표현을 위해 0에서 1 사이의 값을 두 배로 많이 저장해야합니다. 예를 들어 ARGB 값은 32 비트 정수입니다. 상호 배타적으로 저장하면 복소수가 모든 정수 값을 고유하게 나타낼 수 있습니까? 내가 할 수있는 비트가 충분하다는 것을 알고 있지만, 지수 간격으로이를 막을 수 있을지 확실하지 않습니다.부동 소수점 숫자의 역수 표현

답변

0

표준 이중에는 52 비트 가수가 있으므로 예, 32 비트 정수를 유지하고 정확하게 재현 할 수 있습니다. 또 다른 문제는 그들이 0과 1 사이에 있어야한다는 요구 사항입니다. 역수는 그렇게하는 것이 아닙니다! 반례 : 1/3은 이중으로 표현할 수 없습니다. 범위를 보장하기 위해 값을 나누어야합니다. 정확한 정확성을 유지하기 위해 2의 제곱으로 나누거나 곱할 수 있습니다. 따라서 32 비트 값을 부호없는 값으로 두 번 변환 한 다음 2^32로 나눕니다. 값을 읽을 때 그 값을 되 돌리면 값을 정확히 재현해야합니다. C 나 C++에서는 float 나 double의 지수와 가수를 직접 조작하는 특별한 지시가 있습니다. 이것들은보다 효율적이고 안전합니다.

+0

죄송합니다.이 답변을 깜빡입니다. 내 범위는 항상 2의 제곱수 (예 : 0x1/0xFFFF)이므로 확인해야합니다. 병목 현상이 아니므로 표준 산술로 그냥 머물러 라. :) – Shaggi