1// Copyright 2019 Google LLC 2// 3// This source code is licensed under the BSD-style license found in the 4// LICENSE file in the root directory of this source tree. 5 6display=hexadecimal !; 7print("log2(e) =", round(log2(exp(1)), single, RN)); 8minus_ln2_hi = round(-log(2), single, RN); 9minus_ln2_lo = round(-log(2) - minus_ln2_hi, single, RN); 10print("-log(2):hi =", minus_ln2_hi); 11print("-log(2):lo =", minus_ln2_lo); 12 13print("log2(e) * 8 =", round(log2(exp(1)) * 8, single, RN)); 14minus_ln2_o8_hi = round(-log(2)/8, single, RN); 15minus_ln2_o8_lo = round(-log(2)/8 - minus_ln2_o8_hi, single, RN); 16print("-log(2):hi / 8 =", minus_ln2_o8_hi); 17print("-log(2):lo / 8 =", minus_ln2_o8_lo); 18 19lb = round(-log(2)/2, single, RN); 20ub = round(log(2)/2, single, RN); 21print("-log(2)/2 = ", lb); 22print("+log(2)/2 =", ub); 23P = fpminimax(exp(x), [|1,2,3,4,5|], [|SG...|], [lb; ub], relative, 1); 24print("Degree-5 P[exp(x)] with 1 constraint on [-log(2)/2, log(2)/2] =", horner(P)); 25print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU)); 26 27lb = round(-log(2)/2, single, RN); 28ub = round(log(2)/2, single, RN); 29print("-log(2)/2 = ", lb); 30print("+log(2)/2 =", ub); 31P = fpminimax(exp(x), [|2,3,4,5|], [|SG...|], [lb; ub], relative, 1+x); 32print("Degree-5 P[exp(x)] with 1+x constraint on [-log(2)/2, log(2)/2] =", horner(P)); 33print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU)); 34 35lb = round(-log(2)/8, single, RN); 36ub = round(log(2)/8, single, RN); 37print("-log(2)/8 =", lb); 38print("+log(2)/8 =", ub); 39P = fpminimax(exp(x), [|2,3,4|], [|SG...|], [lb; ub], relative, 1+x); 40print("Degree-4 P[exp(x)] with 1+x constraint on [-log(2)/8, log(2)/8] =", horner(P)); 41print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU)); 42 43lb = round(-log(2)/16, single, RN); 44ub = round(log(2)/16, single, RN); 45print("-log(2)/16 =", lb); 46print("+log(2)/16 =", ub); 47P = fpminimax(exp(x), [|1,2,3,4|], [|SG...|], [lb; ub], relative, 1); 48print("Degree-4 P[exp(x)] with 1 constraint on [-log(2)/16, log(2)/16] =", horner(P)); 49print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU)); 50 51lb = round(-log(2)/16, single, RN); 52ub = round(log(2)/16, single, RN); 53print("-log(2)/16 =", lb); 54print("+log(2)/16 =", ub); 55P = fpminimax(exp(x), [|2,3,4|], [|SG...|], [lb; ub], relative, 1+x); 56print("Degree-4 P[exp(x)] with 1+x constraint on [-log(2)/16, log(2)/16] =", horner(P)); 57print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU)); 58 59lb = round(-log(2)/16, single, RN); 60ub = round(log(2)/16, single, RN); 61print("-log(2)/16 =", lb); 62print("+log(2)/16 =", ub); 63P = fpminimax(exp(x), [|1,2,3|], [|SG...|], [lb; ub], relative, 1); 64print("Degree-3 P[exp(x)] with 1 constraint on [-log(2)/16, log(2)/16] =", horner(P)); 65print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU)); 66 67lb = round(-log(2)/16, single, RN); 68ub = round(log(2)/16, single, RN); 69print("-log(2)/16 =", lb); 70print("+log(2)/16 =", ub); 71P = fpminimax(exp(x), [|2,3|], [|SG...|], [lb; ub], relative, 1+x); 72print("Degree-3 P[exp(x)] with 1+x constraint on [-log(2)/16, log(2)/16] =", horner(P)); 73print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU)); 74 75lb = round(-log(2)/32, single, RN); 76ub = round(log(2)/32, single, RN); 77print("-log(2)/32 =", lb); 78print("+log(2)/32 =", ub); 79P = fpminimax(exp(x), [|2,3|], [|SG...|], [lb; ub], relative, 1+x); 80print("Degree-3 P[exp(x)] with 1+x constraint on [-log(2)/32, log(2)/32] =", horner(P)); 81print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU)); 82 83lb = round(-log(2)/64, single, RN); 84ub = round(log(2)/64, single, RN); 85print("-log(2)/64 =", lb); 86print("+log(2)/64 =", ub); 87P = fpminimax(exp(x), [|1,2|], [|SG...|], [lb; ub], relative, 1); 88print("Degree-2 P[exp(x)] with 1+x constraint on [-log(2)/64, log(2)/64] =", horner(P)); 89print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU)); 90 91lb = round(-log(2)/128, single, RN); 92ub = round(log(2)/128, single, RN); 93print("-log(2)/128 =", lb); 94print("+log(2)/128 =", ub); 95P = fpminimax(exp(x), [|1,2|], [|SG...|], [lb; ub], relative, 1); 96print("Degree-2 P[exp(x)] with 1 constraint on [-log(2)/128, log(2)/128] =", horner(P)); 97print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU)); 98 99lb = round(-log(2)/128, single, RN); 100ub = round(log(2)/128, single, RN); 101print("-log(2)/128 =", lb); 102print("+log(2)/128 =", ub); 103P = fpminimax(exp(x), [|2|], [|SG...|], [lb; ub], relative, 1+x); 104print("Degree-2 P[exp(x)] with 1+x constraint on [-log(2)/128, log(2)/128] =", horner(P)); 105print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU)); 106 107lb = round(-log(2)/2048, single, RN); 108ub = round(log(2)/2048, single, RN); 109print("-log(2)/2048 =", lb); 110print("+log(2)/2048 =", ub); 111P = fpminimax(exp(x), [|0,1|], [|SG...|], [lb; ub], relative); 112print("Degree-1 P[exp(x)] with 1 constraint on [-log(2)/2048, log(2)/2048] =", horner(P)); 113print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU)); 114