code wiki / _hdl_build / _bf_regen_gate_authored.nx

_bf_regen_gate_authored.nx source

↩ module page · 107 lines · 3439 B

1// _bf_regen_gate_authored.nx -- ME3 rung 1 gate: the SOVEREIGN bigfloat oracle 2// (nx_bigfloat120 + exp/ln, every constant self-computed) must reproduce EVERY 3// mpmath-born expected value in the exp (203) and log (196) KAT sets bit-exactly. 4// GREEN = anchor transferred = the last python debt in the math arc closes 5// (ledger T#math-oracle-py-exp-log): vector regeneration is nishi-only from here. 6// 7// Markers: REGENBAD fn= i= x= exp= got= / REGEN exp=ok/total log=ok/total 8// BF-REGEN-GATE verdict=GREEN|RED 9 10import "nx_syscalls.nx" 11import "nx_bigfloat120.nx" 12import "nx_bigfloat120_div.nx" 13import "nx_bigfloat120_exp.nx" 14import "nx_bigfloat120_ln.nx" 15import "_f64_exp_kat_vectors.nx" 16import "_f64_log_kat_vectors.nx" 17 18func bfr_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 19 20func bfr_putn(v: i64) -> i64 { 21 let bb: *u8 = sys_mmap(28) 22 var m: i64 = v 23 if m < 0 { m = 0 - m; sys_write(1, "-" as *u8, 1) } 24 let t: *u8 = sys_mmap(28) 25 var k: i64 = 0 26 if m == 0 { t[0] = 48; k = 1 } 27 while m > 0 { t[k] = 48 + (m % 10); m = m / 10; k = k + 1 } 28 var i: i64 = 0 29 while i < k { bb[i] = t[k-1-i]; i = i + 1 } 30 sys_write(1, bb, k) 31 return 0 32} 33 34func bfr_puthex(v: i64) -> i64 { 35 let bb: *u8 = sys_mmap(20) 36 var i: i64 = 0 37 while i < 16 { 38 let nib: i64 = (v >> ((15 - i) * 4)) & 15 39 if nib < 10 { bb[i] = 48 + nib } else { bb[i] = 55 + nib } 40 i = i + 1 41 } 42 sys_write(1, bb, 16) 43 return 0 44} 45 46func main() -> i64 { 47 let av: *i64 = sys_mmap(8 * 256) as *i64 48 let ev: *i64 = sys_mmap(8 * 256) as *i64 49 50 let ne: i64 = f64e_kat_fill_all(av, ev) 51 var eok: i64 = 0 52 var ebad: i64 = 0 53 var i: i64 = 0 54 while i < ne { 55 let got: i64 = bf_exp_f64(av[i]) 56 if got == ev[i] { 57 eok = eok + 1 58 } else { 59 ebad = ebad + 1 60 if ebad <= 25 { 61 bfr_puts("REGENBAD fn=exp i=" as *u8); bfr_putn(i) 62 bfr_puts(" x=" as *u8); bfr_puthex(av[i]) 63 bfr_puts(" exp=" as *u8); bfr_puthex(ev[i]) 64 bfr_puts(" got=" as *u8); bfr_puthex(got) 65 bfr_puts("\n" as *u8) 66 } 67 } 68 i = i + 1 69 } 70 71 let av2: *i64 = sys_mmap(8 * 256) as *i64 72 let ev2: *i64 = sys_mmap(8 * 256) as *i64 73 let nl: i64 = f64l_kat_fill_all(av2, ev2) 74 var lok: i64 = 0 75 var lbad: i64 = 0 76 var j: i64 = 0 77 while j < nl { 78 let got2: i64 = bf_ln_f64(av2[j]) 79 if got2 == ev2[j] { 80 lok = lok + 1 81 } else { 82 lbad = lbad + 1 83 if lbad <= 25 { 84 bfr_puts("REGENBAD fn=log i=" as *u8); bfr_putn(j) 85 bfr_puts(" x=" as *u8); bfr_puthex(av2[j]) 86 bfr_puts(" exp=" as *u8); bfr_puthex(ev2[j]) 87 bfr_puts(" got=" as *u8); bfr_puthex(got2) 88 bfr_puts("\n" as *u8) 89 } 90 } 91 j = j + 1 92 } 93 94 bfr_puts("REGEN exp=" as *u8); bfr_putn(eok); bfr_puts("/" as *u8); bfr_putn(ne) 95 bfr_puts(" log=" as *u8); bfr_putn(lok); bfr_puts("/" as *u8); bfr_putn(nl) 96 bfr_puts("\n" as *u8) 97 if ebad == 0 { 98 if lbad == 0 { 99 bfr_puts("BF-REGEN-GATE verdict=GREEN\n" as *u8) 100 return 0 101 } 102 } 103 bfr_puts("BF-REGEN-GATE verdict=RED\n" as *u8) 104 var rc: i64 = ebad + lbad 105 if rc > 100 { rc = 100 } 106 return rc 107}