FixedMathSharp v7.0.0 — Full-Domain Determinism
FixedMathSharp v7 is a major deterministic-contract hardening release. It makes
local and world transform intent explicit, carries exact fixed-width
intermediates through critical arithmetic and geometry decisions, and expands
the library's engine-neutral collision/query surface across the full Q32.32
domain.
Important
This release contains source-breaking and result-breaking
changes. Division, normalization, trigonometry, transforms, bounds, and
geometry queries can produce different raw values than v6. Version or
regenerate deterministic replays, hashes, and golden results after migrating.
Highlights
- Full-domain arithmetic: division now rounds exact midpoints to even; new
exactTryAdd/TrySubtractAPIs and fused multiply-add/multiply-divide paths
avoid premature saturation and intermediate rounding. - Explicit transform hierarchy:
FixedTransformnow owns authoritative
local TRS state with derived world views, named reparenting semantics,
cycle-rejecting reparenting, atomic world-space updates, strict matrix import,
and full-domain point conversion. - Hardened vectors, rotations, and matrices: magnitude, normalization,
projection, trigonometry, quaternion construction, scale extraction, and TRS
decomposition now behave consistently at tiny, extreme, reflected, and
near-degenerate inputs. - Expanded exact geometry: bounds and primitives now share
FixedMathSharp.Geometry; v7 adds canonicalFixedOrientedBox, semantic
point anchors, exact ray/segment intervals, finite capsule/cylinder/cone
queries, swept-sphere box and cylinder tests, and rigid triangle contacts. - Safer bounds: derived centers and extents retain full-domain arithmetic,
bounding-sphere factories guarantee containment or throw, and explicitly named
*ClippedToDomainfactories cover intentional clipping. - Measured hot-path work: exact wide-ratio, oriented-box, triangle, and
aligned-frame anchor paths were optimized while preserving allocation-free
deterministic behavior. - Better project documentation: the API reference and coverage report are
now published together on GitHub Pages, with deeper guides synchronized to the
GitHub Wiki.
Breaking Changes
- Import geometry types from
FixedMathSharp.Geometry. - Replace ambiguous
FixedTransformproperties with explicit local/world
members.Parentis read-only; useSetParentKeepingLocalor
TrySetParentKeepingWorld. Replace arbitrary matrix construction with
component construction orTryCreateFromLocalMatrix. - Matrix scale APIs were renamed or removed in favor of scale magnitudes,
canonical lossy scale, and checked TRS decomposition. FixedQuaternion.Anglenow returns the full shortest physical rotation;
remove downstream* 2corrections.- Removed
FixedBoundCircle.RadiusSquared,FixedBoundSphere.RadiusSquared,
Vector3d.ClosestPointsOnTwoLines, andFixedMath.AddOverflowHelper; use the
exact bound predicates, segment-owned closest-point APIs, and checked
language/runtime primitives instead. - Some exact bounds operations now throw
OverflowExceptionrather than
silently returning a saturated or under-containing result. - Chronicler transform hashes now contain authoritative local position,
rotation, and scale only. v6 transform hashes are intentionally incompatible.
Upgrade
Read the complete
v6 → v7 migration guide
before upgrading production simulations.
Full changelog:
73cd639…5430dc9 (inclusive)