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