code wiki / (root) / nx_math.nx

nx_math.nx source

↩ module page · 45 lines · 2023 B

1// nx_math.nx -- canonical pure-integer math helpers. 2// 3// Single-source-of-truth for numeric utilities that were previously 4// duplicated across nx_geom, nx_light, nx_pc, nx_theorems7, and 5// likely many more. This is THE home of integer sqrt and friends. 6// 7// Consolidation principle (per CAPTAIN_MORONI + deduped-substrate 8// doctrine): exactly one implementation per pure-math utility. 9// All consumers import nx_math and call the canonical version. 10// 11// Equivalence verified via nx_func_compare: 12// nx_geom_isqrt, nx_light_isqrt, nx_pc_isqrt, nx_th_isqrt 13// all hashed to 5794444719011524842 (FNV-1a 64-bit, normalized). 14// 15// genealogy_id: newton_1669_general_method + heron_alexandria_70AD 16// + bertrand_brent_iqsrt_handbook_1976 17// lineage_id: integer_newton_iteration + fixed_point_iteration 18// axioms: NX_AX_ALG_DISTRIBUTIVITY (Newton step is rearrangement 19// of (x + n/x)/2 = average of x and n/x, which converges 20// monotonically to floor(sqrt(n)) by AM-GM inequality) 21// + NX_AX_ORD_LEAST_UPPER_BOUND (the integer sqrt is the 22// greatest integer y with y*y <= n -- well-defined by LUB 23// on bounded sets of integers). 24 25// nx_safety_envelope: 26// intended_use: AUTO_APPLIED -- primitive-specific tuning queued 27// sil_target: SIL1 28// evidence: [bulk_applied_2026-05-16, see-file-comment-for-detail] 29// verdict: NOT_YET_EVALUATED 30 31import "syscalls.nx" 32import "nx_axioms.nx" 33import "nx_vecmath.nx" 34 35// ===== Integer sqrt (Newton's method) ================================== 36// 37// Returns floor(sqrt(n)) for n >= 0. Returns 0 for n < 0 (conventional 38// rather than abortive -- caller must check sign if invariant matters). 39// Returns 0 for n == 0. 40// 41// Convergence: x_{k+1} = (x_k + n/x_k) / 2. Monotone decreasing toward 42// floor(sqrt(n)) once x_k >= floor(sqrt(n)). Initial x_0 = n converges 43// in O(log n) iterations. 44 45func nx_math_isqrt(n: i64) -> i64 { return vm_isqrt(n) }