xref: /aosp_15_r20/external/XNNPACK/src/math/exp.sollya (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
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("***IEEE FP32***");
8print("log2(e) =", round(log2(exp(1)), single, RN));
9minus_ln2_hi = round(-log(2), single, RN);
10minus_ln2_lo = round(-log(2) - minus_ln2_hi, single, RN);
11print("-log(2):hi =", minus_ln2_hi);
12print("-log(2):lo =", minus_ln2_lo);
13
14lb = round(-log(2)/2, single, RN);
15ub = round(log(2)/2, single, RN);
16print("-log(2)/2 = ", lb);
17print("+log(2)/2 =", ub);
18P = fpminimax(exp(x), [|1,2,3,4,5|], [|SG...|], [lb; ub], relative, 1);
19print("Degree-5 P[exp(x)] with 1 constraint on [-log(2)/2, log(2)/2] =", horner(P));
20print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU));
21
22lb = round(-log(2)/2, single, RN);
23ub = round(log(2)/2, single, RN);
24print("-log(2)/2 = ", lb);
25print("+log(2)/2 =", ub);
26P = fpminimax(exp(x), [|2,3,4,5|], [|SG...|], [lb; ub], relative, 1+x);
27print("Degree-5 P[exp(x)] with 1+x constraint on [-log(2)/2, log(2)/2] =", horner(P));
28print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU));
29
30lb = round(-log(2)/8, single, RN);
31ub = round(log(2)/8, single, RN);
32print("-log(2)/8 =", lb);
33print("+log(2)/8 =", ub);
34P = fpminimax(exp(x), [|2,3,4|], [|SG...|], [lb; ub], relative, 1+x);
35print("Degree-4 P[exp(x)] with 1+x constraint on [-log(2)/8, log(2)/8] =", horner(P));
36print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU));
37
38lb = round(-log(2)/16, single, RN);
39ub = round(log(2)/16, single, RN);
40print("-log(2)/16 =", lb);
41print("+log(2)/16 =", ub);
42P = fpminimax(exp(x), [|1,2,3,4|], [|SG...|], [lb; ub], relative, 1);
43print("Degree-4 P[exp(x)] with 1 constraint on [-log(2)/16, log(2)/16] =", horner(P));
44print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU));
45
46lb = round(-log(2)/16, single, RN);
47ub = round(log(2)/16, single, RN);
48print("-log(2)/16 =", lb);
49print("+log(2)/16 =", ub);
50P = fpminimax(exp(x), [|2,3,4|], [|SG...|], [lb; ub], relative, 1+x);
51print("Degree-4 P[exp(x)] with 1+x constraint on [-log(2)/16, log(2)/16] =", horner(P));
52print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU));
53
54lb = round(-log(2)/16, single, RN);
55ub = round(log(2)/16, single, RN);
56print("-log(2)/16 =", lb);
57print("+log(2)/16 =", ub);
58P = fpminimax(exp(x), [|1,2,3|], [|SG...|], [lb; ub], relative, 1);
59print("Degree-3 P[exp(x)] with 1 constraint on [-log(2)/16, log(2)/16] =", horner(P));
60print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU));
61
62lb = round(-log(2)/16, single, RN);
63ub = round(log(2)/16, single, RN);
64print("-log(2)/16 =", lb);
65print("+log(2)/16 =", ub);
66P = fpminimax(exp(x), [|2,3|], [|SG...|], [lb; ub], relative, 1+x);
67print("Degree-3 P[exp(x)] with 1+x constraint on [-log(2)/16, log(2)/16] =", horner(P));
68print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU));
69
70lb = round(-log(2)/32, single, RN);
71ub = round(log(2)/32, single, RN);
72print("-log(2)/32 =", lb);
73print("+log(2)/32 =", ub);
74P = fpminimax(exp(x), [|2,3|], [|SG...|], [lb; ub], relative, 1+x);
75print("Degree-3 P[exp(x)] with 1+x constraint on [-log(2)/32, log(2)/32] =", horner(P));
76print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU));
77
78lb = round(-log(2)/64, single, RN);
79ub = round(log(2)/64, single, RN);
80print("-log(2)/64 =", lb);
81print("+log(2)/64 =", ub);
82P = fpminimax(exp(x), [|1,2|], [|SG...|], [lb; ub], relative, 1);
83print("Degree-2 P[exp(x)] with 1+x constraint on [-log(2)/64, log(2)/64] =", horner(P));
84print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU));
85
86lb = round(-log(2)/128, single, RN);
87ub = round(log(2)/128, single, RN);
88print("-log(2)/128 =", lb);
89print("+log(2)/128 =", ub);
90P = fpminimax(exp(x), [|1,2|], [|SG...|], [lb; ub], relative, 1);
91print("Degree-2 P[exp(x)] with 1 constraint on [-log(2)/128, log(2)/128] =", horner(P));
92print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU));
93
94lb = round(-log(2)/128, single, RN);
95ub = round(log(2)/128, single, RN);
96print("-log(2)/128 =", lb);
97print("+log(2)/128 =", ub);
98P = fpminimax(exp(x), [|2|], [|SG...|], [lb; ub], relative, 1+x);
99print("Degree-2 P[exp(x)] with 1+x constraint on [-log(2)/128, log(2)/128] =", horner(P));
100print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU));
101
102lb = round(-log(2)/2048, single, RN);
103ub = round(log(2)/2048, single, RN);
104print("-log(2)/2048 =", lb);
105print("+log(2)/2048 =", ub);
106P = fpminimax(exp(x), [|0,1|], [|SG...|], [lb; ub], relative);
107print("Degree-1 P[exp(x)] with 1 constraint on [-log(2)/2048, log(2)/2048] =", horner(P));
108print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), single, RU));
109
110print("***IEEE FP16***");
111print("log2(e) =", round(log2(exp(1)), halfprecision, RN));
112minus_ln2_hi = round(-log(2), halfprecision, RN);
113minus_ln2_lo = round(-log(2) - minus_ln2_hi, halfprecision, RN);
114print("-log(2):hi =", minus_ln2_hi);
115print("-log(2):lo =", minus_ln2_lo);
116
117lb = round(-log(2)/2, halfprecision, RN);
118ub = round(log(2)/2, halfprecision, RN);
119print("-log(2)/2 = ", lb);
120print("+log(2)/2 =", ub);
121P = fpminimax(exp(x), [|1,2|], [|HP...|], [lb; ub], relative, 1);
122print("Degree-2 P[exp(x)] with 1 constraint on [-log(2)/2, log(2)/2] =", horner(P));
123print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), halfprecision, RU));
124
125lb = round(-log(2)/2, halfprecision, RN);
126ub = round(log(2)/2, halfprecision, RN);
127print("-log(2)/2 = ", lb);
128print("+log(2)/2 =", ub);
129P = fpminimax(exp(x), [|1,2,3|], [|HP...|], [lb; ub], relative, 1);
130print("Degree-3 P[exp(x)] with 1 constraint on [-log(2)/2, log(2)/2] =", horner(P));
131print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), halfprecision, RU));
132
133lb = round(-log(2)/2, single, RN);
134ub = round(log(2)/2, single, RN);
135print("-log(2)/2 = ", lb);
136print("+log(2)/2 =", ub);
137P = fpminimax(exp(x), [|1,2|], [|SG...|], [lb; ub], relative, 1);
138print("Degree-2 P[exp(x)] with 1 constraint on [-log(2)/2, log(2)/2] =", horner(P));
139print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), halfprecision, RU));
140
141lb = round(-log(2)/2, single, RN);
142ub = round(log(2)/2, single, RN);
143print("-log(2)/2 = ", lb);
144print("+log(2)/2 =", ub);
145P = fpminimax(exp(x), [|1,2,3|], [|SG...|], [lb; ub], relative, 1);
146print("Degree-3 P[exp(x)] with 1 constraint on [-log(2)/2, log(2)/2] =", horner(P));
147print("relative error =", round(dirtyinfnorm(P / exp(x) - 1, [lb; ub]), halfprecision, RU));
148
149