1*412f47f9SXin Li// polynomial for approximating erfc(x)*exp(x*x) 2*412f47f9SXin Li// 3*412f47f9SXin Li// Copyright (c) 2022-2023, Arm Limited. 4*412f47f9SXin Li// SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception 5*412f47f9SXin Li 6*412f47f9SXin Lideg = 12; // poly degree 7*412f47f9SXin Li 8*412f47f9SXin Liitv = parse(__argv[0]); 9*412f47f9SXin Li 10*412f47f9SXin Libounds = [|3.725290298461914e-9, 11*412f47f9SXin Li 0.18920711500272103, 12*412f47f9SXin Li 0.41421356237309515, 13*412f47f9SXin Li 0.681792830507429, 14*412f47f9SXin Li 1, 15*412f47f9SXin Li 1.378414230005442, 16*412f47f9SXin Li 1.8284271247461903, 17*412f47f9SXin Li 2.363585661014858, 18*412f47f9SXin Li 3, 19*412f47f9SXin Li 3.756828460010884, 20*412f47f9SXin Li 4.656854249492381, 21*412f47f9SXin Li 5.727171322029716, 22*412f47f9SXin Li 7, 23*412f47f9SXin Li 8.513656920021768, 24*412f47f9SXin Li 10.313708498984761, 25*412f47f9SXin Li 12.454342644059432, 26*412f47f9SXin Li 15, 27*412f47f9SXin Li 18.027313840043536, 28*412f47f9SXin Li 21.627416997969522, 29*412f47f9SXin Li 25.908685288118864, 30*412f47f9SXin Li 31|]; 31*412f47f9SXin Li 32*412f47f9SXin Lia = bounds[itv]; 33*412f47f9SXin Lib = bounds[itv + 1]; 34*412f47f9SXin Li 35*412f47f9SXin Lif = proc(y) { 36*412f47f9SXin Li t = y + a; 37*412f47f9SXin Li return erfc(t) * exp(t*t); 38*412f47f9SXin Li}; 39*412f47f9SXin Li 40*412f47f9SXin Lipoly = fpminimax(f(x), deg, [|double ...|], [0;b-a]); 41*412f47f9SXin Li 42*412f47f9SXin Lidisplay = hexadecimal; 43*412f47f9SXin Liprint("rel error:", accurateinfnorm(1-poly(x)/f(x), [a;b], 30)); 44*412f47f9SXin Liprint("in [",a,b,"]"); 45*412f47f9SXin Liprint("coeffs:"); 46*412f47f9SXin Lifor i from 0 to deg do coeff(poly, i); 47