code wiki / _hdl_build / _pe_f64erfc.nx
_pe_f64erfc.nx source
↩ module page · 28 lines · 1044 B
1// AUTHORED BY THE NISHI BUILDER (pattern: MATH_KERNEL / ERFC_CF) -- no Claude core logic.
2// All constants from the SOVEREIGN bigfloat spec (nx_mathspec_erfc; 1/sqrt(pi) rail held).
3// Rung-2 domain 1.75..6: Laplace continued fraction (a_k=k/2, backward recurrence).
4import "nx_syscalls.nx"
5import "nx_f64.nx"
6import "nx_f64_div.nx"
7import "nx_f64_exp.nx"
8func nx_f64_erfc(x: i64) -> i64 {
9 let x2: i64 = nx_f64_mul(x, x)
10 let e: i64 = nx_f64_exp(nx_f64_neg(x2))
11 let pref: i64 = nx_f64_mul(e, 4603256987541740397)
12 let n: i64 = 100
13 var nf: i64 = 0
14 var ci: i64 = 0
15 while ci < n { nf = nx_f64_add(nf, 4607182418800017408); ci = ci + 1 }
16 var ak: i64 = nx_f64_mul(nf, 4602678819172646912)
17 var t: i64 = 0
18 var k: i64 = n
19 while k >= 1 {
20 let den: i64 = nx_f64_add(x, t)
21 t = nx_f64_div(ak, den)
22 ak = nx_f64_sub(ak, 4602678819172646912)
23 k = k - 1
24 }
25 let den1: i64 = nx_f64_add(x, t)
26 let cf: i64 = nx_f64_div(4607182418800017408, den1)
27 return nx_f64_mul(pref, cf)
28}