// polynomial for approximating log(1+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 = 6; // poly degree
// interval ~= 1/(2*N), where N is the table entries
a = -0x1.fp-9;
b =  0x1.fp-9;

// find log(1+x) polynomial with minimal absolute error
f = log(1+x);

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

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

display = hexadecimal;
print("abs error:", accurateinfnorm(f(x)-poly(x), [a;b], 30));
// relative error computation fails if f(0)==0
// g = f(x)/x = log(1+x)/x; using taylor series
g = 0;
for i from 0 to 60 do { g = g + (-x)^i/(i+1); };
print("rel error:", accurateinfnorm(1-poly(x)/x/g(x), [a;b], 30));
print("in [",a,b,"]");
print("coeffs:");
for i from 0 to deg do coeff(poly,i);
