( IEEE 754 float double) ():
~(-1.0) | 0.5
, , . :
uint64_t m_one, half;
double max;
*(double *)(void *)&m_one = -1.0;
*(double *)(void *)&half = 0.5;
*(uint64_t *)(void *)&max = ~m_one | half;
, ? , .
, k , . 2 0.
() 2**(k-1) - 1, , 0 , .
:
, , , 2**k - 2 2**(k-1) - 1, .
double k = 11, .. 1023, 2**1023, 1E+308.
, :
-1.0 , - - , - 0~(-1.0) ,0.5 0; 1, .. , .
, -, .
80- x86 (aka long double), -twiddling , , 32- .
2**(k-1) - 1 - , . , 1.0 0.5 , .
base b (aka radix) 2, b**(-1) 0.5 = 2**(-1).
reserverd, 1.0 0.5. ( , ). 1.0 , .
:
~(-1.0) | 0.5
, 2, .
~(-1.0) | 1.0
, .