xref: /aosp_15_r20/external/arm-optimized-routines/pl/math/tools/v_erf.sollya (revision 412f47f9e737e10ed5cc46ec6a8d7fa2264f8a14)
1*412f47f9SXin Li// polynomial for approximating erf(x).
2*412f47f9SXin Li// To generate coefficients for interval i (0 to 47) do:
3*412f47f9SXin Li// $ sollya v_erf.sollya $i
4*412f47f9SXin Li//
5*412f47f9SXin Li// Copyright (c) 2022-2023, Arm Limited.
6*412f47f9SXin Li// SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
7*412f47f9SXin Li
8*412f47f9SXin Liscale = 1/8;
9*412f47f9SXin Lideg = 9;
10*412f47f9SXin Li
11*412f47f9SXin Liitv = parse(__argv[0]);
12*412f47f9SXin Liif (itv == 0)  then { a = 0x1p-1022; }
13*412f47f9SXin Lielse                { a = itv * scale; };
14*412f47f9SXin Li
15*412f47f9SXin Liprec=256;
16*412f47f9SXin Li
17*412f47f9SXin Lipoly = fpminimax(erf(scale*x+a), deg, [|D ...|], [0; 1]);
18*412f47f9SXin Li
19*412f47f9SXin Lidisplay = hexadecimal;
20*412f47f9SXin Lifor i from 0 to deg do coeff(poly, i);