// polynomial for approximating e^x
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

deg = 5; // poly degree
N = 128; // table entries
b = log(2)/(2*N);  // interval
b = b + b*0x1p-16; // increase interval for non-nearest rounding (TOINT_NARROW)
a = -b;

// find polynomial with minimal abs error

// return p that minimizes |exp(x) - poly(x) - x^d*p(x)|
approx = proc(poly,d) {
  return remez(exp(x)-poly(x), deg-d, [a;b], x^d, 1e-10);
};

// first 2 coeffs are fixed, iteratively find optimal double prec coeffs
poly = 1 + x;
for i from 2 to deg do {
  p = roundcoefficients(approx(poly,i), [|D ...|]);
  poly = poly + x^i*coeff(p,0);
};

display = hexadecimal;
print("rel error:", accurateinfnorm(1-poly(x)/exp(x), [a;b], 30));
print("abs error:", accurateinfnorm(exp(x)-poly(x), [a;b], 30));
print("in [",a,b,"]");
// double interval error for non-nearest rounding
print("rel2 error:", accurateinfnorm(1-poly(x)/exp(x), [2*a;2*b], 30));
print("abs2 error:", accurateinfnorm(exp(x)-poly(x), [2*a;2*b], 30));
print("in [",2*a,2*b,"]");
print("coeffs:");
for i from 0 to deg do coeff(poly,i);
