Principle:ClickHouse ClickHouse IEEE754 Float Decomposition
| Knowledge Sources | |
|---|---|
| Domains | Numeric_Types, Floating_Point |
| Last Updated | 2026-02-08 00:00 GMT |
Overview
A technique for accessing and manipulating the internal binary representation of IEEE-754 floating-point numbers.
Description
IEEE-754 Float Decomposition involves breaking down a floating-point number into its constituent parts as defined by the IEEE-754 standard:
- Sign bit (1 bit): Determines if number is positive or negative
- Exponent (5, 8, or 11 bits depending on precision): Determines the scale
- Mantissa/Significand (remaining bits): Determines the precision
The representation follows the formula: `value = (-1)^sign × (1.mantissa) × 2^(exponent - bias)`
Decomposition enables:
- Exact comparison with integers without conversion
- Detection of special values (NaN, infinity, denormals)
- Implementation of custom floating-point operations
- Bit-level manipulation for performance
- Understanding precision limits
Usage
Use this principle when:
- Implementing numerical algorithms requiring precise control
- Comparing floating-point with fixed-point or integer types
- Detecting and handling special floating-point values
- Optimizing floating-point operations at the bit level
- Analyzing floating-point behavior and precision
Theoretical Basis
The principle is grounded in the IEEE-754 floating-point standard:
IEEE-754 Format:
- Float32: 1 sign + 8 exponent + 23 mantissa = 32 bits
- Float64: 1 sign + 11 exponent + 52 mantissa = 64 bits
- Float16: 1 sign + 5 exponent + 10 mantissa = 16 bits
- BFloat16: 1 sign + 8 exponent + 7 mantissa = 16 bits
Normalized Numbers: Most floats are normalized with implicit leading 1:
- `value = (-1)^sign × 1.mantissa × 2^(exp - bias)`
- Bias: 127 (float32), 1023 (float64), 15 (float16)
Special Values:
- All exponent bits 1, mantissa 0: Infinity
- All exponent bits 1, mantissa ≠ 0: NaN
- All exponent bits 0: Zero or denormal
Comparison Complexity: Comparing floats with integers requires:
- Handling different value ranges
- Accounting for fractional parts
- Managing special values appropriately
- Avoiding conversion that could lose precision