code wiki / _hdl_build / nx_research_isqrt_gate.nx

nx_research_isqrt_gate.nx source

↩ module page · 83 lines · 4991 B

1// nx_research_isqrt_gate.nx -- sovereign integer square root: Newton's method ITERATIVELY DISCOVERS floor(sqrt(N)), 2// and an exact integer bracketing check (r^2 <= N < (r+1)^2) VERIFIES it -- the discover-then-verify pattern, and 3// a foundational primitive (unblocks 1/r^2 force laws for orbital dynamics). MEASURED: Newton converges in a 4// handful of iterations where a naive linear scan needs O(sqrt(N)). Liar-kill: a wrong root fails the bracket. 5// Pure integer, deterministic. GREEN iff 6/6. license_tier: ORIGINAL 6import "nx_syscalls.nx" 7 8func g_w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 9func g_n(v: i64) -> i64 { var m: i64=v; if m<0{g_w("-");m=0-m} let t:*u8=sys_mmap(24); var k:i64=0; if m==0{t[0]=48 as u8;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i:i64=0; let o:*u8=sys_mmap(24); while i<k{o[i]=t[k-1-i];i=i+1}; sys_write(1,o,k); return 0 } 10func g_row(id: *u8, ok: i64, pass: *i64) -> i64 { g_w(" "); g_w(id); g_w(": "); if ok==1 { g_w("OK\n"); pass[0]=pass[0]+1 } else { g_w("FAIL\n") } return 0 } 11func xrng(s: *i64) -> i64 { var x: i64=s[0]; x = x ^ (x << 13); x = x ^ (x >> 7); x = x ^ (x << 17); s[0]=x; return x } 12func rpos(s: *i64) -> i64 { let v: i64 = xrng(s); return v & 0x3FFFFFFFFFFFFFFF } 13 14// Newton's method for floor(sqrt(N)); writes the iteration count to itp. 15func isqrt(N: i64, itp: *i64) -> i64 { 16 if N<2 { itp[0]=0; return N } 17 var x: i64=N; var y: i64=(x+1)/2; var it: i64=1 18 while y<x { x=y; y=(x + N/x)/2; it=it+1 } 19 itp[0]=it 20 return x 21} 22// naive linear scan (the O(sqrt(N)) baseline), iteration-counted. 23func isqrt_naive(N: i64, itp: *i64) -> i64 { 24 var r: i64=0; var it: i64=0 25 while (r+1)*(r+1) <= N { r=r+1; it=it+1 } 26 itp[0]=it 27 return r 28} 29// the VERIFIER: r is exactly floor(sqrt(N)) iff r^2 <= N < (r+1)^2. 30func bracket_ok(N: i64, r: i64) -> i64 { if r*r>N { return 0 } if (r+1)*(r+1)<=N { return 0 } return 1 } 31 32func main() -> i64 { 33 let pass: *i64 = sys_mmap(8) as *i64; pass[0]=0 34 g_w("=== NX-RESEARCH-ISQRT GATE (Newton discovers floor(sqrt(N)); exact bracketing verifies) ===\n") 35 let it: *i64=sys_mmap(8) as *i64 36 37 // perfect squares 38 let s144: i64=isqrt(144,it); let s1m: i64=isqrt(1000000,it); let s1t: i64=isqrt(1000000000000,it) 39 var sq_ok: i64=0 40 if s144==12 { if s1m==1000 { if s1t==1000000 { sq_ok=1 } } } 41 // non-squares (floor) 42 let n2: i64=isqrt(2,it); let n10: i64=isqrt(10,it); let n99: i64=isqrt(99,it); let n2t: i64=isqrt(2000000000000,it) 43 var ns_ok: i64=0 44 if n2==1 { if n10==3 { if n99==9 { if n2t==1414213 { ns_ok=1 } } } } 45 // bracketing on all of the above 46 var br_ok: i64=0 47 if bracket_ok(144,s144)==1 { if bracket_ok(1000000000000,s1t)==1 { if bracket_ok(99,n99)==1 { if bracket_ok(2000000000000,n2t)==1 { br_ok=1 } } } } 48 49 // MEASURED: Newton iters vs naive iters for N=10^12 50 let itN: *i64=sys_mmap(8) as *i64; let rNewton: i64=isqrt(1000000000000, itN) 51 let itL: *i64=sys_mmap(8) as *i64; let rNaive: i64=isqrt_naive(1000000000000, itL) 52 var meas: i64=0 53 if rNewton==rNaive { if itN[0]<=40 { if itL[0]>=1000000 { meas=1 } } } 54 55 // STRESS: 1000 random N up to ~2e12, bracketing must always hold 56 let st: *i64=sys_mmap(8) as *i64; st[0]=0x9E3779B97F4A7C15 57 var i: i64=0; var viol: i64=0 58 while i<1000 { 59 let N: i64=(rpos(st)%2000000000000)+1 60 let r: i64=isqrt(N,it) 61 if bracket_ok(N,r)==0 { viol=viol+1 } 62 i=i+1 63 } 64 // liar-kill: a wrong root (r+1) must fail the bracket 65 let rg: i64=isqrt(99,it) 66 let liar: i64=(bracket_ok(99, rg+1)==0) as i64 67 68 g_w(" perfect: sqrt(144)="); g_n(s144); g_w(" sqrt(1e6)="); g_n(s1m); g_w(" sqrt(1e12)="); g_n(s1t); g_w("\n") 69 g_w(" floor: sqrt(2)="); g_n(n2); g_w(" sqrt(10)="); g_n(n10); g_w(" sqrt(99)="); g_n(n99); g_w(" sqrt(2e12)="); g_n(n2t); g_w("\n") 70 g_w(" MEASURED N=1e12: Newton iters="); g_n(itN[0]); g_w(" naive iters="); g_n(itL[0]); g_w(" (same result="); g_n((rNewton==rNaive) as i64); g_w(")\n") 71 g_w(" stress: 1000 random N, bracket violations="); g_n(viol); g_w("\n") 72 73 g_row("DISCOVERY: Newton's method computes floor(sqrt) of perfect squares (144->12, 1e6->1000, 1e12->1e6)" as *u8, sq_ok, pass) 74 g_row("FLOOR: non-squares give the exact floor (2->1, 10->3, 99->9, 2e12->1414213)" as *u8, ns_ok, pass) 75 g_row("VERIFIER: bracketing r^2 <= N < (r+1)^2 holds (the exact floor-sqrt property)" as *u8, br_ok, pass) 76 g_row("MEASURED: Newton converges in <=40 iters where naive linear needs ~1e6 (same root)" as *u8, meas, pass) 77 g_row("STRESS: bracketing holds over 1000 deterministic-random N up to 2e12 (0 violations)" as *u8, (viol==0) as i64, pass) 78 g_row("LIAR-KILL: a wrong root (r+1) is REJECTED by the bracketing verifier" as *u8, liar, pass) 79 80 g_w("RESEARCH-ISQRT-GATE rows=6 pass="); g_n(pass[0]) 81 if pass[0]==6 { g_w(" verdict=GREEN\n"); sys_exit(0); return 0 } 82 g_w(" verdict=RED\n"); sys_exit(1); return 1 83}