부호있는 정수는 부호 비트가 0에서 1로 반전되어 정수가 음수가되도록하는 정수 오버플로를 가질 수 있습니다.부동 소수점이 음수로 오버플로 됨
부동 소수점 숫자와 동일한 문제가 발생할 수 있습니까? 실험적으로 숫자가 너무 크면 Inf
이됩니다. 그러나 가수 또는 지수를 오버플로 할 수 없으므로 비슷한 문제가 발생합니까?
부호있는 정수는 부호 비트가 0에서 1로 반전되어 정수가 음수가되도록하는 정수 오버플로를 가질 수 있습니다.부동 소수점이 음수로 오버플로 됨
부동 소수점 숫자와 동일한 문제가 발생할 수 있습니까? 실험적으로 숫자가 너무 크면 Inf
이됩니다. 그러나 가수 또는 지수를 오버플로 할 수 없으므로 비슷한 문제가 발생합니까?
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))