-1

부호있는 정수는 부호 비트가 0에서 1로 반전되어 정수가 음수가되도록하는 정수 오버플로를 가질 수 있습니다.부동 소수점이 음수로 오버플로 됨

부동 소수점 숫자와 동일한 문제가 발생할 수 있습니까? 실험적으로 숫자가 너무 크면 Inf이됩니다. 그러나 가수 또는 지수를 오버플로 할 수 없으므로 비슷한 문제가 발생합니까?

답변

0

IEEE 형식 float (float 32 비트, double 64 비트, long double 80 비트)의 경우 숫자는 2의 보수 대신 sign + magnitude와 비슷하게 저장됩니다. 지수는 정상 범위를 가지지 않으며 0 또는 1 비트의 특수 값을 갖습니다. 이중에 대한 위키 기사 :

https://en.wikipedia.org/wiki/Double-precision_floating-point_format

하면 (무한대처럼, NAN, ...), 기호에서 변환을 특수 값 케이스를 포함하지 않는 유형을 부동의 배열에 기수 정렬과 같은 일을 일반적으로 "2의 보수"에 대한 크기가 사용됩니다. 예제 C 64 비트 부호와 크기를 부호없는 long long (64 비트 부호없는 정수)로 변환하고 역으로 변환하는 매크로. 이 결과 음의 0에 대한 부호 및 크기 값이 양의 0에 대한 값보다 작게 변환됩니다.

// converting doubles to unsigned long long for radix sort or something similar 
// note -0 converted to 0x7fffffffffffffff, +0 converted to 0x8000000000000000 
// -0 is unlikely to be produced by a float operation 

#define SM2ULL(x) ((x)^(((~(x) >> 63)-1) | 0x8000000000000000ull)) 
#define ULL2SM(x) ((x)^((((x) >> 63)-1) | 0x8000000000000000ull)) 
관련 문제