GF48: forty-eight bits
You will learn
How the rule splits 48 bits into 1 + 18 + 29, a width IEEE 754 does not have.
GF48 has 48 bits: 1 sign, 18 exponent, 29 mantissa, bias 131071. IEEE 754 has no 48-bit format; the rule makes one the same way it makes all the others. Its ratio E / M is 0.621, 0.003 from 1 / phi.
Try it
Find BIAS and EXP_MAX in gf48.t27 and check them against 2^17 - 1 and 2^18 - 1. Then find the three shift constants and say which field each one places.

GF48: 48 bits as the spec lays them out, read from gf48.t27. Lesson 17 of the GoldenFloat course.
specs/numeric/gf48.t27
// SPDX-License-Identifier: Apache-2.0
; gf48.t27 -- GoldenFloat48 Encode/Decode
; GF48: 48-bit floating point with 1 sign + 18 exponent + 29 mantissa
; Bit layout: [S(1) E(18) M(29)] = [47:47][46:29][28:0]
; phi^2 + 1/phi^2 = 3 | TRINITY
; Generated by the closed-form rule e = round((N-1)/phi^2), m = N-1-e.
; STATUS: Conj (closed-form rule, no RTL yet on this repo).
module triformat-gf48;
// ============================================================================
// Constants -- derived from the closed-form rule
// ============================================================================
pub const TOTAL_BITS : u16 = 48;
pub const SIGN_BITS : u8 = 1;
pub const EXP_BITS : u8 = 18;
pub const MANT_BITS : u16 = 29;
pub const SIGN_SHIFT : u16 = 47;
pub const EXP_SHIFT : u16 = 29;
pub const MANT_SHIFT : u16 = 0;
pub const BIAS : u64 = 131071; // 2^(E-1) - 1
pub const EXP_MAX : u64 = 262143; // 2^E - 1
// E/M ratio (target: 1/phi ~ 0.6180339887)
pub const EM_RATIO : f64 = 0.620689655172;
pub const PHI_DIST : f64 = 0.002655666423;
pub const PHI_BIAS_STATUS : str = "OPEN -- not derivable from closed form; empirical per format";
// PHI_BIAS for this rung is NOT defined. The published formula
// PHI_BIAS = EXP_MAX - BIAS reproduces GF64 only and is RETRACTED as a general law.
// Do NOT invent a value via Fibonacci/Lucas/square coincidence; those are
// descriptive, not prescriptive.
// ============================================================================
// Invariants -- the Fpath below, made executable (W601)
//
// This file declared its own falsification path in a comment and nothing
// checked it. W600's per-test measurement found 38 specs that compile while
// asserting nothing; this is one, and the rule it is derived from is stated
// precisely enough to be a test.
// ============================================================================
invariant gf48_field_widths_partition_the_word {
@compileAssert(SIGN_BITS + EXP_BITS + MANT_BITS == TOTAL_BITS);
}
invariant gf48_closed_form_mantissa {
// m = N - 1 - e, the second half of the generating rule
@compileAssert(MANT_BITS == TOTAL_BITS - 1 - EXP_BITS);
}
invariant gf48_closed_form_exponent {
// e = round((N-1)/phi^2) <=> (e - 1/2)*phi^2 <= N-1 <= (e + 1/2)*phi^2
// Stated as bounds because the rule rounds; phi^2 = 2.618033988749895.
@compileAssert((EXP_BITS as f64 - 0.5) * 2.618033988749895 <= TOTAL_BITS as f64 - 1.0);
@compileAssert(TOTAL_BITS as f64 - 1.0 <= (EXP_BITS as f64 + 0.5) * 2.618033988749895);
}
invariant gf48_shifts_follow_the_layout {
@compileAssert(SIGN_SHIFT == TOTAL_BITS - 1);
@compileAssert(EXP_SHIFT == MANT_BITS);
@compileAssert(MANT_SHIFT == 0);
}
invariant gf48_bias_identity {
// BIAS = 2^(E-1) - 1, as the declaration's own comment states
@compileAssert(BIAS == (1 << (EXP_BITS - 1)) - 1);
}
invariant gf48_exp_max_identity {
// EXP_MAX = 2^E - 1
@compileAssert(EXP_MAX == (1 << EXP_BITS) - 1);
}
; ============================================================================
; Claim-status: Conj
; Fpath: closed-form rule mis-applied (verify e = round((48-1)/phi^2) = 18, m = 29)
; or RTL emission diverges from this constant set.
; As of W601 the Fpath above is CHECKED by the invariants in this file.
; ============================================================================
All lessons
Module 1 · The rule and its numbers
One rule splits every width, the ratio it aims at, and the Lucas numbers behind the 3.
Module 2 · Why phi, why three
Why the split is phi, why base three, and how a spec checks GF16 keeps phi.
Module 3 · The small rungs: GF4 to GF8
GF4, GF6 and GF8, the fewest bits, where rounding to whole bits costs the most.
Module 4 · Ten to fourteen bits
GF10, GF12 and GF14, and how the distance from 1 / phi moves as the word grows.
Module 5 · GF16 at work
The primary 16-bit format, a two-term dot product in GF-T16, then GF20 and GF24.
Module 6 · GF32 to GF64
GF32 beside IEEE single, GF48 with no IEEE twin, GF64 beside IEEE double.
Module 7 · GF96 to GF256
GF96, GF128 and GF256, where the specs hold the layout with invariants.
Module 8 · The widest rungs, then trits
GF512 and GF1024, the two widest rungs, then GF-T8, where the exponent moves to trits.
Module 9 · More trits, then the decode
GF-T16 and GF-T32, then why fixed fields decode in parallel and a posit does not.