// polynomial for approximating log2(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 = 11; // poly degree
// |log2(1+x)| > 0x1p-4 outside the interval
a = -0x1.5b51p-5;
b =  0x1.6ab2p-5;

ln2 = evaluate(log(2),0);
invln2hi = double(1/ln2 + 0x1p21) - 0x1p21; // round away last 21 bits
invln2lo = double(1/ln2 - invln2hi);

// find log2(1+x)/x polynomial with minimal relative error
// (minimal relative error polynomial for log2(1+x) is the same * x)
deg = deg-1; // because of /x

// f = log(1+x)/x; using taylor series
f = 0;
for i from 0 to 60 do { f = f + (-x)^i/(i+1); };
f = f/ln2;

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

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

display = hexadecimal;
print("invln2hi:", invln2hi);
print("invln2lo:", invln2lo);
print("rel error:", accurateinfnorm(1-poly(x)/f(x), [a;b], 30));
print("in [",a,b,"]");
print("coeffs:");
for i from 0 to deg do coeff(poly,i);
