decimal-scaled 0.5.0

Const-generic base-10 fixed-point decimals (D18/D38/D76/D153/D307 and the half-width tiers up to D1232) with integer-only transcendentals correctly rounded to within 0.5 ULP — exact at the type's last representable place. Deterministic across every platform; no_std-friendly.
Documentation
// SPDX-FileCopyrightText: 2026 John Moxley
// SPDX-License-Identifier: MIT OR Apache-2.0

//! Cross-width decimal comparison — now handled by a single generic
//! impl, not per-pair macro expansion.
//!
//! Previously this module emitted a `PartialEq` / `PartialOrd` pair per
//! adjacent `(narrower, wider)` decimal-width pair at the same `SCALE`,
//! widening the narrower operand into the wider storage before
//! deferring to the wider storage's `Ord` / `Eq`.
//!
//! That matrix is superseded by a single generic pair in
//! `src/types/unified.rs`:
//!
//! ```ignore
//! impl<const N: usize, const M: usize, const S: u32>
//!     PartialEq<D<Int<M>, S>> for D<Int<N>, S> { /* .. */ }
//! impl<const N: usize, const M: usize, const S: u32>
//!     PartialOrd<D<Int<M>, S>> for D<Int<N>, S> { /* .. */ }
//! ```
//!
//! which delegates to the int-layer cross-width comparator
//! (`Int::cmp_cross`) on the storages at the same `SCALE`. One
//! instantiation covers every width combination, including the
//! same-type (`N == M`) case, so no per-pair widening macro is needed.
//!
//! ```ignore
//! let a: D38<12> = D38::<12>::try_from(5).unwrap();
//! let b: D18<12> = D18::<12>::try_from(5).unwrap();
//! assert!(a == b);   // cross-width, same SCALE
//! assert!(b < D38::<12>::try_from(6).unwrap());
//! ```