xref: /aosp_15_r20/external/XNNPACK/src/math/expm1.sollya (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1*4bdc9457SAndroid Build Coastguard Worker// Copyright 2020 Google LLC
2*4bdc9457SAndroid Build Coastguard Worker//
3*4bdc9457SAndroid Build Coastguard Worker// This source code is licensed under the BSD-style license found in the
4*4bdc9457SAndroid Build Coastguard Worker// LICENSE file in the root directory of this source tree.
5*4bdc9457SAndroid Build Coastguard Worker
6*4bdc9457SAndroid Build Coastguard Workerdisplay=hexadecimal !;
7*4bdc9457SAndroid Build Coastguard Workerprint("***IEEE FP32***");
8*4bdc9457SAndroid Build Coastguard Workerprint("log2(e) =", round(log2(exp(1)), single, RN));
9*4bdc9457SAndroid Build Coastguard Workerminus_ln2_hi = round(-log(2), single, RN);
10*4bdc9457SAndroid Build Coastguard Workerminus_ln2_lo = round(-log(2) - minus_ln2_hi, single, RN);
11*4bdc9457SAndroid Build Coastguard Workerprint("-log(2):hi =", minus_ln2_hi);
12*4bdc9457SAndroid Build Coastguard Workerprint("-log(2):lo =", minus_ln2_lo);
13*4bdc9457SAndroid Build Coastguard Worker
14*4bdc9457SAndroid Build Coastguard Workerprint("log2(e) * 8 =", round(log2(exp(1)) * 8, single, RN));
15*4bdc9457SAndroid Build Coastguard Workerminus_ln2_o8_hi = round(-log(2)/8, single, RN);
16*4bdc9457SAndroid Build Coastguard Workerminus_ln2_o8_lo = round(-log(2)/8 - minus_ln2_o8_hi, single, RN);
17*4bdc9457SAndroid Build Coastguard Workerprint("-log(2):hi / 8 =", minus_ln2_o8_hi);
18*4bdc9457SAndroid Build Coastguard Workerprint("-log(2):lo / 8 =", minus_ln2_o8_lo);
19*4bdc9457SAndroid Build Coastguard Worker
20*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/2, single, RN);
21*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/2, single, RN);
22*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|1,2,3,4,5|], [|SG...|], [lb; ub], relative, 0);
23*4bdc9457SAndroid Build Coastguard Workerprint("Degree-5 P[expm1(x)] with 0 constraint on [-log(2)/2, log(2)/2] =", horner(P));
24*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/2 = ", lb);
25*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/2 =", ub);
26*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
27*4bdc9457SAndroid Build Coastguard Worker
28*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/2, single, RN);
29*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/2, single, RN);
30*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|1,2,3,4,5,6|], [|SG...|], [lb; ub], relative, 0);
31*4bdc9457SAndroid Build Coastguard Workerprint("Degree-6 P[expm1(x)] with 0 constraint on [-log(2)/2, log(2)/2] =", horner(P));
32*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/2 = ", lb);
33*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/2 =", ub);
34*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
35*4bdc9457SAndroid Build Coastguard Worker
36*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/2, single, RN);
37*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/2, single, RN);
38*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|2,3,4,5|], [|SG...|], [lb; ub], relative, 0+x);
39*4bdc9457SAndroid Build Coastguard Workerprint("Degree-5 P[expm1(x)] with 0+x constraint on [-log(2)/2, log(2)/2] =", horner(P));
40*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/2 = ", lb);
41*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/2 =", ub);
42*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
43*4bdc9457SAndroid Build Coastguard Worker
44*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/2, single, RN);
45*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/2, single, RN);
46*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|2,3,4,5,6|], [|SG...|], [lb; ub], relative, 0+x);
47*4bdc9457SAndroid Build Coastguard Workerprint("Degree-6 P[expm1(x)] with 0+x constraint on [-log(2)/2, log(2)/2] =", horner(P));
48*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/2 = ", lb);
49*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/2 =", ub);
50*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
51*4bdc9457SAndroid Build Coastguard Worker
52*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/8, single, RN);
53*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/8, single, RN);
54*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|2,3,4|], [|SG...|], [lb; ub], relative, 0+x);
55*4bdc9457SAndroid Build Coastguard Workerprint("Degree-4 P[expm1(x)] with 0+x constraint on [-log(2)/8, log(2)/8] =", horner(P));
56*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/8 =", lb);
57*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/8 =", ub);
58*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
59*4bdc9457SAndroid Build Coastguard Worker
60*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/16, single, RN);
61*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/16, single, RN);
62*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|1,2,3,4|], [|SG...|], [lb; ub], relative, 0);
63*4bdc9457SAndroid Build Coastguard Workerprint("Degree-4 P[expm1(x)] with 0 constraint on [-log(2)/16, log(2)/16] =", horner(P));
64*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/16 =", lb);
65*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/16 =", ub);
66*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
67*4bdc9457SAndroid Build Coastguard Worker
68*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/16, single, RN);
69*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/16, single, RN);
70*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|2,3,4|], [|SG...|], [lb; ub], relative, 0+x);
71*4bdc9457SAndroid Build Coastguard Workerprint("Degree-4 P[expm1(x)] with 0+x constraint on [-log(2)/16, log(2)/16] =", horner(P));
72*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/16 =", lb);
73*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/16 =", ub);
74*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
75*4bdc9457SAndroid Build Coastguard Worker
76*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/16, single, RN);
77*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/16, single, RN);
78*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|1,2,3|], [|SG...|], [lb; ub], relative, 0);
79*4bdc9457SAndroid Build Coastguard Workerprint("Degree-3 P[expm1(x)] with 0 constraint on [-log(2)/16, log(2)/16] =", horner(P));
80*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/16 =", lb);
81*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/16 =", ub);
82*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
83*4bdc9457SAndroid Build Coastguard Worker
84*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/16, single, RN);
85*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/16, single, RN);
86*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|2,3|], [|SG...|], [lb; ub], relative, 0+x);
87*4bdc9457SAndroid Build Coastguard Workerprint("Degree-3 P[expm1(x)] with 0+x constraint on [-log(2)/16, log(2)/16] =", horner(P));
88*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/16 =", lb);
89*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/16 =", ub);
90*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
91*4bdc9457SAndroid Build Coastguard Worker
92*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/32, single, RN);
93*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/32, single, RN);
94*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|2,3,4|], [|SG...|], [lb; ub], relative, 0+x);
95*4bdc9457SAndroid Build Coastguard Workerprint("Degree-4 P[expm1(x)] with 0+x constraint on [-log(2)/32, log(2)/32] =", horner(P));
96*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/32 =", lb);
97*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/32 =", ub);
98*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
99*4bdc9457SAndroid Build Coastguard Worker
100*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/32, single, RN);
101*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/32, single, RN);
102*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|2,3|], [|SG...|], [lb; ub], relative, 0+x);
103*4bdc9457SAndroid Build Coastguard Workerprint("Degree-3 P[expm1(x)] with 0+x constraint on [-log(2)/32, log(2)/32] =", horner(P));
104*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/32 =", lb);
105*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/32 =", ub);
106*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
107*4bdc9457SAndroid Build Coastguard Worker
108*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/64, single, RN);
109*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/64, single, RN);
110*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|2,3|], [|SG...|], [lb; ub], relative, 0+x);
111*4bdc9457SAndroid Build Coastguard Workerprint("Degree-3 P[expm1(x)] with 0+x constraint on [-log(2)/64, log(2)/64] =", horner(P));
112*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/64 =", lb);
113*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/64 =", ub);
114*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
115*4bdc9457SAndroid Build Coastguard Worker
116*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/64, single, RN);
117*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/64, single, RN);
118*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|1,2|], [|SG...|], [lb; ub], relative, 0);
119*4bdc9457SAndroid Build Coastguard Workerprint("Degree-2 P[expm1(x)] with 0 constraint on [-log(2)/64, log(2)/64] =", horner(P));
120*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/64 =", lb);
121*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/64 =", ub);
122*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
123*4bdc9457SAndroid Build Coastguard Worker
124*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/128, single, RN);
125*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/128, single, RN);
126*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|2,3|], [|SG...|], [lb; ub], relative, 0+x);
127*4bdc9457SAndroid Build Coastguard Workerprint("Degree-3 P[expm1(x)] with 0+x constraint on [-log(2)/128, log(2)/128] =", horner(P));
128*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/128 =", lb);
129*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/128 =", ub);
130*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
131*4bdc9457SAndroid Build Coastguard Worker
132*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/128, single, RN);
133*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/128, single, RN);
134*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|1,2|], [|SG...|], [lb; ub], relative, 0);
135*4bdc9457SAndroid Build Coastguard Workerprint("Degree-2 P[expm1(x)] with 0 constraint on [-log(2)/128, log(2)/128] =", horner(P));
136*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/128 =", lb);
137*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/128 =", ub);
138*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
139*4bdc9457SAndroid Build Coastguard Worker
140*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/256, single, RN);
141*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/256, single, RN);
142*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|1,2|], [|SG...|], [lb; ub], relative, 0);
143*4bdc9457SAndroid Build Coastguard Workerprint("Degree-3 P[expm1(x)] with 0 constraint on [-log(2)/256, log(2)/256] =", horner(P));
144*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/256 =", lb);
145*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/256 =", ub);
146*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
147*4bdc9457SAndroid Build Coastguard Worker
148*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/512, single, RN);
149*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/512, single, RN);
150*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|1,2|], [|SG...|], [lb; ub], relative, 0);
151*4bdc9457SAndroid Build Coastguard Workerprint("Degree-3 P[expm1(x)] with 0 constraint on [-log(2)/512, log(2)/512] =", horner(P));
152*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/512 =", lb);
153*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/512 =", ub);
154*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
155*4bdc9457SAndroid Build Coastguard Worker
156*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/512, single, RN);
157*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/512, single, RN);
158*4bdc9457SAndroid Build Coastguard Worker// fpminimax fails, manually find the minimum in the vicinity of degree-3 polynomial coefficients
159*4bdc9457SAndroid Build Coastguard WorkerP = x * (1 + x * 0x1.FFFFFAp-2);
160*4bdc9457SAndroid Build Coastguard Workerprint("Degree-3 P[expm1(x)] with 0+x constraint on [-log(2)/512, log(2)/512] =", horner(P));
161*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/512 =", lb);
162*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/512 =", ub);
163*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
164*4bdc9457SAndroid Build Coastguard Worker
165*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/1024, single, RN);
166*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/1024, single, RN);
167*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|1,2|], [|SG...|], [lb; ub], relative, 0);
168*4bdc9457SAndroid Build Coastguard Workerprint("Degree-3 P[expm1(x)] with 0 constraint on [-log(2)/1024, log(2)/1024] =", horner(P));
169*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/1024 =", lb);
170*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/1024 =", ub);
171*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
172*4bdc9457SAndroid Build Coastguard Worker
173*4bdc9457SAndroid Build Coastguard Workerprint("***IEEE FP16***");
174*4bdc9457SAndroid Build Coastguard Workerprint("log2(e) =", round(log2(exp(1)), halfprecision, RN));
175*4bdc9457SAndroid Build Coastguard Workerminus_ln2_hi = round(-log(2), halfprecision, RN);
176*4bdc9457SAndroid Build Coastguard Workerminus_ln2_lo = round(-log(2) - minus_ln2_hi, halfprecision, RN);
177*4bdc9457SAndroid Build Coastguard Workerprint("-log(2):hi =", minus_ln2_hi);
178*4bdc9457SAndroid Build Coastguard Workerprint("-log(2):lo =", minus_ln2_lo);
179*4bdc9457SAndroid Build Coastguard Worker
180*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/2, halfprecision, RN);
181*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/2, halfprecision, RN);
182*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|1,2,3|], [|HP...|], [lb; ub], relative, 0);
183*4bdc9457SAndroid Build Coastguard Workerprint("Degree-3 P[expm1(x)] with 0 constraint on [-log(2)/2, log(2)/2] =", horner(P));
184*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/2 = ", lb);
185*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/2 =", ub);
186*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), halfprecision, RU));
187*4bdc9457SAndroid Build Coastguard Worker
188*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/2, halfprecision, RN);
189*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/2, halfprecision, RN);
190*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|2,3|], [|HP...|], [lb; ub], relative, 0+x);
191*4bdc9457SAndroid Build Coastguard Workerprint("Degree-3 P[expm1(x)] with 0+x constraint on [-log(2)/2, log(2)/2] =", horner(P));
192*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/2 = ", lb);
193*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/2 =", ub);
194*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), halfprecision, RU));
195*4bdc9457SAndroid Build Coastguard Worker
196*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/2, single, RN);
197*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/2, single, RN);
198*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|1,2,3|], [|SG...|], [lb; ub], relative, 0);
199*4bdc9457SAndroid Build Coastguard Workerprint("Degree-3 P[expm1(x)] with 0 constraint on [-log(2)/2, log(2)/2] =", horner(P));
200*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/2 = ", lb);
201*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/2 =", ub);
202*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
203*4bdc9457SAndroid Build Coastguard Worker
204*4bdc9457SAndroid Build Coastguard Workerlb = round(-log(2)/2, single, RN);
205*4bdc9457SAndroid Build Coastguard Workerub = round(log(2)/2, single, RN);
206*4bdc9457SAndroid Build Coastguard WorkerP = fpminimax(expm1(x), [|1,2|], [|SG...|], [lb; ub], relative, 0);
207*4bdc9457SAndroid Build Coastguard Workerprint("Degree-2 P[expm1(x)] with 0 constraint on [-log(2)/2, log(2)/2] =", horner(P));
208*4bdc9457SAndroid Build Coastguard Workerprint("  -log(2)/2 = ", lb);
209*4bdc9457SAndroid Build Coastguard Workerprint("  +log(2)/2 =", ub);
210*4bdc9457SAndroid Build Coastguard Workerprint("  relative error =", round(dirtyinfnorm(P / expm1(x) - 1, [lb; ub]), single, RU));
211