blob: e18e45e020228d95d77e779f5f2a8d9e9e54cd6c [file] [log] [blame]
Charles L. Dorian04217ee2010-02-05 00:41:30 -08001// Copyright 2009 The Go Authors. All rights reserved.
Russ Cox88daac72008-11-19 16:14:31 -08002// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Russ Cox3b864e42009-08-12 13:18:37 -07005package math_test
Russ Cox88daac72008-11-19 16:14:31 -08006
7import (
Robert Griesemera3d10452009-12-15 15:35:38 -08008 "fmt"
9 . "math"
10 "testing"
Russ Cox88daac72008-11-19 16:14:31 -080011)
12
Russ Cox2c5ec1e2009-10-06 19:40:35 -070013var vf = []float64{
14 4.9790119248836735e+00,
15 7.7388724745781045e+00,
16 -2.7688005719200159e-01,
17 -5.0106036182710749e+00,
18 9.6362937071984173e+00,
19 2.9263772392439646e+00,
20 5.2290834314593066e+00,
21 2.7279399104360102e+00,
22 1.8253080916808550e+00,
23 -8.6859247685756013e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -080024}
Robert Griesemer541b67d2011-12-16 15:43:06 -080025
Charles L. Doriana0690b62010-02-01 22:21:40 -080026// The expected results below were computed by the high precision calculators
27// at http://keisan.casio.com/. More exact input values (array vf[], above)
28// were obtained by printing them with "%.26f". The answers were calculated
29// to 26 digits (by using the "Digit number" drop-down control of each
Charles L. Dorian22f84c52010-04-26 22:44:39 -070030// calculator).
Charles L. Dorianfd1db672010-01-08 14:12:10 -080031var acos = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -080032 1.0496193546107222142571536e+00,
33 6.8584012813664425171660692e-01,
34 1.5984878714577160325521819e+00,
35 2.0956199361475859327461799e+00,
36 2.7053008467824138592616927e-01,
37 1.2738121680361776018155625e+00,
38 1.0205369421140629186287407e+00,
39 1.2945003481781246062157835e+00,
40 1.3872364345374451433846657e+00,
41 2.6231510803970463967294145e+00,
42}
43var acosh = []float64{
44 2.4743347004159012494457618e+00,
45 2.8576385344292769649802701e+00,
46 7.2796961502981066190593175e-01,
47 2.4796794418831451156471977e+00,
48 3.0552020742306061857212962e+00,
49 2.044238592688586588942468e+00,
50 2.5158701513104513595766636e+00,
51 1.99050839282411638174299e+00,
52 1.6988625798424034227205445e+00,
53 2.9611454842470387925531875e+00,
Charles L. Dorianfd1db672010-01-08 14:12:10 -080054}
Russ Cox2c5ec1e2009-10-06 19:40:35 -070055var asin = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -080056 5.2117697218417440497416805e-01,
57 8.8495619865825236751471477e-01,
58 -02.769154466281941332086016e-02,
59 -5.2482360935268931351485822e-01,
60 1.3002662421166552333051524e+00,
61 2.9698415875871901741575922e-01,
62 5.5025938468083370060258102e-01,
63 2.7629597861677201301553823e-01,
64 1.83559892257451475846656e-01,
65 -1.0523547536021497774980928e+00,
66}
67var asinh = []float64{
68 2.3083139124923523427628243e+00,
69 2.743551594301593620039021e+00,
70 -2.7345908534880091229413487e-01,
71 -2.3145157644718338650499085e+00,
72 2.9613652154015058521951083e+00,
73 1.7949041616585821933067568e+00,
74 2.3564032905983506405561554e+00,
75 1.7287118790768438878045346e+00,
76 1.3626658083714826013073193e+00,
77 -2.8581483626513914445234004e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -080078}
Russ Cox2c5ec1e2009-10-06 19:40:35 -070079var atan = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -080080 1.372590262129621651920085e+00,
81 1.442290609645298083020664e+00,
82 -2.7011324359471758245192595e-01,
83 -1.3738077684543379452781531e+00,
84 1.4673921193587666049154681e+00,
85 1.2415173565870168649117764e+00,
86 1.3818396865615168979966498e+00,
87 1.2194305844639670701091426e+00,
88 1.0696031952318783760193244e+00,
89 -1.4561721938838084990898679e+00,
90}
91var atanh = []float64{
92 5.4651163712251938116878204e-01,
93 1.0299474112843111224914709e+00,
94 -2.7695084420740135145234906e-02,
95 -5.5072096119207195480202529e-01,
96 1.9943940993171843235906642e+00,
97 3.01448604578089708203017e-01,
98 5.8033427206942188834370595e-01,
99 2.7987997499441511013958297e-01,
100 1.8459947964298794318714228e-01,
101 -1.3273186910532645867272502e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -0800102}
Charles L. Dorian072b5602010-02-05 14:55:19 -0800103var atan2 = []float64{
104 1.1088291730037004444527075e+00,
105 9.1218183188715804018797795e-01,
106 1.5984772603216203736068915e+00,
107 2.0352918654092086637227327e+00,
108 8.0391819139044720267356014e-01,
109 1.2861075249894661588866752e+00,
110 1.0889904479131695712182587e+00,
111 1.3044821793397925293797357e+00,
112 1.3902530903455392306872261e+00,
113 2.2859857424479142655411058e+00,
114}
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -0800115var cbrt = []float64{
116 1.7075799841925094446722675e+00,
117 1.9779982212970353936691498e+00,
118 -6.5177429017779910853339447e-01,
119 -1.7111838886544019873338113e+00,
120 2.1279920909827937423960472e+00,
121 1.4303536770460741452312367e+00,
122 1.7357021059106154902341052e+00,
123 1.3972633462554328350552916e+00,
124 1.2221149580905388454977636e+00,
125 -2.0556003730500069110343596e+00,
126}
Charles L. Dorian3c753412010-01-11 16:20:51 -0800127var ceil = []float64{
128 5.0000000000000000e+00,
129 8.0000000000000000e+00,
130 0.0000000000000000e+00,
131 -5.0000000000000000e+00,
132 1.0000000000000000e+01,
133 3.0000000000000000e+00,
134 6.0000000000000000e+00,
135 3.0000000000000000e+00,
136 2.0000000000000000e+00,
137 -8.0000000000000000e+00,
138}
Charles L. Doriana0690b62010-02-01 22:21:40 -0800139var copysign = []float64{
140 -4.9790119248836735e+00,
141 -7.7388724745781045e+00,
142 -2.7688005719200159e-01,
143 -5.0106036182710749e+00,
144 -9.6362937071984173e+00,
145 -2.9263772392439646e+00,
146 -5.2290834314593066e+00,
147 -2.7279399104360102e+00,
148 -1.8253080916808550e+00,
149 -8.6859247685756013e+00,
150}
151var cos = []float64{
152 2.634752140995199110787593e-01,
153 1.148551260848219865642039e-01,
154 9.6191297325640768154550453e-01,
155 2.938141150061714816890637e-01,
156 -9.777138189897924126294461e-01,
157 -9.7693041344303219127199518e-01,
158 4.940088096948647263961162e-01,
159 -9.1565869021018925545016502e-01,
160 -2.517729313893103197176091e-01,
161 -7.39241351595676573201918e-01,
162}
Robert Griesemer541b67d2011-12-16 15:43:06 -0800163
Charles L. Dorian377ac332011-11-04 15:35:59 -0400164// Results for 100000 * Pi + vf[i]
165var cosLarge = []float64{
166 2.634752141185559426744e-01,
167 1.14855126055543100712e-01,
168 9.61912973266488928113e-01,
169 2.9381411499556122552e-01,
170 -9.777138189880161924641e-01,
171 -9.76930413445147608049e-01,
172 4.940088097314976789841e-01,
173 -9.15658690217517835002e-01,
174 -2.51772931436786954751e-01,
175 -7.3924135157173099849e-01,
176}
Charles L. Doriana0690b62010-02-01 22:21:40 -0800177var cosh = []float64{
178 7.2668796942212842775517446e+01,
179 1.1479413465659254502011135e+03,
180 1.0385767908766418550935495e+00,
181 7.5000957789658051428857788e+01,
182 7.655246669605357888468613e+03,
183 9.3567491758321272072888257e+00,
184 9.331351599270605471131735e+01,
185 7.6833430994624643209296404e+00,
186 3.1829371625150718153881164e+00,
187 2.9595059261916188501640911e+03,
188}
189var erf = []float64{
190 5.1865354817738701906913566e-01,
191 7.2623875834137295116929844e-01,
192 -3.123458688281309990629839e-02,
193 -5.2143121110253302920437013e-01,
194 8.2704742671312902508629582e-01,
195 3.2101767558376376743993945e-01,
196 5.403990312223245516066252e-01,
197 3.0034702916738588551174831e-01,
198 2.0369924417882241241559589e-01,
199 -7.8069386968009226729944677e-01,
200}
201var erfc = []float64{
202 4.8134645182261298093086434e-01,
203 2.7376124165862704883070156e-01,
204 1.0312345868828130999062984e+00,
205 1.5214312111025330292043701e+00,
206 1.7295257328687097491370418e-01,
207 6.7898232441623623256006055e-01,
208 4.596009687776754483933748e-01,
209 6.9965297083261411448825169e-01,
210 7.9630075582117758758440411e-01,
211 1.7806938696800922672994468e+00,
212}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700213var exp = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800214 1.4533071302642137507696589e+02,
215 2.2958822575694449002537581e+03,
216 7.5814542574851666582042306e-01,
217 6.6668778421791005061482264e-03,
218 1.5310493273896033740861206e+04,
219 1.8659907517999328638667732e+01,
220 1.8662167355098714543942057e+02,
221 1.5301332413189378961665788e+01,
222 6.2047063430646876349125085e+00,
223 1.6894712385826521111610438e-04,
224}
225var expm1 = []float64{
226 5.105047796122957327384770212e-02,
227 8.046199708567344080562675439e-02,
228 -2.764970978891639815187418703e-03,
229 -4.8871434888875355394330300273e-02,
230 1.0115864277221467777117227494e-01,
231 2.969616407795910726014621657e-02,
232 5.368214487944892300914037972e-02,
233 2.765488851131274068067445335e-02,
234 1.842068661871398836913874273e-02,
235 -8.3193870863553801814961137573e-02,
Russ Coxbe2edb52009-03-03 08:39:12 -0800236}
Charles L. Dorianaee14342010-02-10 00:06:41 -0800237var exp2 = []float64{
238 3.1537839463286288034313104e+01,
239 2.1361549283756232296144849e+02,
240 8.2537402562185562902577219e-01,
241 3.1021158628740294833424229e-02,
242 7.9581744110252191462569661e+02,
243 7.6019905892596359262696423e+00,
244 3.7506882048388096973183084e+01,
245 6.6250893439173561733216375e+00,
246 3.5438267900243941544605339e+00,
247 2.4281533133513300984289196e-03,
248}
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700249var fabs = []float64{
250 4.9790119248836735e+00,
251 7.7388724745781045e+00,
252 2.7688005719200159e-01,
253 5.0106036182710749e+00,
254 9.6362937071984173e+00,
255 2.9263772392439646e+00,
256 5.2290834314593066e+00,
257 2.7279399104360102e+00,
258 1.8253080916808550e+00,
259 8.6859247685756013e+00,
260}
Charles L. Dorianc4653312010-02-09 13:33:12 -0800261var fdim = []float64{
262 4.9790119248836735e+00,
263 7.7388724745781045e+00,
264 0.0000000000000000e+00,
265 0.0000000000000000e+00,
266 9.6362937071984173e+00,
267 2.9263772392439646e+00,
268 5.2290834314593066e+00,
269 2.7279399104360102e+00,
270 1.8253080916808550e+00,
271 0.0000000000000000e+00,
272}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700273var floor = []float64{
274 4.0000000000000000e+00,
275 7.0000000000000000e+00,
276 -1.0000000000000000e+00,
277 -6.0000000000000000e+00,
278 9.0000000000000000e+00,
279 2.0000000000000000e+00,
280 5.0000000000000000e+00,
281 2.0000000000000000e+00,
282 1.0000000000000000e+00,
283 -9.0000000000000000e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -0800284}
Charles L. Dorian3c753412010-01-11 16:20:51 -0800285var fmod = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800286 4.197615023265299782906368e-02,
287 2.261127525421895434476482e+00,
288 3.231794108794261433104108e-02,
289 4.989396381728925078391512e+00,
290 3.637062928015826201999516e-01,
291 1.220868282268106064236690e+00,
292 4.770916568540693347699744e+00,
293 1.816180268691969246219742e+00,
294 8.734595415957246977711748e-01,
295 1.314075231424398637614104e+00,
Charles L. Dorian3c753412010-01-11 16:20:51 -0800296}
Charles L. Dorian04217ee2010-02-05 00:41:30 -0800297
298type fi struct {
299 f float64
300 i int
301}
302
303var frexp = []fi{
Robert Griesemer34788912010-10-22 10:06:33 -0700304 {6.2237649061045918750e-01, 3},
305 {9.6735905932226306250e-01, 3},
306 {-5.5376011438400318000e-01, -1},
307 {-6.2632545228388436250e-01, 3},
308 {6.02268356699901081250e-01, 4},
309 {7.3159430981099115000e-01, 2},
310 {6.5363542893241332500e-01, 3},
311 {6.8198497760900255000e-01, 2},
312 {9.1265404584042750000e-01, 1},
313 {-5.4287029803597508250e-01, 4},
Charles L. Dorian04217ee2010-02-05 00:41:30 -0800314}
Charles L. Dorian26f0c832010-03-19 15:29:22 -0700315var gamma = []float64{
316 2.3254348370739963835386613898e+01,
317 2.991153837155317076427529816e+03,
318 -4.561154336726758060575129109e+00,
319 7.719403468842639065959210984e-01,
320 1.6111876618855418534325755566e+05,
321 1.8706575145216421164173224946e+00,
322 3.4082787447257502836734201635e+01,
323 1.579733951448952054898583387e+00,
324 9.3834586598354592860187267089e-01,
325 -2.093995902923148389186189429e-05,
326}
Charles L. Dorian6b6c3992010-03-24 09:25:49 -0700327var j0 = []float64{
328 -1.8444682230601672018219338e-01,
329 2.27353668906331975435892e-01,
330 9.809259936157051116270273e-01,
331 -1.741170131426226587841181e-01,
332 -2.1389448451144143352039069e-01,
333 -2.340905848928038763337414e-01,
334 -1.0029099691890912094586326e-01,
335 -1.5466726714884328135358907e-01,
336 3.252650187653420388714693e-01,
337 -8.72218484409407250005360235e-03,
338}
Charles L. Dorian1ec91c82010-03-26 14:09:39 -0700339var j1 = []float64{
340 -3.251526395295203422162967e-01,
341 1.893581711430515718062564e-01,
342 -1.3711761352467242914491514e-01,
343 3.287486536269617297529617e-01,
344 1.3133899188830978473849215e-01,
345 3.660243417832986825301766e-01,
346 -3.4436769271848174665420672e-01,
347 4.329481396640773768835036e-01,
348 5.8181350531954794639333955e-01,
349 -2.7030574577733036112996607e-01,
350}
351var j2 = []float64{
352 5.3837518920137802565192769e-02,
353 -1.7841678003393207281244667e-01,
354 9.521746934916464142495821e-03,
355 4.28958355470987397983072e-02,
356 2.4115371837854494725492872e-01,
357 4.842458532394520316844449e-01,
358 -3.142145220618633390125946e-02,
359 4.720849184745124761189957e-01,
360 3.122312022520957042957497e-01,
361 7.096213118930231185707277e-02,
362}
363var jM3 = []float64{
364 -3.684042080996403091021151e-01,
365 2.8157665936340887268092661e-01,
366 4.401005480841948348343589e-04,
367 3.629926999056814081597135e-01,
368 3.123672198825455192489266e-02,
369 -2.958805510589623607540455e-01,
370 -3.2033177696533233403289416e-01,
371 -2.592737332129663376736604e-01,
372 -1.0241334641061485092351251e-01,
373 -2.3762660886100206491674503e-01,
374}
Charles L. Dorian78e918c2010-02-22 17:12:48 -0800375var lgamma = []fi{
Robert Griesemer34788912010-10-22 10:06:33 -0700376 {3.146492141244545774319734e+00, 1},
377 {8.003414490659126375852113e+00, 1},
378 {1.517575735509779707488106e+00, -1},
379 {-2.588480028182145853558748e-01, 1},
380 {1.1989897050205555002007985e+01, 1},
381 {6.262899811091257519386906e-01, 1},
382 {3.5287924899091566764846037e+00, 1},
383 {4.5725644770161182299423372e-01, 1},
384 {-6.363667087767961257654854e-02, 1},
385 {-1.077385130910300066425564e+01, -1},
Charles L. Dorian78e918c2010-02-22 17:12:48 -0800386}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700387var log = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800388 1.605231462693062999102599e+00,
389 2.0462560018708770653153909e+00,
390 -1.2841708730962657801275038e+00,
391 1.6115563905281545116286206e+00,
392 2.2655365644872016636317461e+00,
393 1.0737652208918379856272735e+00,
394 1.6542360106073546632707956e+00,
395 1.0035467127723465801264487e+00,
396 6.0174879014578057187016475e-01,
397 2.161703872847352815363655e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -0800398}
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -0800399var logb = []float64{
Charles L. Dorianb233ac82010-09-28 10:15:21 -0400400 2.0000000000000000e+00,
401 2.0000000000000000e+00,
402 -2.0000000000000000e+00,
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -0800403 2.0000000000000000e+00,
404 3.0000000000000000e+00,
Charles L. Dorianb233ac82010-09-28 10:15:21 -0400405 1.0000000000000000e+00,
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -0800406 2.0000000000000000e+00,
407 1.0000000000000000e+00,
Charles L. Dorianb233ac82010-09-28 10:15:21 -0400408 0.0000000000000000e+00,
409 3.0000000000000000e+00,
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -0800410}
Charles L. Dorian46206c52010-01-11 21:28:02 -0800411var log10 = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800412 6.9714316642508290997617083e-01,
413 8.886776901739320576279124e-01,
414 -5.5770832400658929815908236e-01,
415 6.998900476822994346229723e-01,
416 9.8391002850684232013281033e-01,
417 4.6633031029295153334285302e-01,
418 7.1842557117242328821552533e-01,
419 4.3583479968917773161304553e-01,
420 2.6133617905227038228626834e-01,
421 9.3881606348649405716214241e-01,
422}
423var log1p = []float64{
424 4.8590257759797794104158205e-02,
425 7.4540265965225865330849141e-02,
426 -2.7726407903942672823234024e-03,
427 -5.1404917651627649094953380e-02,
428 9.1998280672258624681335010e-02,
429 2.8843762576593352865894824e-02,
430 5.0969534581863707268992645e-02,
431 2.6913947602193238458458594e-02,
432 1.8088493239630770262045333e-02,
433 -9.0865245631588989681559268e-02,
Charles L. Dorian46206c52010-01-11 21:28:02 -0800434}
Charles L. Dorianc4653312010-02-09 13:33:12 -0800435var log2 = []float64{
436 2.3158594707062190618898251e+00,
437 2.9521233862883917703341018e+00,
438 -1.8526669502700329984917062e+00,
439 2.3249844127278861543568029e+00,
440 3.268478366538305087466309e+00,
441 1.5491157592596970278166492e+00,
442 2.3865580889631732407886495e+00,
443 1.447811865817085365540347e+00,
444 8.6813999540425116282815557e-01,
445 3.118679457227342224364709e+00,
446}
Charles L. Dorian04217ee2010-02-05 00:41:30 -0800447var modf = [][2]float64{
Robert Griesemer34788912010-10-22 10:06:33 -0700448 {4.0000000000000000e+00, 9.7901192488367350108546816e-01},
449 {7.0000000000000000e+00, 7.3887247457810456552351752e-01},
450 {0.0000000000000000e+00, -2.7688005719200159404635997e-01},
451 {-5.0000000000000000e+00, -1.060361827107492160848778e-02},
452 {9.0000000000000000e+00, 6.3629370719841737980004837e-01},
453 {2.0000000000000000e+00, 9.2637723924396464525443662e-01},
454 {5.0000000000000000e+00, 2.2908343145930665230025625e-01},
455 {2.0000000000000000e+00, 7.2793991043601025126008608e-01},
456 {1.0000000000000000e+00, 8.2530809168085506044576505e-01},
457 {-8.0000000000000000e+00, -6.8592476857560136238589621e-01},
Charles L. Dorian04217ee2010-02-05 00:41:30 -0800458}
Robert Griesemera9035ed2014-06-11 09:09:37 -0700459var nextafter32 = []float32{
460 4.979012489318848e+00,
461 7.738873004913330e+00,
462 -2.768800258636475e-01,
463 -5.010602951049805e+00,
464 9.636294364929199e+00,
465 2.926377534866333e+00,
466 5.229084014892578e+00,
467 2.727940082550049e+00,
468 1.825308203697205e+00,
469 -8.685923576354980e+00,
470}
471var nextafter64 = []float64{
Charles L. Dorianc4653312010-02-09 13:33:12 -0800472 4.97901192488367438926388786e+00,
473 7.73887247457810545370193722e+00,
474 -2.7688005719200153853520874e-01,
475 -5.01060361827107403343006808e+00,
476 9.63629370719841915615688777e+00,
477 2.92637723924396508934364647e+00,
478 5.22908343145930754047867595e+00,
479 2.72793991043601069534929593e+00,
480 1.82530809168085528249036997e+00,
481 -8.68592476857559958602905681e+00,
482}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700483var pow = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800484 9.5282232631648411840742957e+04,
485 5.4811599352999901232411871e+07,
486 5.2859121715894396531132279e-01,
487 9.7587991957286474464259698e-06,
488 4.328064329346044846740467e+09,
489 8.4406761805034547437659092e+02,
490 1.6946633276191194947742146e+05,
491 5.3449040147551939075312879e+02,
492 6.688182138451414936380374e+01,
493 2.0609869004248742886827439e-09,
Russ Coxbe2edb52009-03-03 08:39:12 -0800494}
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -0800495var remainder = []float64{
496 4.197615023265299782906368e-02,
497 2.261127525421895434476482e+00,
498 3.231794108794261433104108e-02,
499 -2.120723654214984321697556e-02,
500 3.637062928015826201999516e-01,
501 1.220868282268106064236690e+00,
502 -4.581668629186133046005125e-01,
503 -9.117596417440410050403443e-01,
504 8.734595415957246977711748e-01,
505 1.314075231424398637614104e+00,
506}
Charles L. Dorian9aa8f952010-04-08 13:24:04 -0700507var signbit = []bool{
508 false,
509 false,
510 true,
511 true,
512 false,
513 false,
514 false,
515 false,
516 false,
517 true,
518}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700519var sin = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800520 -9.6466616586009283766724726e-01,
521 9.9338225271646545763467022e-01,
522 -2.7335587039794393342449301e-01,
523 9.5586257685042792878173752e-01,
524 -2.099421066779969164496634e-01,
525 2.135578780799860532750616e-01,
526 -8.694568971167362743327708e-01,
527 4.019566681155577786649878e-01,
528 9.6778633541687993721617774e-01,
529 -6.734405869050344734943028e-01,
Russ Coxbe2edb52009-03-03 08:39:12 -0800530}
Robert Griesemer541b67d2011-12-16 15:43:06 -0800531
Charles L. Dorian377ac332011-11-04 15:35:59 -0400532// Results for 100000 * Pi + vf[i]
533var sinLarge = []float64{
534 -9.646661658548936063912e-01,
535 9.933822527198506903752e-01,
536 -2.7335587036246899796e-01,
537 9.55862576853689321268e-01,
538 -2.099421066862688873691e-01,
539 2.13557878070308981163e-01,
540 -8.694568970959221300497e-01,
541 4.01956668098863248917e-01,
542 9.67786335404528727927e-01,
543 -6.7344058693131973066e-01,
544}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700545var sinh = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800546 7.2661916084208532301448439e+01,
547 1.1479409110035194500526446e+03,
548 -2.8043136512812518927312641e-01,
549 -7.499429091181587232835164e+01,
550 7.6552466042906758523925934e+03,
551 9.3031583421672014313789064e+00,
552 9.330815755828109072810322e+01,
553 7.6179893137269146407361477e+00,
554 3.021769180549615819524392e+00,
555 -2.95950575724449499189888e+03,
Russ Coxbe2edb52009-03-03 08:39:12 -0800556}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700557var sqrt = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800558 2.2313699659365484748756904e+00,
559 2.7818829009464263511285458e+00,
560 5.2619393496314796848143251e-01,
561 2.2384377628763938724244104e+00,
562 3.1042380236055381099288487e+00,
563 1.7106657298385224403917771e+00,
564 2.286718922705479046148059e+00,
565 1.6516476350711159636222979e+00,
566 1.3510396336454586262419247e+00,
567 2.9471892997524949215723329e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -0800568}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700569var tan = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800570 -3.661316565040227801781974e+00,
571 8.64900232648597589369854e+00,
572 -2.8417941955033612725238097e-01,
573 3.253290185974728640827156e+00,
574 2.147275640380293804770778e-01,
575 -2.18600910711067004921551e-01,
576 -1.760002817872367935518928e+00,
577 -4.389808914752818126249079e-01,
578 -3.843885560201130679995041e+00,
579 9.10988793377685105753416e-01,
Russ Coxbe2edb52009-03-03 08:39:12 -0800580}
Robert Griesemer541b67d2011-12-16 15:43:06 -0800581
Charles L. Dorian377ac332011-11-04 15:35:59 -0400582// Results for 100000 * Pi + vf[i]
583var tanLarge = []float64{
584 -3.66131656475596512705e+00,
585 8.6490023287202547927e+00,
586 -2.841794195104782406e-01,
587 3.2532901861033120983e+00,
588 2.14727564046880001365e-01,
589 -2.18600910700688062874e-01,
590 -1.760002817699722747043e+00,
591 -4.38980891453536115952e-01,
592 -3.84388555942723509071e+00,
593 9.1098879344275101051e-01,
594}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700595var tanh = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800596 9.9990531206936338549262119e-01,
597 9.9999962057085294197613294e-01,
598 -2.7001505097318677233756845e-01,
599 -9.9991110943061718603541401e-01,
600 9.9999999146798465745022007e-01,
601 9.9427249436125236705001048e-01,
602 9.9994257600983138572705076e-01,
603 9.9149409509772875982054701e-01,
604 9.4936501296239685514466577e-01,
605 -9.9999994291374030946055701e-01,
606}
607var trunc = []float64{
608 4.0000000000000000e+00,
609 7.0000000000000000e+00,
610 -0.0000000000000000e+00,
611 -5.0000000000000000e+00,
612 9.0000000000000000e+00,
613 2.0000000000000000e+00,
614 5.0000000000000000e+00,
615 2.0000000000000000e+00,
616 1.0000000000000000e+00,
617 -8.0000000000000000e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -0800618}
Charles L. Dorian6b6c3992010-03-24 09:25:49 -0700619var y0 = []float64{
620 -3.053399153780788357534855e-01,
621 1.7437227649515231515503649e-01,
622 -8.6221781263678836910392572e-01,
623 -3.100664880987498407872839e-01,
624 1.422200649300982280645377e-01,
625 4.000004067997901144239363e-01,
626 -3.3340749753099352392332536e-01,
627 4.5399790746668954555205502e-01,
628 4.8290004112497761007536522e-01,
629 2.7036697826604756229601611e-01,
630}
Charles L. Dorian1ec91c82010-03-26 14:09:39 -0700631var y1 = []float64{
632 0.15494213737457922210218611,
633 -0.2165955142081145245075746,
634 -2.4644949631241895201032829,
635 0.1442740489541836405154505,
636 0.2215379960518984777080163,
637 0.3038800915160754150565448,
638 0.0691107642452362383808547,
639 0.2380116417809914424860165,
640 -0.20849492979459761009678934,
641 0.0242503179793232308250804,
642}
643var y2 = []float64{
644 0.3675780219390303613394936,
645 -0.23034826393250119879267257,
646 -16.939677983817727205631397,
647 0.367653980523052152867791,
648 -0.0962401471767804440353136,
649 -0.1923169356184851105200523,
650 0.35984072054267882391843766,
651 -0.2794987252299739821654982,
652 -0.7113490692587462579757954,
653 -0.2647831587821263302087457,
654}
655var yM3 = []float64{
656 -0.14035984421094849100895341,
657 -0.097535139617792072703973,
658 242.25775994555580176377379,
659 -0.1492267014802818619511046,
660 0.26148702629155918694500469,
661 0.56675383593895176530394248,
662 -0.206150264009006981070575,
663 0.64784284687568332737963658,
664 1.3503631555901938037008443,
665 0.1461869756579956803341844,
666}
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800667
668// arguments and expected results for special cases
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700669var vfacosSC = []float64{
670 -Pi,
671 1,
672 Pi,
673 NaN(),
674}
675var acosSC = []float64{
676 NaN(),
677 0,
678 NaN(),
679 NaN(),
680}
681
Charles L. Doriana0690b62010-02-01 22:21:40 -0800682var vfacoshSC = []float64{
683 Inf(-1),
684 0.5,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700685 1,
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700686 Inf(1),
Charles L. Doriana0690b62010-02-01 22:21:40 -0800687 NaN(),
688}
689var acoshSC = []float64{
690 NaN(),
691 NaN(),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700692 0,
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700693 Inf(1),
Charles L. Doriana0690b62010-02-01 22:21:40 -0800694 NaN(),
695}
696
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800697var vfasinSC = []float64{
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -0800698 -Pi,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700699 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700700 0,
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -0800701 Pi,
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700702 NaN(),
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -0800703}
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800704var asinSC = []float64{
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -0800705 NaN(),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700706 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700707 0,
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800708 NaN(),
709 NaN(),
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -0800710}
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800711
Charles L. Doriana0690b62010-02-01 22:21:40 -0800712var vfasinhSC = []float64{
713 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700714 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700715 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800716 Inf(1),
717 NaN(),
718}
719var asinhSC = []float64{
720 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700721 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700722 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800723 Inf(1),
724 NaN(),
725}
726
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800727var vfatanSC = []float64{
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700728 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700729 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700730 0,
731 Inf(1),
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800732 NaN(),
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -0800733}
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800734var atanSC = []float64{
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700735 -Pi / 2,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700736 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700737 0,
738 Pi / 2,
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800739 NaN(),
740}
Charles L. Dorian3c753412010-01-11 16:20:51 -0800741
Charles L. Doriana0690b62010-02-01 22:21:40 -0800742var vfatanhSC = []float64{
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700743 Inf(-1),
Charles L. Doriana0690b62010-02-01 22:21:40 -0800744 -Pi,
745 -1,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700746 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700747 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800748 1,
749 Pi,
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700750 Inf(1),
Charles L. Doriana0690b62010-02-01 22:21:40 -0800751 NaN(),
752}
753var atanhSC = []float64{
754 NaN(),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700755 NaN(),
Charles L. Doriana0690b62010-02-01 22:21:40 -0800756 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700757 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700758 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800759 Inf(1),
760 NaN(),
761 NaN(),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700762 NaN(),
Charles L. Doriana0690b62010-02-01 22:21:40 -0800763}
Charles L. Dorian072b5602010-02-05 14:55:19 -0800764var vfatan2SC = [][2]float64{
Robert Griesemer34788912010-10-22 10:06:33 -0700765 {Inf(-1), Inf(-1)},
766 {Inf(-1), -Pi},
767 {Inf(-1), 0},
768 {Inf(-1), +Pi},
769 {Inf(-1), Inf(1)},
770 {Inf(-1), NaN()},
771 {-Pi, Inf(-1)},
772 {-Pi, 0},
773 {-Pi, Inf(1)},
774 {-Pi, NaN()},
775 {Copysign(0, -1), Inf(-1)},
776 {Copysign(0, -1), -Pi},
777 {Copysign(0, -1), Copysign(0, -1)},
778 {Copysign(0, -1), 0},
779 {Copysign(0, -1), +Pi},
780 {Copysign(0, -1), Inf(1)},
781 {Copysign(0, -1), NaN()},
782 {0, Inf(-1)},
783 {0, -Pi},
784 {0, Copysign(0, -1)},
785 {0, 0},
786 {0, +Pi},
787 {0, Inf(1)},
788 {0, NaN()},
789 {+Pi, Inf(-1)},
790 {+Pi, 0},
791 {+Pi, Inf(1)},
792 {+Pi, NaN()},
793 {Inf(1), Inf(-1)},
794 {Inf(1), -Pi},
795 {Inf(1), 0},
796 {Inf(1), +Pi},
797 {Inf(1), Inf(1)},
798 {Inf(1), NaN()},
799 {NaN(), NaN()},
Charles L. Dorian072b5602010-02-05 14:55:19 -0800800}
801var atan2SC = []float64{
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700802 -3 * Pi / 4, // atan2(-Inf, -Inf)
803 -Pi / 2, // atan2(-Inf, -Pi)
804 -Pi / 2, // atan2(-Inf, +0)
805 -Pi / 2, // atan2(-Inf, +Pi)
806 -Pi / 4, // atan2(-Inf, +Inf)
807 NaN(), // atan2(-Inf, NaN)
808 -Pi, // atan2(-Pi, -Inf)
809 -Pi / 2, // atan2(-Pi, +0)
810 Copysign(0, -1), // atan2(-Pi, Inf)
811 NaN(), // atan2(-Pi, NaN)
812 -Pi, // atan2(-0, -Inf)
813 -Pi, // atan2(-0, -Pi)
814 -Pi, // atan2(-0, -0)
815 Copysign(0, -1), // atan2(-0, +0)
816 Copysign(0, -1), // atan2(-0, +Pi)
817 Copysign(0, -1), // atan2(-0, +Inf)
818 NaN(), // atan2(-0, NaN)
819 Pi, // atan2(+0, -Inf)
820 Pi, // atan2(+0, -Pi)
821 Pi, // atan2(+0, -0)
822 0, // atan2(+0, +0)
823 0, // atan2(+0, +Pi)
824 0, // atan2(+0, +Inf)
825 NaN(), // atan2(+0, NaN)
826 Pi, // atan2(+Pi, -Inf)
827 Pi / 2, // atan2(+Pi, +0)
828 0, // atan2(+Pi, +Inf)
829 NaN(), // atan2(+Pi, NaN)
830 3 * Pi / 4, // atan2(+Inf, -Inf)
831 Pi / 2, // atan2(+Inf, -Pi)
832 Pi / 2, // atan2(+Inf, +0)
833 Pi / 2, // atan2(+Inf, +Pi)
834 Pi / 4, // atan2(+Inf, +Inf)
835 NaN(), // atan2(+Inf, NaN)
836 NaN(), // atan2(NaN, NaN)
Charles L. Dorian072b5602010-02-05 14:55:19 -0800837}
Charles L. Doriana0690b62010-02-01 22:21:40 -0800838
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -0800839var vfcbrtSC = []float64{
840 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700841 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700842 0,
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -0800843 Inf(1),
844 NaN(),
845}
846var cbrtSC = []float64{
847 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700848 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700849 0,
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -0800850 Inf(1),
851 NaN(),
852}
853
Charles L. Dorian46206c52010-01-11 21:28:02 -0800854var vfceilSC = []float64{
855 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700856 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700857 0,
Charles L. Dorian46206c52010-01-11 21:28:02 -0800858 Inf(1),
859 NaN(),
860}
861var ceilSC = []float64{
862 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700863 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700864 0,
Charles L. Dorian46206c52010-01-11 21:28:02 -0800865 Inf(1),
866 NaN(),
867}
868
Charles L. Doriana0690b62010-02-01 22:21:40 -0800869var vfcopysignSC = []float64{
870 Inf(-1),
871 Inf(1),
872 NaN(),
873}
874var copysignSC = []float64{
875 Inf(-1),
876 Inf(-1),
877 NaN(),
878}
879
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700880var vfcosSC = []float64{
881 Inf(-1),
882 Inf(1),
883 NaN(),
884}
885var cosSC = []float64{
886 NaN(),
887 NaN(),
888 NaN(),
889}
890
891var vfcoshSC = []float64{
892 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700893 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700894 0,
895 Inf(1),
896 NaN(),
897}
898var coshSC = []float64{
899 Inf(1),
900 1,
901 1,
902 Inf(1),
903 NaN(),
904}
905
Charles L. Doriana0690b62010-02-01 22:21:40 -0800906var vferfSC = []float64{
907 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700908 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700909 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800910 Inf(1),
911 NaN(),
912}
913var erfSC = []float64{
914 -1,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700915 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700916 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800917 1,
918 NaN(),
919}
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700920
921var vferfcSC = []float64{
922 Inf(-1),
923 Inf(1),
924 NaN(),
925}
Charles L. Doriana0690b62010-02-01 22:21:40 -0800926var erfcSC = []float64{
927 2,
928 0,
929 NaN(),
930}
931
Charles L. Dorian46206c52010-01-11 21:28:02 -0800932var vfexpSC = []float64{
933 Inf(-1),
Charles L. Dorianc8c2bdb2010-08-06 16:50:48 -0700934 -2000,
935 2000,
Charles L. Dorian46206c52010-01-11 21:28:02 -0800936 Inf(1),
937 NaN(),
938}
939var expSC = []float64{
940 0,
Charles L. Dorianc8c2bdb2010-08-06 16:50:48 -0700941 0,
942 Inf(1),
Charles L. Dorian46206c52010-01-11 21:28:02 -0800943 Inf(1),
944 NaN(),
945}
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700946
947var vfexpm1SC = []float64{
948 Inf(-1),
Charlie Dorian8b221092015-06-30 20:14:30 -0400949 -710,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700950 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700951 0,
Charlie Dorian8b221092015-06-30 20:14:30 -0400952 710,
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700953 Inf(1),
954 NaN(),
955}
Charles L. Doriana0690b62010-02-01 22:21:40 -0800956var expm1SC = []float64{
957 -1,
Charlie Dorian8b221092015-06-30 20:14:30 -0400958 -1,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700959 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700960 0,
961 Inf(1),
Charlie Dorian8b221092015-06-30 20:14:30 -0400962 Inf(1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700963 NaN(),
964}
965
966var vffabsSC = []float64{
967 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700968 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700969 0,
970 Inf(1),
971 NaN(),
972}
973var fabsSC = []float64{
974 Inf(1),
975 0,
976 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800977 Inf(1),
978 NaN(),
979}
Charles L. Dorian46206c52010-01-11 21:28:02 -0800980
Charles L. Doriane4de2e72011-12-07 14:52:17 -0500981var vffdimSC = [][2]float64{
982 {Inf(-1), Inf(-1)},
983 {Inf(-1), Inf(1)},
984 {Inf(-1), NaN()},
985 {Copysign(0, -1), Copysign(0, -1)},
986 {Copysign(0, -1), 0},
987 {0, Copysign(0, -1)},
988 {0, 0},
989 {Inf(1), Inf(-1)},
990 {Inf(1), Inf(1)},
991 {Inf(1), NaN()},
992 {NaN(), Inf(-1)},
993 {NaN(), Copysign(0, -1)},
994 {NaN(), 0},
995 {NaN(), Inf(1)},
996 {NaN(), NaN()},
997}
Charlie Dorianec92af62015-02-22 16:12:51 -0500998var nan = Float64frombits(0xFFF8000000000000) // SSE2 DIVSD 0/0
999var vffdim2SC = [][2]float64{
1000 {Inf(-1), Inf(-1)},
1001 {Inf(-1), Inf(1)},
1002 {Inf(-1), nan},
1003 {Copysign(0, -1), Copysign(0, -1)},
1004 {Copysign(0, -1), 0},
1005 {0, Copysign(0, -1)},
1006 {0, 0},
1007 {Inf(1), Inf(-1)},
1008 {Inf(1), Inf(1)},
1009 {Inf(1), nan},
1010 {nan, Inf(-1)},
1011 {nan, Copysign(0, -1)},
1012 {nan, 0},
1013 {nan, Inf(1)},
1014 {nan, nan},
1015}
Charles L. Doriane4de2e72011-12-07 14:52:17 -05001016var fdimSC = []float64{
1017 NaN(),
1018 0,
1019 NaN(),
1020 0,
1021 0,
1022 0,
1023 0,
1024 Inf(1),
1025 NaN(),
1026 NaN(),
1027 NaN(),
1028 NaN(),
1029 NaN(),
1030 NaN(),
1031 NaN(),
1032}
1033var fmaxSC = []float64{
1034 Inf(-1),
1035 Inf(1),
1036 NaN(),
1037 Copysign(0, -1),
1038 0,
1039 0,
1040 0,
1041 Inf(1),
1042 Inf(1),
1043 Inf(1),
1044 NaN(),
1045 NaN(),
1046 NaN(),
1047 Inf(1),
1048 NaN(),
1049}
1050var fminSC = []float64{
1051 Inf(-1),
1052 Inf(-1),
1053 Inf(-1),
1054 Copysign(0, -1),
1055 Copysign(0, -1),
1056 Copysign(0, -1),
1057 0,
1058 Inf(-1),
1059 Inf(1),
1060 NaN(),
1061 Inf(-1),
1062 NaN(),
1063 NaN(),
1064 NaN(),
1065 NaN(),
1066}
1067
Charles L. Dorian3c753412010-01-11 16:20:51 -08001068var vffmodSC = [][2]float64{
Robert Griesemer34788912010-10-22 10:06:33 -07001069 {Inf(-1), Inf(-1)},
1070 {Inf(-1), -Pi},
1071 {Inf(-1), 0},
1072 {Inf(-1), Pi},
1073 {Inf(-1), Inf(1)},
1074 {Inf(-1), NaN()},
1075 {-Pi, Inf(-1)},
1076 {-Pi, 0},
1077 {-Pi, Inf(1)},
1078 {-Pi, NaN()},
1079 {Copysign(0, -1), Inf(-1)},
1080 {Copysign(0, -1), 0},
1081 {Copysign(0, -1), Inf(1)},
1082 {Copysign(0, -1), NaN()},
1083 {0, Inf(-1)},
1084 {0, 0},
1085 {0, Inf(1)},
1086 {0, NaN()},
1087 {Pi, Inf(-1)},
1088 {Pi, 0},
1089 {Pi, Inf(1)},
1090 {Pi, NaN()},
1091 {Inf(1), Inf(-1)},
1092 {Inf(1), -Pi},
1093 {Inf(1), 0},
1094 {Inf(1), Pi},
1095 {Inf(1), Inf(1)},
1096 {Inf(1), NaN()},
1097 {NaN(), Inf(-1)},
1098 {NaN(), -Pi},
1099 {NaN(), 0},
1100 {NaN(), Pi},
1101 {NaN(), Inf(1)},
1102 {NaN(), NaN()},
Charles L. Dorian3c753412010-01-11 16:20:51 -08001103}
1104var fmodSC = []float64{
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001105 NaN(), // fmod(-Inf, -Inf)
1106 NaN(), // fmod(-Inf, -Pi)
1107 NaN(), // fmod(-Inf, 0)
1108 NaN(), // fmod(-Inf, Pi)
1109 NaN(), // fmod(-Inf, +Inf)
1110 NaN(), // fmod(-Inf, NaN)
1111 -Pi, // fmod(-Pi, -Inf)
1112 NaN(), // fmod(-Pi, 0)
1113 -Pi, // fmod(-Pi, +Inf)
1114 NaN(), // fmod(-Pi, NaN)
1115 Copysign(0, -1), // fmod(-0, -Inf)
1116 NaN(), // fmod(-0, 0)
1117 Copysign(0, -1), // fmod(-0, Inf)
1118 NaN(), // fmod(-0, NaN)
1119 0, // fmod(0, -Inf)
1120 NaN(), // fmod(0, 0)
1121 0, // fmod(0, +Inf)
1122 NaN(), // fmod(0, NaN)
1123 Pi, // fmod(Pi, -Inf)
1124 NaN(), // fmod(Pi, 0)
1125 Pi, // fmod(Pi, +Inf)
1126 NaN(), // fmod(Pi, NaN)
1127 NaN(), // fmod(+Inf, -Inf)
1128 NaN(), // fmod(+Inf, -Pi)
1129 NaN(), // fmod(+Inf, 0)
1130 NaN(), // fmod(+Inf, Pi)
1131 NaN(), // fmod(+Inf, +Inf)
1132 NaN(), // fmod(+Inf, NaN)
1133 NaN(), // fmod(NaN, -Inf)
1134 NaN(), // fmod(NaN, -Pi)
1135 NaN(), // fmod(NaN, 0)
1136 NaN(), // fmod(NaN, Pi)
1137 NaN(), // fmod(NaN, +Inf)
1138 NaN(), // fmod(NaN, NaN)
Charles L. Dorian3c753412010-01-11 16:20:51 -08001139}
1140
Charles L. Dorian04217ee2010-02-05 00:41:30 -08001141var vffrexpSC = []float64{
1142 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001143 Copysign(0, -1),
Charles L. Dorian04217ee2010-02-05 00:41:30 -08001144 0,
1145 Inf(1),
1146 NaN(),
1147}
1148var frexpSC = []fi{
Robert Griesemer34788912010-10-22 10:06:33 -07001149 {Inf(-1), 0},
1150 {Copysign(0, -1), 0},
1151 {0, 0},
1152 {Inf(1), 0},
1153 {NaN(), 0},
Charles L. Dorian04217ee2010-02-05 00:41:30 -08001154}
1155
Charles L. Dorian26f0c832010-03-19 15:29:22 -07001156var vfgammaSC = []float64{
1157 Inf(-1),
1158 -3,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001159 Copysign(0, -1),
Charles L. Dorian26f0c832010-03-19 15:29:22 -07001160 0,
1161 Inf(1),
1162 NaN(),
1163}
1164var gammaSC = []float64{
Charles L. Dorian5496e942012-04-04 09:45:22 -04001165 NaN(),
1166 NaN(),
Charles L. Dorian26f0c832010-03-19 15:29:22 -07001167 Inf(-1),
1168 Inf(1),
1169 Inf(1),
Charles L. Dorian26f0c832010-03-19 15:29:22 -07001170 NaN(),
1171}
1172
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08001173var vfhypotSC = [][2]float64{
Robert Griesemer34788912010-10-22 10:06:33 -07001174 {Inf(-1), Inf(-1)},
1175 {Inf(-1), 0},
1176 {Inf(-1), Inf(1)},
1177 {Inf(-1), NaN()},
1178 {Copysign(0, -1), Copysign(0, -1)},
1179 {Copysign(0, -1), 0},
1180 {0, Copysign(0, -1)},
1181 {0, 0}, // +0, +0
1182 {0, Inf(-1)},
1183 {0, Inf(1)},
1184 {0, NaN()},
1185 {Inf(1), Inf(-1)},
1186 {Inf(1), 0},
1187 {Inf(1), Inf(1)},
1188 {Inf(1), NaN()},
1189 {NaN(), Inf(-1)},
1190 {NaN(), 0},
1191 {NaN(), Inf(1)},
1192 {NaN(), NaN()},
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08001193}
1194var hypotSC = []float64{
1195 Inf(1),
1196 Inf(1),
1197 Inf(1),
1198 Inf(1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001199 0,
1200 0,
1201 0,
1202 0,
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08001203 Inf(1),
1204 Inf(1),
1205 NaN(),
1206 Inf(1),
1207 Inf(1),
1208 Inf(1),
1209 Inf(1),
1210 Inf(1),
1211 NaN(),
1212 Inf(1),
1213 NaN(),
1214}
1215
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08001216var vfilogbSC = []float64{
1217 Inf(-1),
1218 0,
1219 Inf(1),
1220 NaN(),
1221}
1222var ilogbSC = []int{
1223 MaxInt32,
1224 MinInt32,
1225 MaxInt32,
1226 MaxInt32,
1227}
1228
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07001229var vfj0SC = []float64{
1230 Inf(-1),
1231 0,
1232 Inf(1),
1233 NaN(),
1234}
1235var j0SC = []float64{
1236 0,
1237 1,
1238 0,
1239 NaN(),
1240}
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07001241var j1SC = []float64{
1242 0,
1243 0,
1244 0,
1245 NaN(),
1246}
1247var j2SC = []float64{
1248 0,
1249 0,
1250 0,
1251 NaN(),
1252}
1253var jM3SC = []float64{
1254 0,
1255 0,
1256 0,
1257 NaN(),
1258}
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07001259
Eoghan Sherry13c2e622011-01-19 14:23:59 -05001260var vfldexpSC = []fi{
1261 {0, 0},
1262 {0, -1075},
1263 {0, 1024},
1264 {Copysign(0, -1), 0},
1265 {Copysign(0, -1), -1075},
1266 {Copysign(0, -1), 1024},
1267 {Inf(1), 0},
1268 {Inf(1), -1024},
1269 {Inf(-1), 0},
1270 {Inf(-1), -1024},
1271 {NaN(), -1024},
1272}
1273var ldexpSC = []float64{
1274 0,
1275 0,
1276 0,
1277 Copysign(0, -1),
1278 Copysign(0, -1),
1279 Copysign(0, -1),
1280 Inf(1),
1281 Inf(1),
1282 Inf(-1),
1283 Inf(-1),
1284 NaN(),
1285}
1286
Charles L. Dorian78e918c2010-02-22 17:12:48 -08001287var vflgammaSC = []float64{
1288 Inf(-1),
1289 -3,
1290 0,
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001291 1,
1292 2,
Charles L. Dorian78e918c2010-02-22 17:12:48 -08001293 Inf(1),
1294 NaN(),
1295}
1296var lgammaSC = []fi{
Robert Griesemer34788912010-10-22 10:06:33 -07001297 {Inf(-1), 1},
1298 {Inf(1), 1},
1299 {Inf(1), 1},
1300 {0, 1},
1301 {0, 1},
1302 {Inf(1), 1},
1303 {NaN(), 1},
Charles L. Dorian78e918c2010-02-22 17:12:48 -08001304}
1305
Charles L. Dorian46206c52010-01-11 21:28:02 -08001306var vflogSC = []float64{
1307 Inf(-1),
1308 -Pi,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001309 Copysign(0, -1),
Charles L. Dorian46206c52010-01-11 21:28:02 -08001310 0,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001311 1,
Charles L. Dorian46206c52010-01-11 21:28:02 -08001312 Inf(1),
1313 NaN(),
1314}
1315var logSC = []float64{
1316 NaN(),
1317 NaN(),
1318 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001319 Inf(-1),
1320 0,
Charles L. Dorian46206c52010-01-11 21:28:02 -08001321 Inf(1),
1322 NaN(),
1323}
1324
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08001325var vflogbSC = []float64{
1326 Inf(-1),
1327 0,
1328 Inf(1),
1329 NaN(),
1330}
1331var logbSC = []float64{
1332 Inf(1),
1333 Inf(-1),
1334 Inf(1),
1335 NaN(),
1336}
1337
Charles L. Doriana0690b62010-02-01 22:21:40 -08001338var vflog1pSC = []float64{
1339 Inf(-1),
1340 -Pi,
1341 -1,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001342 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001343 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -08001344 Inf(1),
1345 NaN(),
1346}
1347var log1pSC = []float64{
1348 NaN(),
1349 NaN(),
1350 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001351 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001352 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -08001353 Inf(1),
1354 NaN(),
1355}
1356
Charles L. Dorian04217ee2010-02-05 00:41:30 -08001357var vfmodfSC = []float64{
1358 Inf(-1),
1359 Inf(1),
1360 NaN(),
1361}
1362var modfSC = [][2]float64{
Robert Griesemer34788912010-10-22 10:06:33 -07001363 {Inf(-1), NaN()}, // [2]float64{Copysign(0, -1), Inf(-1)},
1364 {Inf(1), NaN()}, // [2]float64{0, Inf(1)},
1365 {NaN(), NaN()},
Charles L. Dorian04217ee2010-02-05 00:41:30 -08001366}
1367
Robert Griesemera9035ed2014-06-11 09:09:37 -07001368var vfnextafter32SC = [][2]float32{
1369 {0, 0},
1370 {0, float32(Copysign(0, -1))},
1371 {0, -1},
1372 {0, float32(NaN())},
1373 {float32(Copysign(0, -1)), 1},
1374 {float32(Copysign(0, -1)), 0},
1375 {float32(Copysign(0, -1)), float32(Copysign(0, -1))},
1376 {float32(Copysign(0, -1)), -1},
1377 {float32(NaN()), 0},
1378 {float32(NaN()), float32(NaN())},
1379}
1380var nextafter32SC = []float32{
1381 0,
1382 0,
1383 -1.401298464e-45, // Float32frombits(0x80000001)
1384 float32(NaN()),
1385 1.401298464e-45, // Float32frombits(0x00000001)
1386 float32(Copysign(0, -1)),
1387 float32(Copysign(0, -1)),
1388 -1.401298464e-45, // Float32frombits(0x80000001)
1389 float32(NaN()),
1390 float32(NaN()),
1391}
1392
1393var vfnextafter64SC = [][2]float64{
Charles L. Dorianf5c21112011-12-12 15:51:11 -05001394 {0, 0},
1395 {0, Copysign(0, -1)},
1396 {0, -1},
Robert Griesemer34788912010-10-22 10:06:33 -07001397 {0, NaN()},
Charles L. Dorianf5c21112011-12-12 15:51:11 -05001398 {Copysign(0, -1), 1},
1399 {Copysign(0, -1), 0},
1400 {Copysign(0, -1), Copysign(0, -1)},
1401 {Copysign(0, -1), -1},
Robert Griesemer34788912010-10-22 10:06:33 -07001402 {NaN(), 0},
1403 {NaN(), NaN()},
Charles L. Dorianc4653312010-02-09 13:33:12 -08001404}
Robert Griesemera9035ed2014-06-11 09:09:37 -07001405var nextafter64SC = []float64{
Charles L. Dorianf5c21112011-12-12 15:51:11 -05001406 0,
1407 0,
1408 -4.9406564584124654418e-324, // Float64frombits(0x8000000000000001)
Charles L. Dorianc4653312010-02-09 13:33:12 -08001409 NaN(),
Charles L. Dorianf5c21112011-12-12 15:51:11 -05001410 4.9406564584124654418e-324, // Float64frombits(0x0000000000000001)
1411 Copysign(0, -1),
1412 Copysign(0, -1),
1413 -4.9406564584124654418e-324, // Float64frombits(0x8000000000000001)
Charles L. Dorianc4653312010-02-09 13:33:12 -08001414 NaN(),
1415 NaN(),
1416}
1417
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001418var vfpowSC = [][2]float64{
Robert Griesemer34788912010-10-22 10:06:33 -07001419 {Inf(-1), -Pi},
1420 {Inf(-1), -3},
1421 {Inf(-1), Copysign(0, -1)},
1422 {Inf(-1), 0},
1423 {Inf(-1), 1},
1424 {Inf(-1), 3},
1425 {Inf(-1), Pi},
1426 {Inf(-1), NaN()},
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001427
Robert Griesemer34788912010-10-22 10:06:33 -07001428 {-Pi, Inf(-1)},
1429 {-Pi, -Pi},
1430 {-Pi, Copysign(0, -1)},
1431 {-Pi, 0},
1432 {-Pi, 1},
1433 {-Pi, Pi},
1434 {-Pi, Inf(1)},
1435 {-Pi, NaN()},
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001436
Robert Griesemer34788912010-10-22 10:06:33 -07001437 {-1, Inf(-1)},
1438 {-1, Inf(1)},
1439 {-1, NaN()},
1440 {-1 / 2, Inf(-1)},
1441 {-1 / 2, Inf(1)},
1442 {Copysign(0, -1), Inf(-1)},
1443 {Copysign(0, -1), -Pi},
1444 {Copysign(0, -1), -3},
1445 {Copysign(0, -1), 3},
1446 {Copysign(0, -1), Pi},
1447 {Copysign(0, -1), Inf(1)},
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001448
Robert Griesemer34788912010-10-22 10:06:33 -07001449 {0, Inf(-1)},
1450 {0, -Pi},
1451 {0, -3},
1452 {0, Copysign(0, -1)},
1453 {0, 0},
1454 {0, 3},
1455 {0, Pi},
1456 {0, Inf(1)},
1457 {0, NaN()},
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001458
Robert Griesemer34788912010-10-22 10:06:33 -07001459 {1 / 2, Inf(-1)},
1460 {1 / 2, Inf(1)},
1461 {1, Inf(-1)},
1462 {1, Inf(1)},
1463 {1, NaN()},
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001464
Robert Griesemer34788912010-10-22 10:06:33 -07001465 {Pi, Inf(-1)},
1466 {Pi, Copysign(0, -1)},
1467 {Pi, 0},
1468 {Pi, 1},
1469 {Pi, Inf(1)},
1470 {Pi, NaN()},
1471 {Inf(1), -Pi},
1472 {Inf(1), Copysign(0, -1)},
1473 {Inf(1), 0},
1474 {Inf(1), 1},
1475 {Inf(1), Pi},
1476 {Inf(1), NaN()},
1477 {NaN(), -Pi},
1478 {NaN(), Copysign(0, -1)},
1479 {NaN(), 0},
1480 {NaN(), 1},
1481 {NaN(), Pi},
1482 {NaN(), NaN()},
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08001483}
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001484var powSC = []float64{
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001485 0, // pow(-Inf, -Pi)
1486 Copysign(0, -1), // pow(-Inf, -3)
1487 1, // pow(-Inf, -0)
1488 1, // pow(-Inf, +0)
1489 Inf(-1), // pow(-Inf, 1)
1490 Inf(-1), // pow(-Inf, 3)
1491 Inf(1), // pow(-Inf, Pi)
1492 NaN(), // pow(-Inf, NaN)
1493 0, // pow(-Pi, -Inf)
1494 NaN(), // pow(-Pi, -Pi)
1495 1, // pow(-Pi, -0)
1496 1, // pow(-Pi, +0)
1497 -Pi, // pow(-Pi, 1)
1498 NaN(), // pow(-Pi, Pi)
1499 Inf(1), // pow(-Pi, +Inf)
1500 NaN(), // pow(-Pi, NaN)
1501 1, // pow(-1, -Inf) IEEE 754-2008
1502 1, // pow(-1, +Inf) IEEE 754-2008
1503 NaN(), // pow(-1, NaN)
1504 Inf(1), // pow(-1/2, -Inf)
1505 0, // pow(-1/2, +Inf)
1506 Inf(1), // pow(-0, -Inf)
1507 Inf(1), // pow(-0, -Pi)
1508 Inf(-1), // pow(-0, -3) IEEE 754-2008
1509 Copysign(0, -1), // pow(-0, 3) IEEE 754-2008
1510 0, // pow(-0, +Pi)
1511 0, // pow(-0, +Inf)
1512 Inf(1), // pow(+0, -Inf)
1513 Inf(1), // pow(+0, -Pi)
1514 Inf(1), // pow(+0, -3)
1515 1, // pow(+0, -0)
1516 1, // pow(+0, +0)
1517 0, // pow(+0, 3)
1518 0, // pow(+0, +Pi)
1519 0, // pow(+0, +Inf)
1520 NaN(), // pow(+0, NaN)
1521 Inf(1), // pow(1/2, -Inf)
1522 0, // pow(1/2, +Inf)
1523 1, // pow(1, -Inf) IEEE 754-2008
1524 1, // pow(1, +Inf) IEEE 754-2008
1525 1, // pow(1, NaN) IEEE 754-2008
1526 0, // pow(+Pi, -Inf)
1527 1, // pow(+Pi, -0)
1528 1, // pow(+Pi, +0)
1529 Pi, // pow(+Pi, 1)
1530 Inf(1), // pow(+Pi, +Inf)
1531 NaN(), // pow(+Pi, NaN)
1532 0, // pow(+Inf, -Pi)
1533 1, // pow(+Inf, -0)
1534 1, // pow(+Inf, +0)
1535 Inf(1), // pow(+Inf, 1)
1536 Inf(1), // pow(+Inf, Pi)
1537 NaN(), // pow(+Inf, NaN)
1538 NaN(), // pow(NaN, -Pi)
1539 1, // pow(NaN, -0)
1540 1, // pow(NaN, +0)
1541 NaN(), // pow(NaN, 1)
1542 NaN(), // pow(NaN, +Pi)
1543 NaN(), // pow(NaN, NaN)
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08001544}
Russ Cox88daac72008-11-19 16:14:31 -08001545
Volker Doblerf78e7d32011-08-24 13:59:52 -04001546var vfpow10SC = []int{
1547 MinInt32,
1548 MaxInt32,
1549 -325,
1550 309,
1551}
1552
1553var pow10SC = []float64{
1554 0, // pow10(MinInt32)
1555 Inf(1), // pow10(MaxInt32)
1556 0, // pow10(-325)
1557 Inf(1), // pow10(309)
1558}
1559
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07001560var vfsignbitSC = []float64{
1561 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001562 Copysign(0, -1),
1563 0,
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07001564 Inf(1),
1565 NaN(),
1566}
1567var signbitSC = []bool{
1568 true,
1569 true,
1570 false,
1571 false,
1572 false,
1573}
1574
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001575var vfsinSC = []float64{
1576 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001577 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001578 0,
1579 Inf(1),
1580 NaN(),
1581}
1582var sinSC = []float64{
1583 NaN(),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001584 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001585 0,
1586 NaN(),
1587 NaN(),
1588}
1589
1590var vfsinhSC = []float64{
1591 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001592 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001593 0,
1594 Inf(1),
1595 NaN(),
1596}
1597var sinhSC = []float64{
1598 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001599 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001600 0,
1601 Inf(1),
1602 NaN(),
1603}
1604
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08001605var vfsqrtSC = []float64{
1606 Inf(-1),
1607 -Pi,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001608 Copysign(0, -1),
Charles L. Dorian879241d2010-05-18 22:16:01 -07001609 0,
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08001610 Inf(1),
1611 NaN(),
1612}
1613var sqrtSC = []float64{
1614 NaN(),
1615 NaN(),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001616 Copysign(0, -1),
Charles L. Dorian879241d2010-05-18 22:16:01 -07001617 0,
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08001618 Inf(1),
1619 NaN(),
1620}
1621
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001622var vftanhSC = []float64{
1623 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001624 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001625 0,
1626 Inf(1),
1627 NaN(),
1628}
1629var tanhSC = []float64{
1630 -1,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001631 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001632 0,
1633 1,
1634 NaN(),
1635}
1636
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07001637var vfy0SC = []float64{
1638 Inf(-1),
1639 0,
1640 Inf(1),
1641 NaN(),
1642}
1643var y0SC = []float64{
1644 NaN(),
1645 Inf(-1),
1646 0,
1647 NaN(),
1648}
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07001649var y1SC = []float64{
1650 NaN(),
1651 Inf(-1),
1652 0,
1653 NaN(),
1654}
1655var y2SC = []float64{
1656 NaN(),
1657 Inf(-1),
1658 0,
1659 NaN(),
1660}
1661var yM3SC = []float64{
1662 NaN(),
1663 Inf(1),
1664 0,
1665 NaN(),
1666}
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07001667
Eoghan Sherry13c2e622011-01-19 14:23:59 -05001668// arguments and expected results for boundary cases
1669const (
1670 SmallestNormalFloat64 = 2.2250738585072014e-308 // 2**-1022
1671 LargestSubnormalFloat64 = SmallestNormalFloat64 - SmallestNonzeroFloat64
1672)
1673
1674var vffrexpBC = []float64{
1675 SmallestNormalFloat64,
1676 LargestSubnormalFloat64,
1677 SmallestNonzeroFloat64,
1678 MaxFloat64,
1679 -SmallestNormalFloat64,
1680 -LargestSubnormalFloat64,
1681 -SmallestNonzeroFloat64,
1682 -MaxFloat64,
1683}
1684var frexpBC = []fi{
1685 {0.5, -1021},
1686 {0.99999999999999978, -1022},
1687 {0.5, -1073},
1688 {0.99999999999999989, 1024},
1689 {-0.5, -1021},
1690 {-0.99999999999999978, -1022},
1691 {-0.5, -1073},
1692 {-0.99999999999999989, 1024},
1693}
1694
1695var vfldexpBC = []fi{
1696 {SmallestNormalFloat64, -52},
1697 {LargestSubnormalFloat64, -51},
1698 {SmallestNonzeroFloat64, 1074},
1699 {MaxFloat64, -(1023 + 1074)},
1700 {1, -1075},
1701 {-1, -1075},
1702 {1, 1024},
1703 {-1, 1024},
1704}
1705var ldexpBC = []float64{
1706 SmallestNonzeroFloat64,
1707 1e-323, // 2**-1073
1708 1,
1709 1e-323, // 2**-1073
1710 0,
1711 Copysign(0, -1),
1712 Inf(1),
1713 Inf(-1),
1714}
1715
1716var logbBC = []float64{
1717 -1022,
1718 -1023,
1719 -1074,
1720 1023,
1721 -1022,
1722 -1023,
1723 -1074,
1724 1023,
1725}
1726
Russ Cox2c5ec1e2009-10-06 19:40:35 -07001727func tolerance(a, b, e float64) bool {
Robert Griesemera3d10452009-12-15 15:35:38 -08001728 d := a - b
Russ Cox88daac72008-11-19 16:14:31 -08001729 if d < 0 {
Robert Griesemer40621d52009-11-09 12:07:39 -08001730 d = -d
Russ Cox88daac72008-11-19 16:14:31 -08001731 }
1732
Russ Coxbed63262015-07-14 22:42:16 -04001733 // note: b is correct (expected) value, a is actual value.
1734 // make error tolerance a fraction of b, not a.
1735 if b != 0 {
1736 e = e * b
Russ Cox88daac72008-11-19 16:14:31 -08001737 if e < 0 {
Robert Griesemer40621d52009-11-09 12:07:39 -08001738 e = -e
Russ Cox88daac72008-11-19 16:14:31 -08001739 }
1740 }
Robert Griesemera3d10452009-12-15 15:35:38 -08001741 return d < e
Russ Cox88daac72008-11-19 16:14:31 -08001742}
Robert Griesemera3d10452009-12-15 15:35:38 -08001743func kindaclose(a, b float64) bool { return tolerance(a, b, 1e-8) }
1744func close(a, b float64) bool { return tolerance(a, b, 1e-14) }
1745func veryclose(a, b float64) bool { return tolerance(a, b, 4e-16) }
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07001746func soclose(a, b, e float64) bool { return tolerance(a, b, e) }
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08001747func alike(a, b float64) bool {
1748 switch {
1749 case IsNaN(a) && IsNaN(b):
1750 return true
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08001751 case a == b:
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07001752 return Signbit(a) == Signbit(b)
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08001753 }
1754 return false
1755}
Russ Cox88daac72008-11-19 16:14:31 -08001756
Shenghou Ma6e9506a2012-08-07 09:57:14 +08001757func TestNaN(t *testing.T) {
1758 f64 := NaN()
1759 if f64 == f64 {
1760 t.Fatalf("NaN() returns %g, expected NaN", f64)
1761 }
1762 f32 := float32(f64)
1763 if f32 == f32 {
1764 t.Fatalf("float32(NaN()) is %g, expected NaN", f32)
1765 }
1766}
1767
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001768func TestAcos(t *testing.T) {
1769 for i := 0; i < len(vf); i++ {
Charles L. Doriana0690b62010-02-01 22:21:40 -08001770 a := vf[i] / 10
1771 if f := Acos(a); !close(acos[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001772 t.Errorf("Acos(%g) = %g, want %g", a, f, acos[i])
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001773 }
1774 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001775 for i := 0; i < len(vfacosSC); i++ {
1776 if f := Acos(vfacosSC[i]); !alike(acosSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001777 t.Errorf("Acos(%g) = %g, want %g", vfacosSC[i], f, acosSC[i])
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001778 }
1779 }
1780}
1781
Charles L. Doriana0690b62010-02-01 22:21:40 -08001782func TestAcosh(t *testing.T) {
1783 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07001784 a := 1 + Abs(vf[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001785 if f := Acosh(a); !veryclose(acosh[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001786 t.Errorf("Acosh(%g) = %g, want %g", a, f, acosh[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001787 }
1788 }
1789 for i := 0; i < len(vfacoshSC); i++ {
1790 if f := Acosh(vfacoshSC[i]); !alike(acoshSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001791 t.Errorf("Acosh(%g) = %g, want %g", vfacoshSC[i], f, acoshSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001792 }
1793 }
1794}
1795
Russ Cox839a6842009-01-20 14:40:40 -08001796func TestAsin(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08001797 for i := 0; i < len(vf); i++ {
Charles L. Doriana0690b62010-02-01 22:21:40 -08001798 a := vf[i] / 10
1799 if f := Asin(a); !veryclose(asin[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001800 t.Errorf("Asin(%g) = %g, want %g", a, f, asin[i])
Russ Cox88daac72008-11-19 16:14:31 -08001801 }
1802 }
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001803 for i := 0; i < len(vfasinSC); i++ {
1804 if f := Asin(vfasinSC[i]); !alike(asinSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001805 t.Errorf("Asin(%g) = %g, want %g", vfasinSC[i], f, asinSC[i])
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001806 }
1807 }
Russ Cox88daac72008-11-19 16:14:31 -08001808}
1809
Charles L. Doriana0690b62010-02-01 22:21:40 -08001810func TestAsinh(t *testing.T) {
1811 for i := 0; i < len(vf); i++ {
1812 if f := Asinh(vf[i]); !veryclose(asinh[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001813 t.Errorf("Asinh(%g) = %g, want %g", vf[i], f, asinh[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001814 }
1815 }
1816 for i := 0; i < len(vfasinhSC); i++ {
1817 if f := Asinh(vfasinhSC[i]); !alike(asinhSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001818 t.Errorf("Asinh(%g) = %g, want %g", vfasinhSC[i], f, asinhSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001819 }
1820 }
1821}
1822
Russ Cox839a6842009-01-20 14:40:40 -08001823func TestAtan(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08001824 for i := 0; i < len(vf); i++ {
Russ Cox04960402009-08-10 22:02:51 -07001825 if f := Atan(vf[i]); !veryclose(atan[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001826 t.Errorf("Atan(%g) = %g, want %g", vf[i], f, atan[i])
Russ Cox88daac72008-11-19 16:14:31 -08001827 }
1828 }
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001829 for i := 0; i < len(vfatanSC); i++ {
1830 if f := Atan(vfatanSC[i]); !alike(atanSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001831 t.Errorf("Atan(%g) = %g, want %g", vfatanSC[i], f, atanSC[i])
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001832 }
1833 }
Russ Cox88daac72008-11-19 16:14:31 -08001834}
1835
Charles L. Doriana0690b62010-02-01 22:21:40 -08001836func TestAtanh(t *testing.T) {
1837 for i := 0; i < len(vf); i++ {
1838 a := vf[i] / 10
1839 if f := Atanh(a); !veryclose(atanh[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001840 t.Errorf("Atanh(%g) = %g, want %g", a, f, atanh[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001841 }
1842 }
1843 for i := 0; i < len(vfatanhSC); i++ {
1844 if f := Atanh(vfatanhSC[i]); !alike(atanhSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001845 t.Errorf("Atanh(%g) = %g, want %g", vfatanhSC[i], f, atanhSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001846 }
1847 }
1848}
1849
Charles L. Dorian072b5602010-02-05 14:55:19 -08001850func TestAtan2(t *testing.T) {
1851 for i := 0; i < len(vf); i++ {
1852 if f := Atan2(10, vf[i]); !veryclose(atan2[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001853 t.Errorf("Atan2(10, %g) = %g, want %g", vf[i], f, atan2[i])
Charles L. Dorian072b5602010-02-05 14:55:19 -08001854 }
1855 }
1856 for i := 0; i < len(vfatan2SC); i++ {
1857 if f := Atan2(vfatan2SC[i][0], vfatan2SC[i][1]); !alike(atan2SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001858 t.Errorf("Atan2(%g, %g) = %g, want %g", vfatan2SC[i][0], vfatan2SC[i][1], f, atan2SC[i])
Charles L. Dorian072b5602010-02-05 14:55:19 -08001859 }
1860 }
1861}
1862
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08001863func TestCbrt(t *testing.T) {
1864 for i := 0; i < len(vf); i++ {
1865 if f := Cbrt(vf[i]); !veryclose(cbrt[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001866 t.Errorf("Cbrt(%g) = %g, want %g", vf[i], f, cbrt[i])
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08001867 }
1868 }
1869 for i := 0; i < len(vfcbrtSC); i++ {
1870 if f := Cbrt(vfcbrtSC[i]); !alike(cbrtSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001871 t.Errorf("Cbrt(%g) = %g, want %g", vfcbrtSC[i], f, cbrtSC[i])
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08001872 }
1873 }
1874}
1875
Charles L. Dorian3c753412010-01-11 16:20:51 -08001876func TestCeil(t *testing.T) {
1877 for i := 0; i < len(vf); i++ {
1878 if f := Ceil(vf[i]); ceil[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10001879 t.Errorf("Ceil(%g) = %g, want %g", vf[i], f, ceil[i])
Charles L. Dorian3c753412010-01-11 16:20:51 -08001880 }
1881 }
Charles L. Dorian46206c52010-01-11 21:28:02 -08001882 for i := 0; i < len(vfceilSC); i++ {
1883 if f := Ceil(vfceilSC[i]); !alike(ceilSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001884 t.Errorf("Ceil(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08001885 }
1886 }
Charles L. Dorian3c753412010-01-11 16:20:51 -08001887}
1888
Charles L. Doriana0690b62010-02-01 22:21:40 -08001889func TestCopysign(t *testing.T) {
1890 for i := 0; i < len(vf); i++ {
1891 if f := Copysign(vf[i], -1); copysign[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10001892 t.Errorf("Copysign(%g, -1) = %g, want %g", vf[i], f, copysign[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001893 }
1894 }
Charles L. Dorianc8c2bdb2010-08-06 16:50:48 -07001895 for i := 0; i < len(vf); i++ {
1896 if f := Copysign(vf[i], 1); -copysign[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10001897 t.Errorf("Copysign(%g, 1) = %g, want %g", vf[i], f, -copysign[i])
Charles L. Dorianc8c2bdb2010-08-06 16:50:48 -07001898 }
1899 }
Charles L. Doriana0690b62010-02-01 22:21:40 -08001900 for i := 0; i < len(vfcopysignSC); i++ {
1901 if f := Copysign(vfcopysignSC[i], -1); !alike(copysignSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001902 t.Errorf("Copysign(%g, -1) = %g, want %g", vfcopysignSC[i], f, copysignSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001903 }
1904 }
1905}
1906
1907func TestCos(t *testing.T) {
1908 for i := 0; i < len(vf); i++ {
Charles L. Dorian739c4422011-10-31 14:26:05 -04001909 if f := Cos(vf[i]); !veryclose(cos[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001910 t.Errorf("Cos(%g) = %g, want %g", vf[i], f, cos[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001911 }
1912 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001913 for i := 0; i < len(vfcosSC); i++ {
1914 if f := Cos(vfcosSC[i]); !alike(cosSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001915 t.Errorf("Cos(%g) = %g, want %g", vfcosSC[i], f, cosSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001916 }
1917 }
Charles L. Doriana0690b62010-02-01 22:21:40 -08001918}
1919
1920func TestCosh(t *testing.T) {
1921 for i := 0; i < len(vf); i++ {
Russ Coxb13b80e2010-02-01 22:46:37 -08001922 if f := Cosh(vf[i]); !close(cosh[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001923 t.Errorf("Cosh(%g) = %g, want %g", vf[i], f, cosh[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001924 }
1925 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001926 for i := 0; i < len(vfcoshSC); i++ {
1927 if f := Cosh(vfcoshSC[i]); !alike(coshSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001928 t.Errorf("Cosh(%g) = %g, want %g", vfcoshSC[i], f, coshSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001929 }
1930 }
Charles L. Doriana0690b62010-02-01 22:21:40 -08001931}
1932
1933func TestErf(t *testing.T) {
1934 for i := 0; i < len(vf); i++ {
1935 a := vf[i] / 10
1936 if f := Erf(a); !veryclose(erf[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001937 t.Errorf("Erf(%g) = %g, want %g", a, f, erf[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001938 }
1939 }
1940 for i := 0; i < len(vferfSC); i++ {
1941 if f := Erf(vferfSC[i]); !alike(erfSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001942 t.Errorf("Erf(%g) = %g, want %g", vferfSC[i], f, erfSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001943 }
1944 }
1945}
1946
1947func TestErfc(t *testing.T) {
1948 for i := 0; i < len(vf); i++ {
1949 a := vf[i] / 10
1950 if f := Erfc(a); !veryclose(erfc[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001951 t.Errorf("Erfc(%g) = %g, want %g", a, f, erfc[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001952 }
1953 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001954 for i := 0; i < len(vferfcSC); i++ {
1955 if f := Erfc(vferfcSC[i]); !alike(erfcSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001956 t.Errorf("Erfc(%g) = %g, want %g", vferfcSC[i], f, erfcSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001957 }
1958 }
1959}
1960
Russ Cox839a6842009-01-20 14:40:40 -08001961func TestExp(t *testing.T) {
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05001962 testExp(t, Exp, "Exp")
1963 testExp(t, ExpGo, "ExpGo")
1964}
1965
1966func testExp(t *testing.T, Exp func(float64) float64, name string) {
Russ Cox88daac72008-11-19 16:14:31 -08001967 for i := 0; i < len(vf); i++ {
Devon H. O'Dell4ffbff12010-01-29 12:54:05 -08001968 if f := Exp(vf[i]); !close(exp[i], f) {
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05001969 t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp[i])
Russ Cox88daac72008-11-19 16:14:31 -08001970 }
1971 }
Charles L. Dorian46206c52010-01-11 21:28:02 -08001972 for i := 0; i < len(vfexpSC); i++ {
1973 if f := Exp(vfexpSC[i]); !alike(expSC[i], f) {
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05001974 t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08001975 }
1976 }
Russ Cox88daac72008-11-19 16:14:31 -08001977}
1978
Charles L. Doriana0690b62010-02-01 22:21:40 -08001979func TestExpm1(t *testing.T) {
1980 for i := 0; i < len(vf); i++ {
1981 a := vf[i] / 100
1982 if f := Expm1(a); !veryclose(expm1[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001983 t.Errorf("Expm1(%g) = %g, want %g", a, f, expm1[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001984 }
1985 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001986 for i := 0; i < len(vfexpm1SC); i++ {
1987 if f := Expm1(vfexpm1SC[i]); !alike(expm1SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001988 t.Errorf("Expm1(%g) = %g, want %g", vfexpm1SC[i], f, expm1SC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001989 }
1990 }
1991}
1992
Charles L. Dorianaee14342010-02-10 00:06:41 -08001993func TestExp2(t *testing.T) {
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05001994 testExp2(t, Exp2, "Exp2")
1995 testExp2(t, Exp2Go, "Exp2Go")
1996}
1997
1998func testExp2(t *testing.T, Exp2 func(float64) float64, name string) {
Charles L. Dorianaee14342010-02-10 00:06:41 -08001999 for i := 0; i < len(vf); i++ {
2000 if f := Exp2(vf[i]); !close(exp2[i], f) {
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05002001 t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp2[i])
Charles L. Dorianaee14342010-02-10 00:06:41 -08002002 }
2003 }
2004 for i := 0; i < len(vfexpSC); i++ {
2005 if f := Exp2(vfexpSC[i]); !alike(expSC[i], f) {
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05002006 t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
2007 }
2008 }
2009 for n := -1074; n < 1024; n++ {
2010 f := Exp2(float64(n))
2011 vf := Ldexp(1, n)
2012 if f != vf {
2013 t.Errorf("%s(%d) = %g, want %g", name, n, f, vf)
Charles L. Dorianaee14342010-02-10 00:06:41 -08002014 }
2015 }
2016}
2017
Rob Pike1a13f9b2011-09-29 09:54:20 -07002018func TestAbs(t *testing.T) {
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002019 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002020 if f := Abs(vf[i]); fabs[i] != f {
2021 t.Errorf("Abs(%g) = %g, want %g", vf[i], f, fabs[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002022 }
2023 }
2024 for i := 0; i < len(vffabsSC); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002025 if f := Abs(vffabsSC[i]); !alike(fabsSC[i], f) {
2026 t.Errorf("Abs(%g) = %g, want %g", vffabsSC[i], f, fabsSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002027 }
2028 }
2029}
2030
Rob Pike1a13f9b2011-09-29 09:54:20 -07002031func TestDim(t *testing.T) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002032 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002033 if f := Dim(vf[i], 0); fdim[i] != f {
2034 t.Errorf("Dim(%g, %g) = %g, want %g", vf[i], 0.0, f, fdim[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002035 }
2036 }
Charles L. Doriane4de2e72011-12-07 14:52:17 -05002037 for i := 0; i < len(vffdimSC); i++ {
2038 if f := Dim(vffdimSC[i][0], vffdimSC[i][1]); !alike(fdimSC[i], f) {
2039 t.Errorf("Dim(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fdimSC[i])
2040 }
2041 }
Charlie Dorianec92af62015-02-22 16:12:51 -05002042 for i := 0; i < len(vffdim2SC); i++ {
2043 if f := Dim(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fdimSC[i], f) {
2044 t.Errorf("Dim(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fdimSC[i])
2045 }
2046 }
Charles L. Dorianc4653312010-02-09 13:33:12 -08002047}
2048
Russ Cox839a6842009-01-20 14:40:40 -08002049func TestFloor(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002050 for i := 0; i < len(vf); i++ {
Russ Cox04960402009-08-10 22:02:51 -07002051 if f := Floor(vf[i]); floor[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002052 t.Errorf("Floor(%g) = %g, want %g", vf[i], f, floor[i])
Russ Cox88daac72008-11-19 16:14:31 -08002053 }
2054 }
Charles L. Dorian46206c52010-01-11 21:28:02 -08002055 for i := 0; i < len(vfceilSC); i++ {
2056 if f := Floor(vfceilSC[i]); !alike(ceilSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002057 t.Errorf("Floor(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08002058 }
2059 }
Russ Cox88daac72008-11-19 16:14:31 -08002060}
2061
Rob Pike1a13f9b2011-09-29 09:54:20 -07002062func TestMax(t *testing.T) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002063 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002064 if f := Max(vf[i], ceil[i]); ceil[i] != f {
2065 t.Errorf("Max(%g, %g) = %g, want %g", vf[i], ceil[i], f, ceil[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002066 }
2067 }
Charles L. Doriane4de2e72011-12-07 14:52:17 -05002068 for i := 0; i < len(vffdimSC); i++ {
2069 if f := Max(vffdimSC[i][0], vffdimSC[i][1]); !alike(fmaxSC[i], f) {
2070 t.Errorf("Max(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fmaxSC[i])
2071 }
2072 }
Charlie Dorianec92af62015-02-22 16:12:51 -05002073 for i := 0; i < len(vffdim2SC); i++ {
2074 if f := Max(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fmaxSC[i], f) {
2075 t.Errorf("Max(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fmaxSC[i])
2076 }
2077 }
Charles L. Dorianc4653312010-02-09 13:33:12 -08002078}
2079
Rob Pike1a13f9b2011-09-29 09:54:20 -07002080func TestMin(t *testing.T) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002081 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002082 if f := Min(vf[i], floor[i]); floor[i] != f {
2083 t.Errorf("Min(%g, %g) = %g, want %g", vf[i], floor[i], f, floor[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002084 }
2085 }
Charles L. Doriane4de2e72011-12-07 14:52:17 -05002086 for i := 0; i < len(vffdimSC); i++ {
2087 if f := Min(vffdimSC[i][0], vffdimSC[i][1]); !alike(fminSC[i], f) {
2088 t.Errorf("Min(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fminSC[i])
2089 }
2090 }
Charlie Dorianec92af62015-02-22 16:12:51 -05002091 for i := 0; i < len(vffdim2SC); i++ {
2092 if f := Min(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fminSC[i], f) {
2093 t.Errorf("Min(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fminSC[i])
2094 }
2095 }
Charles L. Dorianc4653312010-02-09 13:33:12 -08002096}
2097
Rob Pike1a13f9b2011-09-29 09:54:20 -07002098func TestMod(t *testing.T) {
Charles L. Dorian3c753412010-01-11 16:20:51 -08002099 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002100 if f := Mod(10, vf[i]); fmod[i] != f {
2101 t.Errorf("Mod(10, %g) = %g, want %g", vf[i], f, fmod[i])
Charles L. Dorian3c753412010-01-11 16:20:51 -08002102 }
2103 }
2104 for i := 0; i < len(vffmodSC); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002105 if f := Mod(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
2106 t.Errorf("Mod(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08002107 }
2108 }
2109}
2110
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002111func TestFrexp(t *testing.T) {
2112 for i := 0; i < len(vf); i++ {
2113 if f, j := Frexp(vf[i]); !veryclose(frexp[i].f, f) || frexp[i].i != j {
Rob Pike1959c3a2010-09-23 13:48:56 +10002114 t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vf[i], f, j, frexp[i].f, frexp[i].i)
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002115 }
2116 }
2117 for i := 0; i < len(vffrexpSC); i++ {
2118 if f, j := Frexp(vffrexpSC[i]); !alike(frexpSC[i].f, f) || frexpSC[i].i != j {
Rob Pike1959c3a2010-09-23 13:48:56 +10002119 t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpSC[i], f, j, frexpSC[i].f, frexpSC[i].i)
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002120 }
2121 }
Eoghan Sherry13c2e622011-01-19 14:23:59 -05002122 for i := 0; i < len(vffrexpBC); i++ {
2123 if f, j := Frexp(vffrexpBC[i]); !alike(frexpBC[i].f, f) || frexpBC[i].i != j {
2124 t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpBC[i], f, j, frexpBC[i].f, frexpBC[i].i)
2125 }
2126 }
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002127}
2128
Charles L. Dorian26f0c832010-03-19 15:29:22 -07002129func TestGamma(t *testing.T) {
2130 for i := 0; i < len(vf); i++ {
2131 if f := Gamma(vf[i]); !close(gamma[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002132 t.Errorf("Gamma(%g) = %g, want %g", vf[i], f, gamma[i])
Charles L. Dorian26f0c832010-03-19 15:29:22 -07002133 }
2134 }
2135 for i := 0; i < len(vfgammaSC); i++ {
2136 if f := Gamma(vfgammaSC[i]); !alike(gammaSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002137 t.Errorf("Gamma(%g) = %g, want %g", vfgammaSC[i], f, gammaSC[i])
Charles L. Dorian26f0c832010-03-19 15:29:22 -07002138 }
2139 }
2140}
2141
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08002142func TestHypot(t *testing.T) {
2143 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002144 a := Abs(1e200 * tanh[i] * Sqrt(2))
Charles L. Doriand4ca0062010-01-26 12:53:02 -08002145 if f := Hypot(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002146 t.Errorf("Hypot(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08002147 }
2148 }
2149 for i := 0; i < len(vfhypotSC); i++ {
2150 if f := Hypot(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002151 t.Errorf("Hypot(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
Charles L. Dorian3c753412010-01-11 16:20:51 -08002152 }
2153 }
2154}
2155
Russ Cox25728032011-12-13 17:08:56 -05002156func TestHypotGo(t *testing.T) {
Russ Coxdd8dc6f2011-12-13 15:20:12 -05002157 for i := 0; i < len(vf); i++ {
2158 a := Abs(1e200 * tanh[i] * Sqrt(2))
Russ Cox25728032011-12-13 17:08:56 -05002159 if f := HypotGo(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
2160 t.Errorf("HypotGo(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
Russ Coxdd8dc6f2011-12-13 15:20:12 -05002161 }
2162 }
2163 for i := 0; i < len(vfhypotSC); i++ {
Russ Cox25728032011-12-13 17:08:56 -05002164 if f := HypotGo(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
2165 t.Errorf("HypotGo(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
Russ Coxdd8dc6f2011-12-13 15:20:12 -05002166 }
2167 }
2168}
2169
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002170func TestIlogb(t *testing.T) {
2171 for i := 0; i < len(vf); i++ {
Charles L. Dorianb233ac82010-09-28 10:15:21 -04002172 a := frexp[i].i - 1 // adjust because fr in the interval [½, 1)
2173 if e := Ilogb(vf[i]); a != e {
2174 t.Errorf("Ilogb(%g) = %d, want %d", vf[i], e, a)
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002175 }
2176 }
2177 for i := 0; i < len(vflogbSC); i++ {
2178 if e := Ilogb(vflogbSC[i]); ilogbSC[i] != e {
Rob Pike1959c3a2010-09-23 13:48:56 +10002179 t.Errorf("Ilogb(%g) = %d, want %d", vflogbSC[i], e, ilogbSC[i])
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002180 }
2181 }
Eoghan Sherry13c2e622011-01-19 14:23:59 -05002182 for i := 0; i < len(vffrexpBC); i++ {
2183 if e := Ilogb(vffrexpBC[i]); int(logbBC[i]) != e {
2184 t.Errorf("Ilogb(%g) = %d, want %d", vffrexpBC[i], e, int(logbBC[i]))
2185 }
2186 }
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002187}
2188
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002189func TestJ0(t *testing.T) {
2190 for i := 0; i < len(vf); i++ {
2191 if f := J0(vf[i]); !soclose(j0[i], f, 4e-14) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002192 t.Errorf("J0(%g) = %g, want %g", vf[i], f, j0[i])
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002193 }
2194 }
2195 for i := 0; i < len(vfj0SC); i++ {
2196 if f := J0(vfj0SC[i]); !alike(j0SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002197 t.Errorf("J0(%g) = %g, want %g", vfj0SC[i], f, j0SC[i])
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002198 }
2199 }
2200}
2201
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002202func TestJ1(t *testing.T) {
2203 for i := 0; i < len(vf); i++ {
2204 if f := J1(vf[i]); !close(j1[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002205 t.Errorf("J1(%g) = %g, want %g", vf[i], f, j1[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002206 }
2207 }
2208 for i := 0; i < len(vfj0SC); i++ {
2209 if f := J1(vfj0SC[i]); !alike(j1SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002210 t.Errorf("J1(%g) = %g, want %g", vfj0SC[i], f, j1SC[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002211 }
2212 }
2213}
2214
2215func TestJn(t *testing.T) {
2216 for i := 0; i < len(vf); i++ {
2217 if f := Jn(2, vf[i]); !close(j2[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002218 t.Errorf("Jn(2, %g) = %g, want %g", vf[i], f, j2[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002219 }
2220 if f := Jn(-3, vf[i]); !close(jM3[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002221 t.Errorf("Jn(-3, %g) = %g, want %g", vf[i], f, jM3[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002222 }
2223 }
2224 for i := 0; i < len(vfj0SC); i++ {
2225 if f := Jn(2, vfj0SC[i]); !alike(j2SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002226 t.Errorf("Jn(2, %g) = %g, want %g", vfj0SC[i], f, j2SC[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002227 }
2228 if f := Jn(-3, vfj0SC[i]); !alike(jM3SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002229 t.Errorf("Jn(-3, %g) = %g, want %g", vfj0SC[i], f, jM3SC[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002230 }
2231 }
2232}
2233
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002234func TestLdexp(t *testing.T) {
2235 for i := 0; i < len(vf); i++ {
2236 if f := Ldexp(frexp[i].f, frexp[i].i); !veryclose(vf[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002237 t.Errorf("Ldexp(%g, %d) = %g, want %g", frexp[i].f, frexp[i].i, f, vf[i])
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002238 }
2239 }
2240 for i := 0; i < len(vffrexpSC); i++ {
2241 if f := Ldexp(frexpSC[i].f, frexpSC[i].i); !alike(vffrexpSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002242 t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpSC[i].f, frexpSC[i].i, f, vffrexpSC[i])
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002243 }
2244 }
Eoghan Sherry13c2e622011-01-19 14:23:59 -05002245 for i := 0; i < len(vfldexpSC); i++ {
2246 if f := Ldexp(vfldexpSC[i].f, vfldexpSC[i].i); !alike(ldexpSC[i], f) {
2247 t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpSC[i].f, vfldexpSC[i].i, f, ldexpSC[i])
2248 }
2249 }
2250 for i := 0; i < len(vffrexpBC); i++ {
2251 if f := Ldexp(frexpBC[i].f, frexpBC[i].i); !alike(vffrexpBC[i], f) {
2252 t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpBC[i].f, frexpBC[i].i, f, vffrexpBC[i])
2253 }
2254 }
2255 for i := 0; i < len(vfldexpBC); i++ {
2256 if f := Ldexp(vfldexpBC[i].f, vfldexpBC[i].i); !alike(ldexpBC[i], f) {
2257 t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpBC[i].f, vfldexpBC[i].i, f, ldexpBC[i])
2258 }
2259 }
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002260}
2261
Charles L. Dorian78e918c2010-02-22 17:12:48 -08002262func TestLgamma(t *testing.T) {
2263 for i := 0; i < len(vf); i++ {
2264 if f, s := Lgamma(vf[i]); !close(lgamma[i].f, f) || lgamma[i].i != s {
Rob Pike1959c3a2010-09-23 13:48:56 +10002265 t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vf[i], f, s, lgamma[i].f, lgamma[i].i)
Charles L. Dorian78e918c2010-02-22 17:12:48 -08002266 }
2267 }
2268 for i := 0; i < len(vflgammaSC); i++ {
2269 if f, s := Lgamma(vflgammaSC[i]); !alike(lgammaSC[i].f, f) || lgammaSC[i].i != s {
Rob Pike1959c3a2010-09-23 13:48:56 +10002270 t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vflgammaSC[i], f, s, lgammaSC[i].f, lgammaSC[i].i)
Charles L. Dorian78e918c2010-02-22 17:12:48 -08002271 }
2272 }
2273}
2274
Russ Cox839a6842009-01-20 14:40:40 -08002275func TestLog(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002276 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002277 a := Abs(vf[i])
Russ Cox04960402009-08-10 22:02:51 -07002278 if f := Log(a); log[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002279 t.Errorf("Log(%g) = %g, want %g", a, f, log[i])
Russ Cox88daac72008-11-19 16:14:31 -08002280 }
2281 }
Russ Cox04960402009-08-10 22:02:51 -07002282 if f := Log(10); f != Ln10 {
Rob Pike1959c3a2010-09-23 13:48:56 +10002283 t.Errorf("Log(%g) = %g, want %g", 10.0, f, Ln10)
Charles L. Dorian46206c52010-01-11 21:28:02 -08002284 }
2285 for i := 0; i < len(vflogSC); i++ {
2286 if f := Log(vflogSC[i]); !alike(logSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002287 t.Errorf("Log(%g) = %g, want %g", vflogSC[i], f, logSC[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08002288 }
2289 }
2290}
2291
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002292func TestLogb(t *testing.T) {
2293 for i := 0; i < len(vf); i++ {
2294 if f := Logb(vf[i]); logb[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002295 t.Errorf("Logb(%g) = %g, want %g", vf[i], f, logb[i])
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002296 }
2297 }
2298 for i := 0; i < len(vflogbSC); i++ {
2299 if f := Logb(vflogbSC[i]); !alike(logbSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002300 t.Errorf("Logb(%g) = %g, want %g", vflogbSC[i], f, logbSC[i])
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002301 }
2302 }
Eoghan Sherry13c2e622011-01-19 14:23:59 -05002303 for i := 0; i < len(vffrexpBC); i++ {
Charles L. Dorian149d3f02012-01-05 11:04:14 -08002304 if f := Logb(vffrexpBC[i]); !alike(logbBC[i], f) {
2305 t.Errorf("Logb(%g) = %g, want %g", vffrexpBC[i], f, logbBC[i])
Eoghan Sherry13c2e622011-01-19 14:23:59 -05002306 }
2307 }
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002308}
2309
Charles L. Dorian46206c52010-01-11 21:28:02 -08002310func TestLog10(t *testing.T) {
2311 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002312 a := Abs(vf[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08002313 if f := Log10(a); !veryclose(log10[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002314 t.Errorf("Log10(%g) = %g, want %g", a, f, log10[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08002315 }
2316 }
2317 if f := Log10(E); f != Log10E {
Rob Pike1959c3a2010-09-23 13:48:56 +10002318 t.Errorf("Log10(%g) = %g, want %g", E, f, Log10E)
Charles L. Dorian46206c52010-01-11 21:28:02 -08002319 }
2320 for i := 0; i < len(vflogSC); i++ {
2321 if f := Log10(vflogSC[i]); !alike(logSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002322 t.Errorf("Log10(%g) = %g, want %g", vflogSC[i], f, logSC[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08002323 }
Russ Coxf379ea02008-11-20 10:54:02 -08002324 }
Russ Cox88daac72008-11-19 16:14:31 -08002325}
2326
Charles L. Doriana0690b62010-02-01 22:21:40 -08002327func TestLog1p(t *testing.T) {
2328 for i := 0; i < len(vf); i++ {
2329 a := vf[i] / 100
2330 if f := Log1p(a); !veryclose(log1p[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002331 t.Errorf("Log1p(%g) = %g, want %g", a, f, log1p[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08002332 }
2333 }
Russ Coxf2b5a072011-01-19 23:09:00 -05002334 a := 9.0
Charles L. Doriana0690b62010-02-01 22:21:40 -08002335 if f := Log1p(a); f != Ln10 {
Rob Pike1959c3a2010-09-23 13:48:56 +10002336 t.Errorf("Log1p(%g) = %g, want %g", a, f, Ln10)
Charles L. Doriana0690b62010-02-01 22:21:40 -08002337 }
2338 for i := 0; i < len(vflogSC); i++ {
2339 if f := Log1p(vflog1pSC[i]); !alike(log1pSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002340 t.Errorf("Log1p(%g) = %g, want %g", vflog1pSC[i], f, log1pSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08002341 }
2342 }
2343}
2344
Charles L. Dorianc4653312010-02-09 13:33:12 -08002345func TestLog2(t *testing.T) {
2346 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002347 a := Abs(vf[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002348 if f := Log2(a); !veryclose(log2[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002349 t.Errorf("Log2(%g) = %g, want %g", a, f, log2[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002350 }
2351 }
2352 if f := Log2(E); f != Log2E {
Rob Pike1959c3a2010-09-23 13:48:56 +10002353 t.Errorf("Log2(%g) = %g, want %g", E, f, Log2E)
Charles L. Dorianc4653312010-02-09 13:33:12 -08002354 }
2355 for i := 0; i < len(vflogSC); i++ {
2356 if f := Log2(vflogSC[i]); !alike(logSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002357 t.Errorf("Log2(%g) = %g, want %g", vflogSC[i], f, logSC[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002358 }
2359 }
Russ Coxa3677b52012-12-20 12:23:27 -05002360 for i := -1074; i <= 1023; i++ {
2361 f := Ldexp(1, i)
2362 l := Log2(f)
2363 if l != float64(i) {
2364 t.Errorf("Log2(2**%d) = %g, want %d", i, l, i)
2365 }
2366 }
Charles L. Dorianc4653312010-02-09 13:33:12 -08002367}
2368
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002369func TestModf(t *testing.T) {
2370 for i := 0; i < len(vf); i++ {
2371 if f, g := Modf(vf[i]); !veryclose(modf[i][0], f) || !veryclose(modf[i][1], g) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002372 t.Errorf("Modf(%g) = %g, %g, want %g, %g", vf[i], f, g, modf[i][0], modf[i][1])
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002373 }
2374 }
2375 for i := 0; i < len(vfmodfSC); i++ {
2376 if f, g := Modf(vfmodfSC[i]); !alike(modfSC[i][0], f) || !alike(modfSC[i][1], g) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002377 t.Errorf("Modf(%g) = %g, %g, want %g, %g", vfmodfSC[i], f, g, modfSC[i][0], modfSC[i][1])
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002378 }
2379 }
2380}
2381
Robert Griesemera9035ed2014-06-11 09:09:37 -07002382func TestNextafter32(t *testing.T) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002383 for i := 0; i < len(vf); i++ {
Robert Griesemera9035ed2014-06-11 09:09:37 -07002384 vfi := float32(vf[i])
2385 if f := Nextafter32(vfi, 10); nextafter32[i] != f {
2386 t.Errorf("Nextafter32(%g, %g) = %g want %g", vfi, 10.0, f, nextafter32[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002387 }
2388 }
Robert Griesemera9035ed2014-06-11 09:09:37 -07002389 for i := 0; i < len(vfnextafter32SC); i++ {
2390 if f := Nextafter32(vfnextafter32SC[i][0], vfnextafter32SC[i][1]); !alike(float64(nextafter32SC[i]), float64(f)) {
2391 t.Errorf("Nextafter32(%g, %g) = %g want %g", vfnextafter32SC[i][0], vfnextafter32SC[i][1], f, nextafter32SC[i])
2392 }
2393 }
2394}
2395
2396func TestNextafter64(t *testing.T) {
2397 for i := 0; i < len(vf); i++ {
Robert Griesemer3d68dc32014-06-11 14:24:16 -07002398 if f := Nextafter(vf[i], 10); nextafter64[i] != f {
Robert Griesemera9035ed2014-06-11 09:09:37 -07002399 t.Errorf("Nextafter64(%g, %g) = %g want %g", vf[i], 10.0, f, nextafter64[i])
2400 }
2401 }
2402 for i := 0; i < len(vfnextafter64SC); i++ {
Robert Griesemer3d68dc32014-06-11 14:24:16 -07002403 if f := Nextafter(vfnextafter64SC[i][0], vfnextafter64SC[i][1]); !alike(nextafter64SC[i], f) {
Robert Griesemera9035ed2014-06-11 09:09:37 -07002404 t.Errorf("Nextafter64(%g, %g) = %g want %g", vfnextafter64SC[i][0], vfnextafter64SC[i][1], f, nextafter64SC[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002405 }
2406 }
2407}
2408
Russ Cox839a6842009-01-20 14:40:40 -08002409func TestPow(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002410 for i := 0; i < len(vf); i++ {
Russ Cox04960402009-08-10 22:02:51 -07002411 if f := Pow(10, vf[i]); !close(pow[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002412 t.Errorf("Pow(10, %g) = %g, want %g", vf[i], f, pow[i])
Russ Cox88daac72008-11-19 16:14:31 -08002413 }
2414 }
Charles L. Dorianfd1db672010-01-08 14:12:10 -08002415 for i := 0; i < len(vfpowSC); i++ {
2416 if f := Pow(vfpowSC[i][0], vfpowSC[i][1]); !alike(powSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002417 t.Errorf("Pow(%g, %g) = %g, want %g", vfpowSC[i][0], vfpowSC[i][1], f, powSC[i])
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08002418 }
2419 }
Russ Cox88daac72008-11-19 16:14:31 -08002420}
2421
Volker Doblerf78e7d32011-08-24 13:59:52 -04002422func TestPow10(t *testing.T) {
2423 for i := 0; i < len(vfpow10SC); i++ {
2424 if f := Pow10(vfpow10SC[i]); !alike(pow10SC[i], f) {
2425 t.Errorf("Pow10(%d) = %g, want %g", vfpow10SC[i], f, pow10SC[i])
2426 }
2427 }
2428}
2429
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002430func TestRemainder(t *testing.T) {
2431 for i := 0; i < len(vf); i++ {
2432 if f := Remainder(10, vf[i]); remainder[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002433 t.Errorf("Remainder(10, %g) = %g, want %g", vf[i], f, remainder[i])
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002434 }
2435 }
2436 for i := 0; i < len(vffmodSC); i++ {
2437 if f := Remainder(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002438 t.Errorf("Remainder(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002439 }
2440 }
2441}
2442
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07002443func TestSignbit(t *testing.T) {
2444 for i := 0; i < len(vf); i++ {
2445 if f := Signbit(vf[i]); signbit[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002446 t.Errorf("Signbit(%g) = %t, want %t", vf[i], f, signbit[i])
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07002447 }
2448 }
2449 for i := 0; i < len(vfsignbitSC); i++ {
2450 if f := Signbit(vfsignbitSC[i]); signbitSC[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002451 t.Errorf("Signbit(%g) = %t, want %t", vfsignbitSC[i], f, signbitSC[i])
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07002452 }
2453 }
2454}
Russ Cox839a6842009-01-20 14:40:40 -08002455func TestSin(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002456 for i := 0; i < len(vf); i++ {
Charles L. Dorian739c4422011-10-31 14:26:05 -04002457 if f := Sin(vf[i]); !veryclose(sin[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002458 t.Errorf("Sin(%g) = %g, want %g", vf[i], f, sin[i])
Russ Cox88daac72008-11-19 16:14:31 -08002459 }
2460 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002461 for i := 0; i < len(vfsinSC); i++ {
2462 if f := Sin(vfsinSC[i]); !alike(sinSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002463 t.Errorf("Sin(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002464 }
2465 }
Russ Cox88daac72008-11-19 16:14:31 -08002466}
2467
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002468func TestSincos(t *testing.T) {
2469 for i := 0; i < len(vf); i++ {
Charles L. Dorian739c4422011-10-31 14:26:05 -04002470 if s, c := Sincos(vf[i]); !veryclose(sin[i], s) || !veryclose(cos[i], c) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002471 t.Errorf("Sincos(%g) = %g, %g want %g, %g", vf[i], s, c, sin[i], cos[i])
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002472 }
2473 }
2474}
2475
Russ Cox839a6842009-01-20 14:40:40 -08002476func TestSinh(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002477 for i := 0; i < len(vf); i++ {
Devon H. O'Dell4ffbff12010-01-29 12:54:05 -08002478 if f := Sinh(vf[i]); !close(sinh[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002479 t.Errorf("Sinh(%g) = %g, want %g", vf[i], f, sinh[i])
Russ Cox88daac72008-11-19 16:14:31 -08002480 }
2481 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002482 for i := 0; i < len(vfsinhSC); i++ {
2483 if f := Sinh(vfsinhSC[i]); !alike(sinhSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002484 t.Errorf("Sinh(%g) = %g, want %g", vfsinhSC[i], f, sinhSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002485 }
2486 }
Russ Cox88daac72008-11-19 16:14:31 -08002487}
2488
Russ Cox839a6842009-01-20 14:40:40 -08002489func TestSqrt(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002490 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002491 a := Abs(vf[i])
Russ Cox093146b2010-01-11 11:25:37 -08002492 if f := SqrtGo(a); sqrt[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002493 t.Errorf("SqrtGo(%g) = %g, want %g", a, f, sqrt[i])
Russ Cox093146b2010-01-11 11:25:37 -08002494 }
Rob Pike1a13f9b2011-09-29 09:54:20 -07002495 a = Abs(vf[i])
Russ Cox093146b2010-01-11 11:25:37 -08002496 if f := Sqrt(a); sqrt[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002497 t.Errorf("Sqrt(%g) = %g, want %g", a, f, sqrt[i])
Russ Cox88daac72008-11-19 16:14:31 -08002498 }
2499 }
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08002500 for i := 0; i < len(vfsqrtSC); i++ {
Charles L. Dorian879241d2010-05-18 22:16:01 -07002501 if f := SqrtGo(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002502 t.Errorf("SqrtGo(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
Charles L. Dorian879241d2010-05-18 22:16:01 -07002503 }
2504 if f := Sqrt(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002505 t.Errorf("Sqrt(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08002506 }
2507 }
Russ Cox88daac72008-11-19 16:14:31 -08002508}
2509
Russ Cox839a6842009-01-20 14:40:40 -08002510func TestTan(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002511 for i := 0; i < len(vf); i++ {
Charles L. Doriancefee3c2011-11-02 14:01:21 -04002512 if f := Tan(vf[i]); !veryclose(tan[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002513 t.Errorf("Tan(%g) = %g, want %g", vf[i], f, tan[i])
Russ Cox88daac72008-11-19 16:14:31 -08002514 }
2515 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002516 // same special cases as Sin
2517 for i := 0; i < len(vfsinSC); i++ {
2518 if f := Tan(vfsinSC[i]); !alike(sinSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002519 t.Errorf("Tan(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002520 }
2521 }
Russ Cox88daac72008-11-19 16:14:31 -08002522}
2523
Russ Cox839a6842009-01-20 14:40:40 -08002524func TestTanh(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002525 for i := 0; i < len(vf); i++ {
Russ Cox04960402009-08-10 22:02:51 -07002526 if f := Tanh(vf[i]); !veryclose(tanh[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002527 t.Errorf("Tanh(%g) = %g, want %g", vf[i], f, tanh[i])
Russ Cox88daac72008-11-19 16:14:31 -08002528 }
2529 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002530 for i := 0; i < len(vftanhSC); i++ {
2531 if f := Tanh(vftanhSC[i]); !alike(tanhSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002532 t.Errorf("Tanh(%g) = %g, want %g", vftanhSC[i], f, tanhSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002533 }
2534 }
Russ Cox88daac72008-11-19 16:14:31 -08002535}
2536
Charles L. Doriana0690b62010-02-01 22:21:40 -08002537func TestTrunc(t *testing.T) {
2538 for i := 0; i < len(vf); i++ {
2539 if f := Trunc(vf[i]); trunc[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002540 t.Errorf("Trunc(%g) = %g, want %g", vf[i], f, trunc[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08002541 }
2542 }
2543 for i := 0; i < len(vfceilSC); i++ {
2544 if f := Trunc(vfceilSC[i]); !alike(ceilSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002545 t.Errorf("Trunc(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08002546 }
2547 }
2548}
2549
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002550func TestY0(t *testing.T) {
2551 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002552 a := Abs(vf[i])
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002553 if f := Y0(a); !close(y0[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002554 t.Errorf("Y0(%g) = %g, want %g", a, f, y0[i])
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002555 }
2556 }
2557 for i := 0; i < len(vfy0SC); i++ {
2558 if f := Y0(vfy0SC[i]); !alike(y0SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002559 t.Errorf("Y0(%g) = %g, want %g", vfy0SC[i], f, y0SC[i])
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002560 }
2561 }
2562}
2563
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002564func TestY1(t *testing.T) {
2565 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002566 a := Abs(vf[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002567 if f := Y1(a); !soclose(y1[i], f, 2e-14) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002568 t.Errorf("Y1(%g) = %g, want %g", a, f, y1[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002569 }
2570 }
2571 for i := 0; i < len(vfy0SC); i++ {
2572 if f := Y1(vfy0SC[i]); !alike(y1SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002573 t.Errorf("Y1(%g) = %g, want %g", vfy0SC[i], f, y1SC[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002574 }
2575 }
2576}
2577
2578func TestYn(t *testing.T) {
2579 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002580 a := Abs(vf[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002581 if f := Yn(2, a); !close(y2[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002582 t.Errorf("Yn(2, %g) = %g, want %g", a, f, y2[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002583 }
2584 if f := Yn(-3, a); !close(yM3[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002585 t.Errorf("Yn(-3, %g) = %g, want %g", a, f, yM3[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002586 }
2587 }
2588 for i := 0; i < len(vfy0SC); i++ {
2589 if f := Yn(2, vfy0SC[i]); !alike(y2SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002590 t.Errorf("Yn(2, %g) = %g, want %g", vfy0SC[i], f, y2SC[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002591 }
2592 if f := Yn(-3, vfy0SC[i]); !alike(yM3SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002593 t.Errorf("Yn(-3, %g) = %g, want %g", vfy0SC[i], f, yM3SC[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002594 }
2595 }
2596}
2597
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002598// Check that math functions of high angle values
Charles L. Dorian377ac332011-11-04 15:35:59 -04002599// return accurate results. [Since (vf[i] + large) - large != vf[i],
2600// testing for Trig(vf[i] + large) == Trig(vf[i]), where large is
2601// a multiple of 2*Pi, is misleading.]
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002602func TestLargeCos(t *testing.T) {
2603 large := float64(100000 * Pi)
2604 for i := 0; i < len(vf); i++ {
Charles L. Dorian377ac332011-11-04 15:35:59 -04002605 f1 := cosLarge[i]
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002606 f2 := Cos(vf[i] + large)
Charles L. Dorian377ac332011-11-04 15:35:59 -04002607 if !close(f1, f2) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002608 t.Errorf("Cos(%g) = %g, want %g", vf[i]+large, f2, f1)
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002609 }
2610 }
2611}
2612
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002613func TestLargeSin(t *testing.T) {
Robert Griesemera3d10452009-12-15 15:35:38 -08002614 large := float64(100000 * Pi)
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002615 for i := 0; i < len(vf); i++ {
Charles L. Dorian377ac332011-11-04 15:35:59 -04002616 f1 := sinLarge[i]
Robert Griesemera3d10452009-12-15 15:35:38 -08002617 f2 := Sin(vf[i] + large)
Charles L. Dorian377ac332011-11-04 15:35:59 -04002618 if !close(f1, f2) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002619 t.Errorf("Sin(%g) = %g, want %g", vf[i]+large, f2, f1)
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002620 }
2621 }
2622}
2623
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002624func TestLargeSincos(t *testing.T) {
Robert Griesemera3d10452009-12-15 15:35:38 -08002625 large := float64(100000 * Pi)
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002626 for i := 0; i < len(vf); i++ {
Charles L. Dorian377ac332011-11-04 15:35:59 -04002627 f1, g1 := sinLarge[i], cosLarge[i]
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002628 f2, g2 := Sincos(vf[i] + large)
Charles L. Dorian377ac332011-11-04 15:35:59 -04002629 if !close(f1, f2) || !close(g1, g2) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002630 t.Errorf("Sincos(%g) = %g, %g, want %g, %g", vf[i]+large, f2, g2, f1, g1)
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002631 }
2632 }
2633}
2634
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002635func TestLargeTan(t *testing.T) {
Robert Griesemera3d10452009-12-15 15:35:38 -08002636 large := float64(100000 * Pi)
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002637 for i := 0; i < len(vf); i++ {
Charles L. Dorian377ac332011-11-04 15:35:59 -04002638 f1 := tanLarge[i]
Robert Griesemera3d10452009-12-15 15:35:38 -08002639 f2 := Tan(vf[i] + large)
Charles L. Dorian377ac332011-11-04 15:35:59 -04002640 if !close(f1, f2) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002641 t.Errorf("Tan(%g) = %g, want %g", vf[i]+large, f2, f1)
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002642 }
2643 }
2644}
2645
Russ Coxa3382312009-11-15 12:57:09 -08002646// Check that math constants are accepted by compiler
Shenghou Ma4cfa9e32012-01-14 10:59:45 -08002647// and have right value (assumes strconv.ParseFloat works).
Brad Fitzpatrick2ae77372015-07-10 17:17:11 -06002648// https://golang.org/issue/201
Russ Coxa3382312009-11-15 12:57:09 -08002649
2650type floatTest struct {
Robert Griesemera3d10452009-12-15 15:35:38 -08002651 val interface{}
2652 name string
2653 str string
Russ Coxa3382312009-11-15 12:57:09 -08002654}
2655
2656var floatTests = []floatTest{
Robert Griesemer34788912010-10-22 10:06:33 -07002657 {float64(MaxFloat64), "MaxFloat64", "1.7976931348623157e+308"},
Russ Cox9282a762010-12-10 11:39:09 -08002658 {float64(SmallestNonzeroFloat64), "SmallestNonzeroFloat64", "5e-324"},
Robert Griesemer34788912010-10-22 10:06:33 -07002659 {float32(MaxFloat32), "MaxFloat32", "3.4028235e+38"},
Russ Cox9282a762010-12-10 11:39:09 -08002660 {float32(SmallestNonzeroFloat32), "SmallestNonzeroFloat32", "1e-45"},
Russ Coxa3382312009-11-15 12:57:09 -08002661}
2662
2663func TestFloatMinMax(t *testing.T) {
2664 for _, tt := range floatTests {
Robert Griesemera3d10452009-12-15 15:35:38 -08002665 s := fmt.Sprint(tt.val)
Russ Coxa3382312009-11-15 12:57:09 -08002666 if s != tt.str {
2667 t.Errorf("Sprint(%v) = %s, want %s", tt.name, s, tt.str)
2668 }
2669 }
2670}
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08002671
2672// Benchmarks
2673
Charles L. Doriana0690b62010-02-01 22:21:40 -08002674func BenchmarkAcos(b *testing.B) {
Charles L. Dorianfd1db672010-01-08 14:12:10 -08002675 for i := 0; i < b.N; i++ {
Charles L. Doriana0690b62010-02-01 22:21:40 -08002676 Acos(.5)
2677 }
2678}
2679
2680func BenchmarkAcosh(b *testing.B) {
2681 for i := 0; i < b.N; i++ {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002682 Acosh(1.5)
Charles L. Dorianfd1db672010-01-08 14:12:10 -08002683 }
2684}
2685
2686func BenchmarkAsin(b *testing.B) {
2687 for i := 0; i < b.N; i++ {
2688 Asin(.5)
2689 }
2690}
2691
Charles L. Doriana0690b62010-02-01 22:21:40 -08002692func BenchmarkAsinh(b *testing.B) {
Charles L. Dorianfd1db672010-01-08 14:12:10 -08002693 for i := 0; i < b.N; i++ {
Charles L. Doriana0690b62010-02-01 22:21:40 -08002694 Asinh(.5)
2695 }
2696}
2697
2698func BenchmarkAtan(b *testing.B) {
2699 for i := 0; i < b.N; i++ {
2700 Atan(.5)
2701 }
2702}
2703
2704func BenchmarkAtanh(b *testing.B) {
2705 for i := 0; i < b.N; i++ {
2706 Atanh(.5)
2707 }
2708}
2709
Charles L. Dorian072b5602010-02-05 14:55:19 -08002710func BenchmarkAtan2(b *testing.B) {
2711 for i := 0; i < b.N; i++ {
2712 Atan2(.5, 1)
2713 }
2714}
2715
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002716func BenchmarkCbrt(b *testing.B) {
2717 for i := 0; i < b.N; i++ {
2718 Cbrt(10)
2719 }
2720}
2721
Charles L. Doriana0690b62010-02-01 22:21:40 -08002722func BenchmarkCeil(b *testing.B) {
2723 for i := 0; i < b.N; i++ {
2724 Ceil(.5)
2725 }
2726}
2727
2728func BenchmarkCopysign(b *testing.B) {
2729 for i := 0; i < b.N; i++ {
2730 Copysign(.5, -1)
2731 }
2732}
2733
2734func BenchmarkCos(b *testing.B) {
2735 for i := 0; i < b.N; i++ {
2736 Cos(.5)
2737 }
2738}
2739
2740func BenchmarkCosh(b *testing.B) {
2741 for i := 0; i < b.N; i++ {
2742 Cosh(2.5)
2743 }
2744}
2745
2746func BenchmarkErf(b *testing.B) {
2747 for i := 0; i < b.N; i++ {
2748 Erf(.5)
2749 }
2750}
2751
2752func BenchmarkErfc(b *testing.B) {
2753 for i := 0; i < b.N; i++ {
2754 Erfc(.5)
2755 }
2756}
2757
2758func BenchmarkExp(b *testing.B) {
2759 for i := 0; i < b.N; i++ {
2760 Exp(.5)
2761 }
2762}
2763
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05002764func BenchmarkExpGo(b *testing.B) {
2765 for i := 0; i < b.N; i++ {
2766 ExpGo(.5)
2767 }
2768}
2769
Charles L. Doriana0690b62010-02-01 22:21:40 -08002770func BenchmarkExpm1(b *testing.B) {
2771 for i := 0; i < b.N; i++ {
2772 Expm1(.5)
2773 }
2774}
2775
Charles L. Dorianaee14342010-02-10 00:06:41 -08002776func BenchmarkExp2(b *testing.B) {
2777 for i := 0; i < b.N; i++ {
Charles L. Dorian3fb8d2a2010-06-03 15:04:22 -07002778 Exp2(.5)
Charles L. Dorianaee14342010-02-10 00:06:41 -08002779 }
2780}
2781
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05002782func BenchmarkExp2Go(b *testing.B) {
2783 for i := 0; i < b.N; i++ {
2784 Exp2Go(.5)
2785 }
2786}
2787
Rob Pike1a13f9b2011-09-29 09:54:20 -07002788func BenchmarkAbs(b *testing.B) {
Charles L. Doriana0690b62010-02-01 22:21:40 -08002789 for i := 0; i < b.N; i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002790 Abs(.5)
Charles L. Doriana0690b62010-02-01 22:21:40 -08002791 }
2792}
2793
Rob Pike1a13f9b2011-09-29 09:54:20 -07002794func BenchmarkDim(b *testing.B) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002795 for i := 0; i < b.N; i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002796 Dim(10, 3)
Charles L. Dorianc4653312010-02-09 13:33:12 -08002797 }
2798}
2799
Charles L. Doriana0117ba2010-06-30 14:44:27 -07002800func BenchmarkFloor(b *testing.B) {
2801 for i := 0; i < b.N; i++ {
2802 Floor(.5)
2803 }
2804}
2805
Rob Pike1a13f9b2011-09-29 09:54:20 -07002806func BenchmarkMax(b *testing.B) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002807 for i := 0; i < b.N; i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002808 Max(10, 3)
Charles L. Dorianc4653312010-02-09 13:33:12 -08002809 }
2810}
2811
Rob Pike1a13f9b2011-09-29 09:54:20 -07002812func BenchmarkMin(b *testing.B) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002813 for i := 0; i < b.N; i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002814 Min(10, 3)
Charles L. Dorianc4653312010-02-09 13:33:12 -08002815 }
2816}
2817
Rob Pike1a13f9b2011-09-29 09:54:20 -07002818func BenchmarkMod(b *testing.B) {
Charles L. Doriana0690b62010-02-01 22:21:40 -08002819 for i := 0; i < b.N; i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002820 Mod(10, 3)
Charles L. Doriana0690b62010-02-01 22:21:40 -08002821 }
2822}
2823
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002824func BenchmarkFrexp(b *testing.B) {
2825 for i := 0; i < b.N; i++ {
2826 Frexp(8)
2827 }
2828}
2829
Charles L. Dorian26f0c832010-03-19 15:29:22 -07002830func BenchmarkGamma(b *testing.B) {
2831 for i := 0; i < b.N; i++ {
2832 Gamma(2.5)
2833 }
2834}
2835
Charles L. Doriana0690b62010-02-01 22:21:40 -08002836func BenchmarkHypot(b *testing.B) {
2837 for i := 0; i < b.N; i++ {
2838 Hypot(3, 4)
2839 }
2840}
2841
Russ Cox25728032011-12-13 17:08:56 -05002842func BenchmarkHypotGo(b *testing.B) {
Charles L. Dorian067fe282010-03-05 16:45:39 -08002843 for i := 0; i < b.N; i++ {
Russ Cox25728032011-12-13 17:08:56 -05002844 HypotGo(3, 4)
Charles L. Dorian067fe282010-03-05 16:45:39 -08002845 }
2846}
2847
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002848func BenchmarkIlogb(b *testing.B) {
2849 for i := 0; i < b.N; i++ {
2850 Ilogb(.5)
2851 }
2852}
2853
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002854func BenchmarkJ0(b *testing.B) {
2855 for i := 0; i < b.N; i++ {
2856 J0(2.5)
2857 }
2858}
2859
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002860func BenchmarkJ1(b *testing.B) {
2861 for i := 0; i < b.N; i++ {
2862 J1(2.5)
2863 }
2864}
2865
2866func BenchmarkJn(b *testing.B) {
2867 for i := 0; i < b.N; i++ {
2868 Jn(2, 2.5)
2869 }
2870}
2871
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002872func BenchmarkLdexp(b *testing.B) {
2873 for i := 0; i < b.N; i++ {
2874 Ldexp(.5, 2)
2875 }
2876}
2877
Charles L. Dorian78e918c2010-02-22 17:12:48 -08002878func BenchmarkLgamma(b *testing.B) {
2879 for i := 0; i < b.N; i++ {
2880 Lgamma(2.5)
2881 }
2882}
2883
Charles L. Doriana0690b62010-02-01 22:21:40 -08002884func BenchmarkLog(b *testing.B) {
2885 for i := 0; i < b.N; i++ {
2886 Log(.5)
2887 }
2888}
2889
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002890func BenchmarkLogb(b *testing.B) {
2891 for i := 0; i < b.N; i++ {
2892 Logb(.5)
2893 }
2894}
2895
Charles L. Doriana0690b62010-02-01 22:21:40 -08002896func BenchmarkLog1p(b *testing.B) {
2897 for i := 0; i < b.N; i++ {
2898 Log1p(.5)
Charles L. Dorianfd1db672010-01-08 14:12:10 -08002899 }
2900}
Charles L. Dorian5336cd82010-01-10 15:41:07 -08002901
Charles L. Doriana0117ba2010-06-30 14:44:27 -07002902func BenchmarkLog10(b *testing.B) {
2903 for i := 0; i < b.N; i++ {
2904 Log10(.5)
2905 }
2906}
2907
Charles L. Dorianc4653312010-02-09 13:33:12 -08002908func BenchmarkLog2(b *testing.B) {
2909 for i := 0; i < b.N; i++ {
2910 Log2(.5)
2911 }
2912}
2913
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002914func BenchmarkModf(b *testing.B) {
2915 for i := 0; i < b.N; i++ {
2916 Modf(1.5)
2917 }
2918}
2919
Robert Griesemera9035ed2014-06-11 09:09:37 -07002920func BenchmarkNextafter32(b *testing.B) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002921 for i := 0; i < b.N; i++ {
Robert Griesemera9035ed2014-06-11 09:09:37 -07002922 Nextafter32(.5, 1)
2923 }
2924}
2925
2926func BenchmarkNextafter64(b *testing.B) {
2927 for i := 0; i < b.N; i++ {
Robert Griesemer3d68dc32014-06-11 14:24:16 -07002928 Nextafter(.5, 1)
Charles L. Dorianc4653312010-02-09 13:33:12 -08002929 }
2930}
2931
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08002932func BenchmarkPowInt(b *testing.B) {
2933 for i := 0; i < b.N; i++ {
2934 Pow(2, 2)
2935 }
2936}
2937
2938func BenchmarkPowFrac(b *testing.B) {
2939 for i := 0; i < b.N; i++ {
2940 Pow(2.5, 1.5)
2941 }
2942}
2943
Volker Doblerf78e7d32011-08-24 13:59:52 -04002944func BenchmarkPow10Pos(b *testing.B) {
2945 for i := 0; i < b.N; i++ {
2946 Pow10(300)
2947 }
2948}
2949
2950func BenchmarkPow10Neg(b *testing.B) {
2951 for i := 0; i < b.N; i++ {
2952 Pow10(-300)
2953 }
2954}
2955
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002956func BenchmarkRemainder(b *testing.B) {
2957 for i := 0; i < b.N; i++ {
2958 Remainder(10, 3)
2959 }
2960}
2961
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07002962func BenchmarkSignbit(b *testing.B) {
2963 for i := 0; i < b.N; i++ {
2964 Signbit(2.5)
2965 }
2966}
2967
Charles L. Doriana0690b62010-02-01 22:21:40 -08002968func BenchmarkSin(b *testing.B) {
2969 for i := 0; i < b.N; i++ {
2970 Sin(.5)
2971 }
2972}
2973
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002974func BenchmarkSincos(b *testing.B) {
2975 for i := 0; i < b.N; i++ {
2976 Sincos(.5)
2977 }
2978}
2979
Charles L. Doriana0690b62010-02-01 22:21:40 -08002980func BenchmarkSinh(b *testing.B) {
2981 for i := 0; i < b.N; i++ {
2982 Sinh(2.5)
2983 }
2984}
2985
Russ Cox92dba0d2015-04-01 16:02:34 -04002986var Global float64
2987
Charles L. Dorian5336cd82010-01-10 15:41:07 -08002988func BenchmarkSqrt(b *testing.B) {
Russ Cox92dba0d2015-04-01 16:02:34 -04002989 x, y := 0.0, 10.0
Charles L. Dorian5336cd82010-01-10 15:41:07 -08002990 for i := 0; i < b.N; i++ {
Russ Cox92dba0d2015-04-01 16:02:34 -04002991 x += Sqrt(y)
Charles L. Dorian5336cd82010-01-10 15:41:07 -08002992 }
Russ Cox92dba0d2015-04-01 16:02:34 -04002993 Global = x
2994}
2995
2996func BenchmarkSqrtIndirect(b *testing.B) {
2997 x, y := 0.0, 10.0
2998 f := Sqrt
2999 for i := 0; i < b.N; i++ {
3000 x += f(y)
3001 }
3002 Global = x
Charles L. Dorian5336cd82010-01-10 15:41:07 -08003003}
Charles L. Doriana0690b62010-02-01 22:21:40 -08003004
3005func BenchmarkSqrtGo(b *testing.B) {
Russ Cox92dba0d2015-04-01 16:02:34 -04003006 x, y := 0.0, 10.0
Charles L. Doriana0690b62010-02-01 22:21:40 -08003007 for i := 0; i < b.N; i++ {
Russ Cox92dba0d2015-04-01 16:02:34 -04003008 x += SqrtGo(y)
3009 }
3010 Global = x
3011}
3012
3013func isPrime(i int) bool {
3014 // Yes, this is a dumb way to write this code,
3015 // but calling Sqrt repeatedly in this way demonstrates
3016 // the benefit of using a direct SQRT instruction on systems
3017 // that have one, whereas the obvious loop seems not to
3018 // demonstrate such a benefit.
3019 for j := 2; float64(j) <= Sqrt(float64(i)); j++ {
3020 if i%j == 0 {
3021 return false
3022 }
3023 }
3024 return true
3025}
3026
3027func BenchmarkSqrtPrime(b *testing.B) {
3028 any := false
3029 for i := 0; i < b.N; i++ {
3030 if isPrime(100003) {
3031 any = true
3032 }
3033 }
3034 if any {
3035 Global = 1
Charles L. Doriana0690b62010-02-01 22:21:40 -08003036 }
3037}
3038
3039func BenchmarkTan(b *testing.B) {
3040 for i := 0; i < b.N; i++ {
3041 Tan(.5)
3042 }
3043}
3044
3045func BenchmarkTanh(b *testing.B) {
3046 for i := 0; i < b.N; i++ {
3047 Tanh(2.5)
3048 }
3049}
3050func BenchmarkTrunc(b *testing.B) {
3051 for i := 0; i < b.N; i++ {
3052 Trunc(.5)
3053 }
3054}
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07003055
3056func BenchmarkY0(b *testing.B) {
3057 for i := 0; i < b.N; i++ {
3058 Y0(2.5)
3059 }
3060}
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07003061
3062func BenchmarkY1(b *testing.B) {
3063 for i := 0; i < b.N; i++ {
3064 Y1(2.5)
3065 }
3066}
3067
3068func BenchmarkYn(b *testing.B) {
3069 for i := 0; i < b.N; i++ {
3070 Yn(2, 2.5)
3071 }
3072}