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

//! Integer hypotenuse algorithm family.
//!
//! `hypot(a, b) = round(sqrt(a^2 + b^2))` for `Int<N>`, generic over the
//! storage limb count `N`. The radicand `a^2 + b^2` is formed in a limb
//! scratch buffer (so no `W = Int<2N>` work type), rooted via the int
//! layer's width-agnostic slice `isqrt`, then a single round step lands the
//! result; [`None`] signals true overflow (the rounded root exceeds the
//! signed range of `Int<N>`). The decimal tier dispatches DOWN to this
//! family -- both decimal operands share `10^SCALE`, which cancels out of
//! the root.
//!
//! - [`hypot_pythagoras`](hypot_pythagoras::hypot_pythagoras) -- the kernel:
//!   form `a^2 + b^2` in scratch, floor root via the Newton slice `isqrt`,
//!   round. The sole hypot algorithm; the policy's `Schoolbook` seam points
//!   at it.
//!
//! The per-`N` policy lives in [`crate::int::policy::hypot`].

pub(crate) mod hypot_pythagoras;
/// Native-u128 narrow fast path (`N <= 3`); selected by the policy for the
/// narrow tiers, falls back to `hypot_pythagoras` for radicands exceeding u128.
pub(crate) mod hypot_u128_fast;