| 271 | struct Limits |
| 272 | { |
| 273 | constexpr Limits (MantissaAndExponent value) |
| 274 | { |
| 275 | upper = { (value.mantissa << 1) + 1, value.exponent - 1 }; |
| 276 | |
| 277 | while ((upper.mantissa & (hiddenBit << 1)) == 0) |
| 278 | upper = upper.shiftedUp (1); |
| 279 | |
| 280 | upper = upper.shiftedUp (static_cast<int> (sizeof (upper.mantissa) * 8 - numSignificandBits - 2)); |
| 281 | |
| 282 | lower = value.mantissa == hiddenBit ? MantissaAndExponent { (value.mantissa << 2) - 1, value.exponent - 2 } |
| 283 | : MantissaAndExponent { (value.mantissa << 1) - 1, value.exponent - 1 }; |
| 284 | lower.mantissa <<= lower.exponent - upper.exponent; |
| 285 | lower.exponent = upper.exponent; |
| 286 | } |
| 287 | |
| 288 | MantissaAndExponent lower, upper; |
| 289 | }; |