1*5a02ffc3SAndrew Turner// tables and constants for approximating erfc(x). 2072a4ba8SAndrew Turner// 3*5a02ffc3SAndrew Turner// Copyright (c) 2023, Arm Limited. 4072a4ba8SAndrew Turner// SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception 5072a4ba8SAndrew Turner 6*5a02ffc3SAndrew Turnerdisplay = hexadecimal; 7*5a02ffc3SAndrew Turnerprec=128; 8072a4ba8SAndrew Turner 9*5a02ffc3SAndrew Turner// Tables 10*5a02ffc3SAndrew Turnerprint("{ i, r, erfc(r), 2/sqrt(pi) * exp(-r^2) }"); 11*5a02ffc3SAndrew Turnerfor i from 0 to 3787 do { 12*5a02ffc3SAndrew Turner r = 0.0 + i / 128; 13*5a02ffc3SAndrew Turner t0 = double(erfc(r) * 2^128); 14*5a02ffc3SAndrew Turner t1 = double(2/sqrt(pi) * exp(-r * r) * 2^128); 15*5a02ffc3SAndrew Turner print("{ " @ t0 @ ",\t" @ t1 @ " },"); 16072a4ba8SAndrew Turner}; 17072a4ba8SAndrew Turner 18*5a02ffc3SAndrew Turner// Constants 19*5a02ffc3SAndrew Turnerprint("> 2/sqrt(pi)"); 20*5a02ffc3SAndrew Turnerdouble(2/sqrt(pi)); 21072a4ba8SAndrew Turner 22*5a02ffc3SAndrew Turnerprint("> 1/3"); 23*5a02ffc3SAndrew Turnerdouble(1/3); 24*5a02ffc3SAndrew Turner 25*5a02ffc3SAndrew Turnerprint("> P5"); 26*5a02ffc3SAndrew Turnerdouble(2/15); 27*5a02ffc3SAndrew Turnerdouble(1/10); 28*5a02ffc3SAndrew Turnerdouble(2/9); 29*5a02ffc3SAndrew Turnerdouble(2/45); 30*5a02ffc3SAndrew Turner 31*5a02ffc3SAndrew Turnerprint("> P6"); 32*5a02ffc3SAndrew Turnerdouble(1/42); 33*5a02ffc3SAndrew Turnerdouble(1/7); 34*5a02ffc3SAndrew Turnerdouble(2/21); 35*5a02ffc3SAndrew Turnerdouble(4/315); 36*5a02ffc3SAndrew Turner 37*5a02ffc3SAndrew Turnerprint("> Q"); 38*5a02ffc3SAndrew Turnerdouble( 5.0 / 4.0); 39*5a02ffc3SAndrew Turnerdouble( 6.0 / 5.0); 40*5a02ffc3SAndrew Turnerdouble( 7.0 / 6.0); 41*5a02ffc3SAndrew Turnerdouble( 8.0 / 7.0); 42*5a02ffc3SAndrew Turnerdouble( 9.0 / 8.0); 43*5a02ffc3SAndrew Turnerdouble(10.0 / 9.0); 44*5a02ffc3SAndrew Turner 45*5a02ffc3SAndrew Turnerprint("> R"); 46*5a02ffc3SAndrew Turnerdouble(-2.0 * 4.0 / (5.0 * 6.0)); 47*5a02ffc3SAndrew Turnerdouble(-2.0 * 5.0 / (6.0 * 7.0)); 48*5a02ffc3SAndrew Turnerdouble(-2.0 * 6.0 / (7.0 * 8.0)); 49*5a02ffc3SAndrew Turnerdouble(-2.0 * 7.0 / (8.0 * 9.0)); 50*5a02ffc3SAndrew Turnerdouble(-2.0 * 8.0 / (9.0 * 10.0)); 51*5a02ffc3SAndrew Turnerdouble(-2.0 * 9.0 / (10.0 * 11.0)); 52