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