Source file
src/math/all_test.go
1
2
3
4
5 package math_test
6
7 import (
8 "fmt"
9 . "math"
10 "testing"
11 "unsafe"
12 )
13
14 var vf = []float64{
15 4.9790119248836735e+00,
16 7.7388724745781045e+00,
17 -2.7688005719200159e-01,
18 -5.0106036182710749e+00,
19 9.6362937071984173e+00,
20 2.9263772392439646e+00,
21 5.2290834314593066e+00,
22 2.7279399104360102e+00,
23 1.8253080916808550e+00,
24 -8.6859247685756013e+00,
25 }
26
27
28
29
30
31
32 var acos = []float64{
33 1.0496193546107222142571536e+00,
34 6.8584012813664425171660692e-01,
35 1.5984878714577160325521819e+00,
36 2.0956199361475859327461799e+00,
37 2.7053008467824138592616927e-01,
38 1.2738121680361776018155625e+00,
39 1.0205369421140629186287407e+00,
40 1.2945003481781246062157835e+00,
41 1.3872364345374451433846657e+00,
42 2.6231510803970463967294145e+00,
43 }
44 var acosh = []float64{
45 2.4743347004159012494457618e+00,
46 2.8576385344292769649802701e+00,
47 7.2796961502981066190593175e-01,
48 2.4796794418831451156471977e+00,
49 3.0552020742306061857212962e+00,
50 2.044238592688586588942468e+00,
51 2.5158701513104513595766636e+00,
52 1.99050839282411638174299e+00,
53 1.6988625798424034227205445e+00,
54 2.9611454842470387925531875e+00,
55 }
56 var asin = []float64{
57 5.2117697218417440497416805e-01,
58 8.8495619865825236751471477e-01,
59 -02.769154466281941332086016e-02,
60 -5.2482360935268931351485822e-01,
61 1.3002662421166552333051524e+00,
62 2.9698415875871901741575922e-01,
63 5.5025938468083370060258102e-01,
64 2.7629597861677201301553823e-01,
65 1.83559892257451475846656e-01,
66 -1.0523547536021497774980928e+00,
67 }
68 var asinh = []float64{
69 2.3083139124923523427628243e+00,
70 2.743551594301593620039021e+00,
71 -2.7345908534880091229413487e-01,
72 -2.3145157644718338650499085e+00,
73 2.9613652154015058521951083e+00,
74 1.7949041616585821933067568e+00,
75 2.3564032905983506405561554e+00,
76 1.7287118790768438878045346e+00,
77 1.3626658083714826013073193e+00,
78 -2.8581483626513914445234004e+00,
79 }
80 var atan = []float64{
81 1.372590262129621651920085e+00,
82 1.442290609645298083020664e+00,
83 -2.7011324359471758245192595e-01,
84 -1.3738077684543379452781531e+00,
85 1.4673921193587666049154681e+00,
86 1.2415173565870168649117764e+00,
87 1.3818396865615168979966498e+00,
88 1.2194305844639670701091426e+00,
89 1.0696031952318783760193244e+00,
90 -1.4561721938838084990898679e+00,
91 }
92 var atanh = []float64{
93 5.4651163712251938116878204e-01,
94 1.0299474112843111224914709e+00,
95 -2.7695084420740135145234906e-02,
96 -5.5072096119207195480202529e-01,
97 1.9943940993171843235906642e+00,
98 3.01448604578089708203017e-01,
99 5.8033427206942188834370595e-01,
100 2.7987997499441511013958297e-01,
101 1.8459947964298794318714228e-01,
102 -1.3273186910532645867272502e+00,
103 }
104 var atan2 = []float64{
105 1.1088291730037004444527075e+00,
106 9.1218183188715804018797795e-01,
107 1.5984772603216203736068915e+00,
108 2.0352918654092086637227327e+00,
109 8.0391819139044720267356014e-01,
110 1.2861075249894661588866752e+00,
111 1.0889904479131695712182587e+00,
112 1.3044821793397925293797357e+00,
113 1.3902530903455392306872261e+00,
114 2.2859857424479142655411058e+00,
115 }
116 var cbrt = []float64{
117 1.7075799841925094446722675e+00,
118 1.9779982212970353936691498e+00,
119 -6.5177429017779910853339447e-01,
120 -1.7111838886544019873338113e+00,
121 2.1279920909827937423960472e+00,
122 1.4303536770460741452312367e+00,
123 1.7357021059106154902341052e+00,
124 1.3972633462554328350552916e+00,
125 1.2221149580905388454977636e+00,
126 -2.0556003730500069110343596e+00,
127 }
128 var ceil = []float64{
129 5.0000000000000000e+00,
130 8.0000000000000000e+00,
131 Copysign(0, -1),
132 -5.0000000000000000e+00,
133 1.0000000000000000e+01,
134 3.0000000000000000e+00,
135 6.0000000000000000e+00,
136 3.0000000000000000e+00,
137 2.0000000000000000e+00,
138 -8.0000000000000000e+00,
139 }
140 var copysign = []float64{
141 -4.9790119248836735e+00,
142 -7.7388724745781045e+00,
143 -2.7688005719200159e-01,
144 -5.0106036182710749e+00,
145 -9.6362937071984173e+00,
146 -2.9263772392439646e+00,
147 -5.2290834314593066e+00,
148 -2.7279399104360102e+00,
149 -1.8253080916808550e+00,
150 -8.6859247685756013e+00,
151 }
152 var cos = []float64{
153 2.634752140995199110787593e-01,
154 1.148551260848219865642039e-01,
155 9.6191297325640768154550453e-01,
156 2.938141150061714816890637e-01,
157 -9.777138189897924126294461e-01,
158 -9.7693041344303219127199518e-01,
159 4.940088096948647263961162e-01,
160 -9.1565869021018925545016502e-01,
161 -2.517729313893103197176091e-01,
162 -7.39241351595676573201918e-01,
163 }
164
165
166 var cosLarge = []float64{
167 2.634752141185559426744e-01,
168 1.14855126055543100712e-01,
169 9.61912973266488928113e-01,
170 2.9381411499556122552e-01,
171 -9.777138189880161924641e-01,
172 -9.76930413445147608049e-01,
173 4.940088097314976789841e-01,
174 -9.15658690217517835002e-01,
175 -2.51772931436786954751e-01,
176 -7.3924135157173099849e-01,
177 }
178
179 var cosh = []float64{
180 7.2668796942212842775517446e+01,
181 1.1479413465659254502011135e+03,
182 1.0385767908766418550935495e+00,
183 7.5000957789658051428857788e+01,
184 7.655246669605357888468613e+03,
185 9.3567491758321272072888257e+00,
186 9.331351599270605471131735e+01,
187 7.6833430994624643209296404e+00,
188 3.1829371625150718153881164e+00,
189 2.9595059261916188501640911e+03,
190 }
191 var erf = []float64{
192 5.1865354817738701906913566e-01,
193 7.2623875834137295116929844e-01,
194 -3.123458688281309990629839e-02,
195 -5.2143121110253302920437013e-01,
196 8.2704742671312902508629582e-01,
197 3.2101767558376376743993945e-01,
198 5.403990312223245516066252e-01,
199 3.0034702916738588551174831e-01,
200 2.0369924417882241241559589e-01,
201 -7.8069386968009226729944677e-01,
202 }
203 var erfc = []float64{
204 4.8134645182261298093086434e-01,
205 2.7376124165862704883070156e-01,
206 1.0312345868828130999062984e+00,
207 1.5214312111025330292043701e+00,
208 1.7295257328687097491370418e-01,
209 6.7898232441623623256006055e-01,
210 4.596009687776754483933748e-01,
211 6.9965297083261411448825169e-01,
212 7.9630075582117758758440411e-01,
213 1.7806938696800922672994468e+00,
214 }
215 var erfinv = []float64{
216 4.746037673358033586786350696e-01,
217 8.559054432692110956388764172e-01,
218 -2.45427830571707336251331946e-02,
219 -4.78116683518973366268905506e-01,
220 1.479804430319470983648120853e+00,
221 2.654485787128896161882650211e-01,
222 5.027444534221520197823192493e-01,
223 2.466703532707627818954585670e-01,
224 1.632011465103005426240343116e-01,
225 -1.06672334642196900710000389e+00,
226 }
227 var exp = []float64{
228 1.4533071302642137507696589e+02,
229 2.2958822575694449002537581e+03,
230 7.5814542574851666582042306e-01,
231 6.6668778421791005061482264e-03,
232 1.5310493273896033740861206e+04,
233 1.8659907517999328638667732e+01,
234 1.8662167355098714543942057e+02,
235 1.5301332413189378961665788e+01,
236 6.2047063430646876349125085e+00,
237 1.6894712385826521111610438e-04,
238 }
239 var expm1 = []float64{
240 5.105047796122957327384770212e-02,
241 8.046199708567344080562675439e-02,
242 -2.764970978891639815187418703e-03,
243 -4.8871434888875355394330300273e-02,
244 1.0115864277221467777117227494e-01,
245 2.969616407795910726014621657e-02,
246 5.368214487944892300914037972e-02,
247 2.765488851131274068067445335e-02,
248 1.842068661871398836913874273e-02,
249 -8.3193870863553801814961137573e-02,
250 }
251 var expm1Large = []float64{
252 4.2031418113550844e+21,
253 4.0690789717473863e+33,
254 -0.9372627915981363e+00,
255 -1.0,
256 7.077694784145933e+41,
257 5.117936223839153e+12,
258 5.124137759001189e+22,
259 7.03546003972584e+11,
260 8.456921800389698e+07,
261 -1.0,
262 }
263 var exp2 = []float64{
264 3.1537839463286288034313104e+01,
265 2.1361549283756232296144849e+02,
266 8.2537402562185562902577219e-01,
267 3.1021158628740294833424229e-02,
268 7.9581744110252191462569661e+02,
269 7.6019905892596359262696423e+00,
270 3.7506882048388096973183084e+01,
271 6.6250893439173561733216375e+00,
272 3.5438267900243941544605339e+00,
273 2.4281533133513300984289196e-03,
274 }
275 var fabs = []float64{
276 4.9790119248836735e+00,
277 7.7388724745781045e+00,
278 2.7688005719200159e-01,
279 5.0106036182710749e+00,
280 9.6362937071984173e+00,
281 2.9263772392439646e+00,
282 5.2290834314593066e+00,
283 2.7279399104360102e+00,
284 1.8253080916808550e+00,
285 8.6859247685756013e+00,
286 }
287 var fdim = []float64{
288 4.9790119248836735e+00,
289 7.7388724745781045e+00,
290 0.0000000000000000e+00,
291 0.0000000000000000e+00,
292 9.6362937071984173e+00,
293 2.9263772392439646e+00,
294 5.2290834314593066e+00,
295 2.7279399104360102e+00,
296 1.8253080916808550e+00,
297 0.0000000000000000e+00,
298 }
299 var floor = []float64{
300 4.0000000000000000e+00,
301 7.0000000000000000e+00,
302 -1.0000000000000000e+00,
303 -6.0000000000000000e+00,
304 9.0000000000000000e+00,
305 2.0000000000000000e+00,
306 5.0000000000000000e+00,
307 2.0000000000000000e+00,
308 1.0000000000000000e+00,
309 -9.0000000000000000e+00,
310 }
311 var fmod = []float64{
312 4.197615023265299782906368e-02,
313 2.261127525421895434476482e+00,
314 3.231794108794261433104108e-02,
315 4.989396381728925078391512e+00,
316 3.637062928015826201999516e-01,
317 1.220868282268106064236690e+00,
318 4.770916568540693347699744e+00,
319 1.816180268691969246219742e+00,
320 8.734595415957246977711748e-01,
321 1.314075231424398637614104e+00,
322 }
323
324 type fi struct {
325 f float64
326 i int
327 }
328
329 var frexp = []fi{
330 {6.2237649061045918750e-01, 3},
331 {9.6735905932226306250e-01, 3},
332 {-5.5376011438400318000e-01, -1},
333 {-6.2632545228388436250e-01, 3},
334 {6.02268356699901081250e-01, 4},
335 {7.3159430981099115000e-01, 2},
336 {6.5363542893241332500e-01, 3},
337 {6.8198497760900255000e-01, 2},
338 {9.1265404584042750000e-01, 1},
339 {-5.4287029803597508250e-01, 4},
340 }
341 var gamma = []float64{
342 2.3254348370739963835386613898e+01,
343 2.991153837155317076427529816e+03,
344 -4.561154336726758060575129109e+00,
345 7.719403468842639065959210984e-01,
346 1.6111876618855418534325755566e+05,
347 1.8706575145216421164173224946e+00,
348 3.4082787447257502836734201635e+01,
349 1.579733951448952054898583387e+00,
350 9.3834586598354592860187267089e-01,
351 -2.093995902923148389186189429e-05,
352 }
353 var j0 = []float64{
354 -1.8444682230601672018219338e-01,
355 2.27353668906331975435892e-01,
356 9.809259936157051116270273e-01,
357 -1.741170131426226587841181e-01,
358 -2.1389448451144143352039069e-01,
359 -2.340905848928038763337414e-01,
360 -1.0029099691890912094586326e-01,
361 -1.5466726714884328135358907e-01,
362 3.252650187653420388714693e-01,
363 -8.72218484409407250005360235e-03,
364 }
365 var j1 = []float64{
366 -3.251526395295203422162967e-01,
367 1.893581711430515718062564e-01,
368 -1.3711761352467242914491514e-01,
369 3.287486536269617297529617e-01,
370 1.3133899188830978473849215e-01,
371 3.660243417832986825301766e-01,
372 -3.4436769271848174665420672e-01,
373 4.329481396640773768835036e-01,
374 5.8181350531954794639333955e-01,
375 -2.7030574577733036112996607e-01,
376 }
377 var j2 = []float64{
378 5.3837518920137802565192769e-02,
379 -1.7841678003393207281244667e-01,
380 9.521746934916464142495821e-03,
381 4.28958355470987397983072e-02,
382 2.4115371837854494725492872e-01,
383 4.842458532394520316844449e-01,
384 -3.142145220618633390125946e-02,
385 4.720849184745124761189957e-01,
386 3.122312022520957042957497e-01,
387 7.096213118930231185707277e-02,
388 }
389 var jM3 = []float64{
390 -3.684042080996403091021151e-01,
391 2.8157665936340887268092661e-01,
392 4.401005480841948348343589e-04,
393 3.629926999056814081597135e-01,
394 3.123672198825455192489266e-02,
395 -2.958805510589623607540455e-01,
396 -3.2033177696533233403289416e-01,
397 -2.592737332129663376736604e-01,
398 -1.0241334641061485092351251e-01,
399 -2.3762660886100206491674503e-01,
400 }
401 var lgamma = []fi{
402 {3.146492141244545774319734e+00, 1},
403 {8.003414490659126375852113e+00, 1},
404 {1.517575735509779707488106e+00, -1},
405 {-2.588480028182145853558748e-01, 1},
406 {1.1989897050205555002007985e+01, 1},
407 {6.262899811091257519386906e-01, 1},
408 {3.5287924899091566764846037e+00, 1},
409 {4.5725644770161182299423372e-01, 1},
410 {-6.363667087767961257654854e-02, 1},
411 {-1.077385130910300066425564e+01, -1},
412 }
413 var log = []float64{
414 1.605231462693062999102599e+00,
415 2.0462560018708770653153909e+00,
416 -1.2841708730962657801275038e+00,
417 1.6115563905281545116286206e+00,
418 2.2655365644872016636317461e+00,
419 1.0737652208918379856272735e+00,
420 1.6542360106073546632707956e+00,
421 1.0035467127723465801264487e+00,
422 6.0174879014578057187016475e-01,
423 2.161703872847352815363655e+00,
424 }
425 var logb = []float64{
426 2.0000000000000000e+00,
427 2.0000000000000000e+00,
428 -2.0000000000000000e+00,
429 2.0000000000000000e+00,
430 3.0000000000000000e+00,
431 1.0000000000000000e+00,
432 2.0000000000000000e+00,
433 1.0000000000000000e+00,
434 0.0000000000000000e+00,
435 3.0000000000000000e+00,
436 }
437 var log10 = []float64{
438 6.9714316642508290997617083e-01,
439 8.886776901739320576279124e-01,
440 -5.5770832400658929815908236e-01,
441 6.998900476822994346229723e-01,
442 9.8391002850684232013281033e-01,
443 4.6633031029295153334285302e-01,
444 7.1842557117242328821552533e-01,
445 4.3583479968917773161304553e-01,
446 2.6133617905227038228626834e-01,
447 9.3881606348649405716214241e-01,
448 }
449 var log1p = []float64{
450 4.8590257759797794104158205e-02,
451 7.4540265965225865330849141e-02,
452 -2.7726407903942672823234024e-03,
453 -5.1404917651627649094953380e-02,
454 9.1998280672258624681335010e-02,
455 2.8843762576593352865894824e-02,
456 5.0969534581863707268992645e-02,
457 2.6913947602193238458458594e-02,
458 1.8088493239630770262045333e-02,
459 -9.0865245631588989681559268e-02,
460 }
461 var log2 = []float64{
462 2.3158594707062190618898251e+00,
463 2.9521233862883917703341018e+00,
464 -1.8526669502700329984917062e+00,
465 2.3249844127278861543568029e+00,
466 3.268478366538305087466309e+00,
467 1.5491157592596970278166492e+00,
468 2.3865580889631732407886495e+00,
469 1.447811865817085365540347e+00,
470 8.6813999540425116282815557e-01,
471 3.118679457227342224364709e+00,
472 }
473 var modf = [][2]float64{
474 {4.0000000000000000e+00, 9.7901192488367350108546816e-01},
475 {7.0000000000000000e+00, 7.3887247457810456552351752e-01},
476 {Copysign(0, -1), -2.7688005719200159404635997e-01},
477 {-5.0000000000000000e+00, -1.060361827107492160848778e-02},
478 {9.0000000000000000e+00, 6.3629370719841737980004837e-01},
479 {2.0000000000000000e+00, 9.2637723924396464525443662e-01},
480 {5.0000000000000000e+00, 2.2908343145930665230025625e-01},
481 {2.0000000000000000e+00, 7.2793991043601025126008608e-01},
482 {1.0000000000000000e+00, 8.2530809168085506044576505e-01},
483 {-8.0000000000000000e+00, -6.8592476857560136238589621e-01},
484 }
485 var nextafter32 = []float32{
486 4.979012489318848e+00,
487 7.738873004913330e+00,
488 -2.768800258636475e-01,
489 -5.010602951049805e+00,
490 9.636294364929199e+00,
491 2.926377534866333e+00,
492 5.229084014892578e+00,
493 2.727940082550049e+00,
494 1.825308203697205e+00,
495 -8.685923576354980e+00,
496 }
497 var nextafter64 = []float64{
498 4.97901192488367438926388786e+00,
499 7.73887247457810545370193722e+00,
500 -2.7688005719200153853520874e-01,
501 -5.01060361827107403343006808e+00,
502 9.63629370719841915615688777e+00,
503 2.92637723924396508934364647e+00,
504 5.22908343145930754047867595e+00,
505 2.72793991043601069534929593e+00,
506 1.82530809168085528249036997e+00,
507 -8.68592476857559958602905681e+00,
508 }
509 var pow = []float64{
510 9.5282232631648411840742957e+04,
511 5.4811599352999901232411871e+07,
512 5.2859121715894396531132279e-01,
513 9.7587991957286474464259698e-06,
514 4.328064329346044846740467e+09,
515 8.4406761805034547437659092e+02,
516 1.6946633276191194947742146e+05,
517 5.3449040147551939075312879e+02,
518 6.688182138451414936380374e+01,
519 2.0609869004248742886827439e-09,
520 }
521 var remainder = []float64{
522 4.197615023265299782906368e-02,
523 2.261127525421895434476482e+00,
524 3.231794108794261433104108e-02,
525 -2.120723654214984321697556e-02,
526 3.637062928015826201999516e-01,
527 1.220868282268106064236690e+00,
528 -4.581668629186133046005125e-01,
529 -9.117596417440410050403443e-01,
530 8.734595415957246977711748e-01,
531 1.314075231424398637614104e+00,
532 }
533 var round = []float64{
534 5,
535 8,
536 Copysign(0, -1),
537 -5,
538 10,
539 3,
540 5,
541 3,
542 2,
543 -9,
544 }
545 var signbit = []bool{
546 false,
547 false,
548 true,
549 true,
550 false,
551 false,
552 false,
553 false,
554 false,
555 true,
556 }
557 var sin = []float64{
558 -9.6466616586009283766724726e-01,
559 9.9338225271646545763467022e-01,
560 -2.7335587039794393342449301e-01,
561 9.5586257685042792878173752e-01,
562 -2.099421066779969164496634e-01,
563 2.135578780799860532750616e-01,
564 -8.694568971167362743327708e-01,
565 4.019566681155577786649878e-01,
566 9.6778633541687993721617774e-01,
567 -6.734405869050344734943028e-01,
568 }
569
570
571 var sinLarge = []float64{
572 -9.646661658548936063912e-01,
573 9.933822527198506903752e-01,
574 -2.7335587036246899796e-01,
575 9.55862576853689321268e-01,
576 -2.099421066862688873691e-01,
577 2.13557878070308981163e-01,
578 -8.694568970959221300497e-01,
579 4.01956668098863248917e-01,
580 9.67786335404528727927e-01,
581 -6.7344058693131973066e-01,
582 }
583 var sinh = []float64{
584 7.2661916084208532301448439e+01,
585 1.1479409110035194500526446e+03,
586 -2.8043136512812518927312641e-01,
587 -7.499429091181587232835164e+01,
588 7.6552466042906758523925934e+03,
589 9.3031583421672014313789064e+00,
590 9.330815755828109072810322e+01,
591 7.6179893137269146407361477e+00,
592 3.021769180549615819524392e+00,
593 -2.95950575724449499189888e+03,
594 }
595 var sqrt = []float64{
596 2.2313699659365484748756904e+00,
597 2.7818829009464263511285458e+00,
598 5.2619393496314796848143251e-01,
599 2.2384377628763938724244104e+00,
600 3.1042380236055381099288487e+00,
601 1.7106657298385224403917771e+00,
602 2.286718922705479046148059e+00,
603 1.6516476350711159636222979e+00,
604 1.3510396336454586262419247e+00,
605 2.9471892997524949215723329e+00,
606 }
607 var tan = []float64{
608 -3.661316565040227801781974e+00,
609 8.64900232648597589369854e+00,
610 -2.8417941955033612725238097e-01,
611 3.253290185974728640827156e+00,
612 2.147275640380293804770778e-01,
613 -2.18600910711067004921551e-01,
614 -1.760002817872367935518928e+00,
615 -4.389808914752818126249079e-01,
616 -3.843885560201130679995041e+00,
617 9.10988793377685105753416e-01,
618 }
619
620
621 var tanLarge = []float64{
622 -3.66131656475596512705e+00,
623 8.6490023287202547927e+00,
624 -2.841794195104782406e-01,
625 3.2532901861033120983e+00,
626 2.14727564046880001365e-01,
627 -2.18600910700688062874e-01,
628 -1.760002817699722747043e+00,
629 -4.38980891453536115952e-01,
630 -3.84388555942723509071e+00,
631 9.1098879344275101051e-01,
632 }
633 var tanh = []float64{
634 9.9990531206936338549262119e-01,
635 9.9999962057085294197613294e-01,
636 -2.7001505097318677233756845e-01,
637 -9.9991110943061718603541401e-01,
638 9.9999999146798465745022007e-01,
639 9.9427249436125236705001048e-01,
640 9.9994257600983138572705076e-01,
641 9.9149409509772875982054701e-01,
642 9.4936501296239685514466577e-01,
643 -9.9999994291374030946055701e-01,
644 }
645 var trunc = []float64{
646 4.0000000000000000e+00,
647 7.0000000000000000e+00,
648 Copysign(0, -1),
649 -5.0000000000000000e+00,
650 9.0000000000000000e+00,
651 2.0000000000000000e+00,
652 5.0000000000000000e+00,
653 2.0000000000000000e+00,
654 1.0000000000000000e+00,
655 -8.0000000000000000e+00,
656 }
657 var y0 = []float64{
658 -3.053399153780788357534855e-01,
659 1.7437227649515231515503649e-01,
660 -8.6221781263678836910392572e-01,
661 -3.100664880987498407872839e-01,
662 1.422200649300982280645377e-01,
663 4.000004067997901144239363e-01,
664 -3.3340749753099352392332536e-01,
665 4.5399790746668954555205502e-01,
666 4.8290004112497761007536522e-01,
667 2.7036697826604756229601611e-01,
668 }
669 var y1 = []float64{
670 0.15494213737457922210218611,
671 -0.2165955142081145245075746,
672 -2.4644949631241895201032829,
673 0.1442740489541836405154505,
674 0.2215379960518984777080163,
675 0.3038800915160754150565448,
676 0.0691107642452362383808547,
677 0.2380116417809914424860165,
678 -0.20849492979459761009678934,
679 0.0242503179793232308250804,
680 }
681 var y2 = []float64{
682 0.3675780219390303613394936,
683 -0.23034826393250119879267257,
684 -16.939677983817727205631397,
685 0.367653980523052152867791,
686 -0.0962401471767804440353136,
687 -0.1923169356184851105200523,
688 0.35984072054267882391843766,
689 -0.2794987252299739821654982,
690 -0.7113490692587462579757954,
691 -0.2647831587821263302087457,
692 }
693 var yM3 = []float64{
694 -0.14035984421094849100895341,
695 -0.097535139617792072703973,
696 242.25775994555580176377379,
697 -0.1492267014802818619511046,
698 0.26148702629155918694500469,
699 0.56675383593895176530394248,
700 -0.206150264009006981070575,
701 0.64784284687568332737963658,
702 1.3503631555901938037008443,
703 0.1461869756579956803341844,
704 }
705
706
707 var vfacosSC = []float64{
708 -Pi,
709 1,
710 Pi,
711 NaN(),
712 }
713 var acosSC = []float64{
714 NaN(),
715 0,
716 NaN(),
717 NaN(),
718 }
719
720 var vfacoshSC = []float64{
721 Inf(-1),
722 0.5,
723 1,
724 Inf(1),
725 NaN(),
726 }
727 var acoshSC = []float64{
728 NaN(),
729 NaN(),
730 0,
731 Inf(1),
732 NaN(),
733 }
734
735 var vfasinSC = []float64{
736 -Pi,
737 Copysign(0, -1),
738 0,
739 Pi,
740 NaN(),
741 }
742 var asinSC = []float64{
743 NaN(),
744 Copysign(0, -1),
745 0,
746 NaN(),
747 NaN(),
748 }
749
750 var vfasinhSC = []float64{
751 Inf(-1),
752 Copysign(0, -1),
753 0,
754 Inf(1),
755 NaN(),
756 }
757 var asinhSC = []float64{
758 Inf(-1),
759 Copysign(0, -1),
760 0,
761 Inf(1),
762 NaN(),
763 }
764
765 var vfatanSC = []float64{
766 Inf(-1),
767 Copysign(0, -1),
768 0,
769 Inf(1),
770 NaN(),
771 }
772 var atanSC = []float64{
773 -Pi / 2,
774 Copysign(0, -1),
775 0,
776 Pi / 2,
777 NaN(),
778 }
779
780 var vfatanhSC = []float64{
781 Inf(-1),
782 -Pi,
783 -1,
784 Copysign(0, -1),
785 0,
786 1,
787 Pi,
788 Inf(1),
789 NaN(),
790 }
791 var atanhSC = []float64{
792 NaN(),
793 NaN(),
794 Inf(-1),
795 Copysign(0, -1),
796 0,
797 Inf(1),
798 NaN(),
799 NaN(),
800 NaN(),
801 }
802 var vfatan2SC = [][2]float64{
803 {Inf(-1), Inf(-1)},
804 {Inf(-1), -Pi},
805 {Inf(-1), 0},
806 {Inf(-1), +Pi},
807 {Inf(-1), Inf(1)},
808 {Inf(-1), NaN()},
809 {-Pi, Inf(-1)},
810 {-Pi, 0},
811 {-Pi, Inf(1)},
812 {-Pi, NaN()},
813 {Copysign(0, -1), Inf(-1)},
814 {Copysign(0, -1), -Pi},
815 {Copysign(0, -1), Copysign(0, -1)},
816 {Copysign(0, -1), 0},
817 {Copysign(0, -1), +Pi},
818 {Copysign(0, -1), Inf(1)},
819 {Copysign(0, -1), NaN()},
820 {0, Inf(-1)},
821 {0, -Pi},
822 {0, Copysign(0, -1)},
823 {0, 0},
824 {0, +Pi},
825 {0, Inf(1)},
826 {0, NaN()},
827 {+Pi, Inf(-1)},
828 {+Pi, 0},
829 {+Pi, Inf(1)},
830 {1.0, Inf(1)},
831 {-1.0, Inf(1)},
832 {+Pi, NaN()},
833 {Inf(1), Inf(-1)},
834 {Inf(1), -Pi},
835 {Inf(1), 0},
836 {Inf(1), +Pi},
837 {Inf(1), Inf(1)},
838 {Inf(1), NaN()},
839 {NaN(), NaN()},
840 }
841 var atan2SC = []float64{
842 -3 * Pi / 4,
843 -Pi / 2,
844 -Pi / 2,
845 -Pi / 2,
846 -Pi / 4,
847 NaN(),
848 -Pi,
849 -Pi / 2,
850 Copysign(0, -1),
851 NaN(),
852 -Pi,
853 -Pi,
854 -Pi,
855 Copysign(0, -1),
856 Copysign(0, -1),
857 Copysign(0, -1),
858 NaN(),
859 Pi,
860 Pi,
861 Pi,
862 0,
863 0,
864 0,
865 NaN(),
866 Pi,
867 Pi / 2,
868 0,
869 0,
870 Copysign(0, -1),
871 NaN(),
872 3 * Pi / 4,
873 Pi / 2,
874 Pi / 2,
875 Pi / 2,
876 Pi / 4,
877 NaN(),
878 NaN(),
879 }
880
881 var vfcbrtSC = []float64{
882 Inf(-1),
883 Copysign(0, -1),
884 0,
885 Inf(1),
886 NaN(),
887 }
888 var cbrtSC = []float64{
889 Inf(-1),
890 Copysign(0, -1),
891 0,
892 Inf(1),
893 NaN(),
894 }
895
896 var vfceilSC = []float64{
897 Inf(-1),
898 Copysign(0, -1),
899 0,
900 Inf(1),
901 NaN(),
902 1<<52 - 1,
903 1<<52 - 0.5,
904 1 << 52,
905 -1 << 52,
906 -1<<52 + 0.5,
907 -1<<52 + 1,
908 1 << 53,
909 -1 << 53,
910 }
911
912 var ceilBaseSC = []float64{
913 Inf(-1),
914 Copysign(0, -1),
915 0,
916 Inf(1),
917 NaN(),
918 }
919
920 var ceilSC = append(ceilBaseSC,
921 1<<52-1,
922 1<<52,
923 1<<52,
924 -1<<52,
925 -1<<52+1,
926 -1<<52+1,
927 1<<53,
928 -1<<53,
929 )
930
931 var floorSC = append(ceilBaseSC,
932 1<<52-1,
933 1<<52-1,
934 1<<52,
935 -1<<52,
936 -1<<52,
937 -1<<52+1,
938 1<<53,
939 -1<<53,
940 )
941
942 var truncSC = append(ceilBaseSC,
943 1<<52-1,
944 1<<52-1,
945 1<<52,
946 -1<<52,
947 -1<<52+1,
948 -1<<52+1,
949 1<<53,
950 -1<<53,
951 )
952
953 var vfcopysignSC = []float64{
954 Inf(-1),
955 Inf(1),
956 NaN(),
957 }
958 var copysignSC = []float64{
959 Inf(-1),
960 Inf(-1),
961 NaN(),
962 }
963
964 var vfcosSC = []float64{
965 Inf(-1),
966 Inf(1),
967 NaN(),
968 }
969 var cosSC = []float64{
970 NaN(),
971 NaN(),
972 NaN(),
973 }
974
975 var vfcoshSC = []float64{
976 Inf(-1),
977 Copysign(0, -1),
978 0,
979 Inf(1),
980 NaN(),
981 }
982 var coshSC = []float64{
983 Inf(1),
984 1,
985 1,
986 Inf(1),
987 NaN(),
988 }
989
990 var vferfSC = []float64{
991 Inf(-1),
992 Copysign(0, -1),
993 0,
994 Inf(1),
995 NaN(),
996 -1000,
997 1000,
998 }
999 var erfSC = []float64{
1000 -1,
1001 Copysign(0, -1),
1002 0,
1003 1,
1004 NaN(),
1005 -1,
1006 1,
1007 }
1008
1009 var vferfcSC = []float64{
1010 Inf(-1),
1011 Inf(1),
1012 NaN(),
1013 -1000,
1014 1000,
1015 }
1016 var erfcSC = []float64{
1017 2,
1018 0,
1019 NaN(),
1020 2,
1021 0,
1022 }
1023
1024 var vferfinvSC = []float64{
1025 1,
1026 -1,
1027 0,
1028 Inf(-1),
1029 Inf(1),
1030 NaN(),
1031 }
1032 var erfinvSC = []float64{
1033 Inf(+1),
1034 Inf(-1),
1035 0,
1036 NaN(),
1037 NaN(),
1038 NaN(),
1039 }
1040
1041 var vferfcinvSC = []float64{
1042 0,
1043 2,
1044 1,
1045 Inf(1),
1046 Inf(-1),
1047 NaN(),
1048 }
1049 var erfcinvSC = []float64{
1050 Inf(+1),
1051 Inf(-1),
1052 0,
1053 NaN(),
1054 NaN(),
1055 NaN(),
1056 }
1057
1058 var vfexpSC = []float64{
1059 Inf(-1),
1060 -2000,
1061 2000,
1062 Inf(1),
1063 NaN(),
1064
1065 7.097827128933841e+02,
1066
1067 1.48852223e+09,
1068 1.4885222e+09,
1069 1,
1070
1071 3.725290298461915e-09,
1072
1073 -740,
1074 }
1075 var expSC = []float64{
1076 0,
1077 0,
1078 Inf(1),
1079 Inf(1),
1080 NaN(),
1081 Inf(1),
1082 Inf(1),
1083 Inf(1),
1084 2.718281828459045,
1085 1.0000000037252903,
1086 4.2e-322,
1087 }
1088
1089 var vfexp2SC = []float64{
1090 Inf(-1),
1091 -2000,
1092 2000,
1093 Inf(1),
1094 NaN(),
1095
1096 1024,
1097
1098 -1.07399999999999e+03,
1099
1100 3.725290298461915e-09,
1101 }
1102 var exp2SC = []float64{
1103 0,
1104 0,
1105 Inf(1),
1106 Inf(1),
1107 NaN(),
1108 Inf(1),
1109 5e-324,
1110 1.0000000025821745,
1111 }
1112
1113 var vfexpm1SC = []float64{
1114 Inf(-1),
1115 -710,
1116 Copysign(0, -1),
1117 0,
1118 710,
1119 Inf(1),
1120 NaN(),
1121 }
1122 var expm1SC = []float64{
1123 -1,
1124 -1,
1125 Copysign(0, -1),
1126 0,
1127 Inf(1),
1128 Inf(1),
1129 NaN(),
1130 }
1131
1132 var vffabsSC = []float64{
1133 Inf(-1),
1134 Copysign(0, -1),
1135 0,
1136 Inf(1),
1137 NaN(),
1138 }
1139 var fabsSC = []float64{
1140 Inf(1),
1141 0,
1142 0,
1143 Inf(1),
1144 NaN(),
1145 }
1146
1147 var vffdimSC = [][2]float64{
1148 {Inf(-1), Inf(-1)},
1149 {Inf(-1), Inf(1)},
1150 {Inf(-1), NaN()},
1151 {Copysign(0, -1), Copysign(0, -1)},
1152 {Copysign(0, -1), 0},
1153 {0, Copysign(0, -1)},
1154 {0, 0},
1155 {Inf(1), Inf(-1)},
1156 {Inf(1), Inf(1)},
1157 {Inf(1), NaN()},
1158 {NaN(), Inf(-1)},
1159 {NaN(), Copysign(0, -1)},
1160 {NaN(), 0},
1161 {NaN(), Inf(1)},
1162 {NaN(), NaN()},
1163 }
1164 var nan = Float64frombits(0xFFF8000000000000)
1165 var vffdim2SC = [][2]float64{
1166 {Inf(-1), Inf(-1)},
1167 {Inf(-1), Inf(1)},
1168 {Inf(-1), nan},
1169 {Copysign(0, -1), Copysign(0, -1)},
1170 {Copysign(0, -1), 0},
1171 {0, Copysign(0, -1)},
1172 {0, 0},
1173 {Inf(1), Inf(-1)},
1174 {Inf(1), Inf(1)},
1175 {Inf(1), nan},
1176 {nan, Inf(-1)},
1177 {nan, Copysign(0, -1)},
1178 {nan, 0},
1179 {nan, Inf(1)},
1180 {nan, nan},
1181 }
1182 var fdimSC = []float64{
1183 NaN(),
1184 0,
1185 NaN(),
1186 0,
1187 0,
1188 0,
1189 0,
1190 Inf(1),
1191 NaN(),
1192 NaN(),
1193 NaN(),
1194 NaN(),
1195 NaN(),
1196 NaN(),
1197 NaN(),
1198 }
1199 var fmaxSC = []float64{
1200 Inf(-1),
1201 Inf(1),
1202 NaN(),
1203 Copysign(0, -1),
1204 0,
1205 0,
1206 0,
1207 Inf(1),
1208 Inf(1),
1209 Inf(1),
1210 NaN(),
1211 NaN(),
1212 NaN(),
1213 Inf(1),
1214 NaN(),
1215 }
1216 var fminSC = []float64{
1217 Inf(-1),
1218 Inf(-1),
1219 Inf(-1),
1220 Copysign(0, -1),
1221 Copysign(0, -1),
1222 Copysign(0, -1),
1223 0,
1224 Inf(-1),
1225 Inf(1),
1226 NaN(),
1227 Inf(-1),
1228 NaN(),
1229 NaN(),
1230 NaN(),
1231 NaN(),
1232 }
1233
1234 var vffmodSC = [][2]float64{
1235 {Inf(-1), Inf(-1)},
1236 {Inf(-1), -Pi},
1237 {Inf(-1), 0},
1238 {Inf(-1), Pi},
1239 {Inf(-1), Inf(1)},
1240 {Inf(-1), NaN()},
1241 {-Pi, Inf(-1)},
1242 {-Pi, 0},
1243 {-Pi, Inf(1)},
1244 {-Pi, NaN()},
1245 {Copysign(0, -1), Inf(-1)},
1246 {Copysign(0, -1), 0},
1247 {Copysign(0, -1), Inf(1)},
1248 {Copysign(0, -1), NaN()},
1249 {0, Inf(-1)},
1250 {0, 0},
1251 {0, Inf(1)},
1252 {0, NaN()},
1253 {Pi, Inf(-1)},
1254 {Pi, 0},
1255 {Pi, Inf(1)},
1256 {Pi, NaN()},
1257 {Inf(1), Inf(-1)},
1258 {Inf(1), -Pi},
1259 {Inf(1), 0},
1260 {Inf(1), Pi},
1261 {Inf(1), Inf(1)},
1262 {Inf(1), NaN()},
1263 {NaN(), Inf(-1)},
1264 {NaN(), -Pi},
1265 {NaN(), 0},
1266 {NaN(), Pi},
1267 {NaN(), Inf(1)},
1268 {NaN(), NaN()},
1269 }
1270 var fmodSC = []float64{
1271 NaN(),
1272 NaN(),
1273 NaN(),
1274 NaN(),
1275 NaN(),
1276 NaN(),
1277 -Pi,
1278 NaN(),
1279 -Pi,
1280 NaN(),
1281 Copysign(0, -1),
1282 NaN(),
1283 Copysign(0, -1),
1284 NaN(),
1285 0,
1286 NaN(),
1287 0,
1288 NaN(),
1289 Pi,
1290 NaN(),
1291 Pi,
1292 NaN(),
1293 NaN(),
1294 NaN(),
1295 NaN(),
1296 NaN(),
1297 NaN(),
1298 NaN(),
1299 NaN(),
1300 NaN(),
1301 NaN(),
1302 NaN(),
1303 NaN(),
1304 NaN(),
1305 }
1306
1307 var vffrexpSC = []float64{
1308 Inf(-1),
1309 Copysign(0, -1),
1310 0,
1311 Inf(1),
1312 NaN(),
1313 }
1314 var frexpSC = []fi{
1315 {Inf(-1), 0},
1316 {Copysign(0, -1), 0},
1317 {0, 0},
1318 {Inf(1), 0},
1319 {NaN(), 0},
1320 }
1321
1322 var vfgamma = [][2]float64{
1323 {Inf(1), Inf(1)},
1324 {Inf(-1), NaN()},
1325 {0, Inf(1)},
1326 {Copysign(0, -1), Inf(-1)},
1327 {NaN(), NaN()},
1328 {-1, NaN()},
1329 {-2, NaN()},
1330 {-3, NaN()},
1331 {-1e16, NaN()},
1332 {-1e300, NaN()},
1333 {1.7e308, Inf(1)},
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344 {0.5, 1.772453850905516},
1345 {1.5, 0.886226925452758},
1346 {2.5, 1.329340388179137},
1347 {3.5, 3.3233509704478426},
1348 {-0.5, -3.544907701811032},
1349 {-1.5, 2.363271801207355},
1350 {-2.5, -0.9453087204829419},
1351 {-3.5, 0.2700882058522691},
1352 {0.1, 9.51350769866873},
1353 {0.01, 99.4325851191506},
1354 {1e-08, 9.999999942278434e+07},
1355 {1e-16, 1e+16},
1356 {0.001, 999.4237724845955},
1357 {1e-16, 1e+16},
1358 {1e-308, 1e+308},
1359 {5.6e-309, 1.7857142857142864e+308},
1360 {5.5e-309, Inf(1)},
1361 {1e-309, Inf(1)},
1362 {1e-323, Inf(1)},
1363 {5e-324, Inf(1)},
1364 {-0.1, -10.686287021193193},
1365 {-0.01, -100.58719796441078},
1366 {-1e-08, -1.0000000057721567e+08},
1367 {-1e-16, -1e+16},
1368 {-0.001, -1000.5782056293586},
1369 {-1e-16, -1e+16},
1370 {-1e-308, -1e+308},
1371 {-5.6e-309, -1.7857142857142864e+308},
1372 {-5.5e-309, Inf(-1)},
1373 {-1e-309, Inf(-1)},
1374 {-1e-323, Inf(-1)},
1375 {-5e-324, Inf(-1)},
1376 {-0.9999999999999999, -9.007199254740992e+15},
1377 {-1.0000000000000002, 4.5035996273704955e+15},
1378 {-1.9999999999999998, 2.2517998136852485e+15},
1379 {-2.0000000000000004, -1.1258999068426235e+15},
1380 {-100.00000000000001, -7.540083334883109e-145},
1381 {-99.99999999999999, 7.540083334884096e-145},
1382 {17, 2.0922789888e+13},
1383 {171, 7.257415615307999e+306},
1384 {171.6, 1.5858969096672565e+308},
1385 {171.624, 1.7942117599248104e+308},
1386 {171.625, Inf(1)},
1387 {172, Inf(1)},
1388 {2000, Inf(1)},
1389 {-100.5, -3.3536908198076787e-159},
1390 {-160.5, -5.255546447007829e-286},
1391 {-170.5, -3.3127395215386074e-308},
1392 {-171.5, 1.9316265431712e-310},
1393 {-176.5, -1.196e-321},
1394 {-177.5, 5e-324},
1395 {-178.5, Copysign(0, -1)},
1396 {-179.5, 0},
1397 {-201.0001, 0},
1398 {-202.9999, Copysign(0, -1)},
1399 {-1000.5, Copysign(0, -1)},
1400 {-1.0000000003e+09, Copysign(0, -1)},
1401 {-4.5035996273704955e+15, 0},
1402 {-63.349078729022985, 4.177797167776188e-88},
1403 {-127.45117632943295, 1.183111089623681e-214},
1404 }
1405
1406 var vfhypotSC = [][2]float64{
1407 {Inf(-1), Inf(-1)},
1408 {Inf(-1), 0},
1409 {Inf(-1), Inf(1)},
1410 {Inf(-1), NaN()},
1411 {Copysign(0, -1), Copysign(0, -1)},
1412 {Copysign(0, -1), 0},
1413 {0, Copysign(0, -1)},
1414 {0, 0},
1415 {0, Inf(-1)},
1416 {0, Inf(1)},
1417 {0, NaN()},
1418 {Inf(1), Inf(-1)},
1419 {Inf(1), 0},
1420 {Inf(1), Inf(1)},
1421 {Inf(1), NaN()},
1422 {NaN(), Inf(-1)},
1423 {NaN(), 0},
1424 {NaN(), Inf(1)},
1425 {NaN(), NaN()},
1426 }
1427 var hypotSC = []float64{
1428 Inf(1),
1429 Inf(1),
1430 Inf(1),
1431 Inf(1),
1432 0,
1433 0,
1434 0,
1435 0,
1436 Inf(1),
1437 Inf(1),
1438 NaN(),
1439 Inf(1),
1440 Inf(1),
1441 Inf(1),
1442 Inf(1),
1443 Inf(1),
1444 NaN(),
1445 Inf(1),
1446 NaN(),
1447 }
1448
1449 var ilogbSC = []int{
1450 MaxInt32,
1451 MinInt32,
1452 MaxInt32,
1453 MaxInt32,
1454 }
1455
1456 var vfj0SC = []float64{
1457 Inf(-1),
1458 0,
1459 Inf(1),
1460 NaN(),
1461 }
1462 var j0SC = []float64{
1463 0,
1464 1,
1465 0,
1466 NaN(),
1467 }
1468 var j1SC = []float64{
1469 0,
1470 0,
1471 0,
1472 NaN(),
1473 }
1474 var j2SC = []float64{
1475 0,
1476 0,
1477 0,
1478 NaN(),
1479 }
1480 var jM3SC = []float64{
1481 0,
1482 0,
1483 0,
1484 NaN(),
1485 }
1486
1487 var vfldexpSC = []fi{
1488 {0, 0},
1489 {0, -1075},
1490 {0, 1024},
1491 {Copysign(0, -1), 0},
1492 {Copysign(0, -1), -1075},
1493 {Copysign(0, -1), 1024},
1494 {Inf(1), 0},
1495 {Inf(1), -1024},
1496 {Inf(-1), 0},
1497 {Inf(-1), -1024},
1498 {NaN(), -1024},
1499 {10, int(1) << (uint64(unsafe.Sizeof(0)-1) * 8)},
1500 {10, -(int(1) << (uint64(unsafe.Sizeof(0)-1) * 8))},
1501 }
1502 var ldexpSC = []float64{
1503 0,
1504 0,
1505 0,
1506 Copysign(0, -1),
1507 Copysign(0, -1),
1508 Copysign(0, -1),
1509 Inf(1),
1510 Inf(1),
1511 Inf(-1),
1512 Inf(-1),
1513 NaN(),
1514 Inf(1),
1515 0,
1516 }
1517
1518 var vflgammaSC = []float64{
1519 Inf(-1),
1520 -3,
1521 0,
1522 1,
1523 2,
1524 Inf(1),
1525 NaN(),
1526 }
1527 var lgammaSC = []fi{
1528 {Inf(-1), 1},
1529 {Inf(1), 1},
1530 {Inf(1), 1},
1531 {0, 1},
1532 {0, 1},
1533 {Inf(1), 1},
1534 {NaN(), 1},
1535 }
1536
1537 var vflogSC = []float64{
1538 Inf(-1),
1539 -Pi,
1540 Copysign(0, -1),
1541 0,
1542 1,
1543 Inf(1),
1544 NaN(),
1545 }
1546 var logSC = []float64{
1547 NaN(),
1548 NaN(),
1549 Inf(-1),
1550 Inf(-1),
1551 0,
1552 Inf(1),
1553 NaN(),
1554 }
1555
1556 var vflogbSC = []float64{
1557 Inf(-1),
1558 0,
1559 Inf(1),
1560 NaN(),
1561 }
1562 var logbSC = []float64{
1563 Inf(1),
1564 Inf(-1),
1565 Inf(1),
1566 NaN(),
1567 }
1568
1569 var vflog1pSC = []float64{
1570 Inf(-1),
1571 -Pi,
1572 -1,
1573 Copysign(0, -1),
1574 0,
1575 Inf(1),
1576 NaN(),
1577 4503599627370496.5,
1578 }
1579 var log1pSC = []float64{
1580 NaN(),
1581 NaN(),
1582 Inf(-1),
1583 Copysign(0, -1),
1584 0,
1585 Inf(1),
1586 NaN(),
1587 36.04365338911715,
1588 }
1589
1590 var vfmodfSC = []float64{
1591 Inf(-1),
1592 Copysign(0, -1),
1593 Inf(1),
1594 NaN(),
1595 }
1596 var modfSC = [][2]float64{
1597 {Inf(-1), NaN()},
1598 {Copysign(0, -1), Copysign(0, -1)},
1599 {Inf(1), NaN()},
1600 {NaN(), NaN()},
1601 }
1602
1603 var vfnextafter32SC = [][2]float32{
1604 {0, 0},
1605 {0, float32(Copysign(0, -1))},
1606 {0, -1},
1607 {0, float32(NaN())},
1608 {float32(Copysign(0, -1)), 1},
1609 {float32(Copysign(0, -1)), 0},
1610 {float32(Copysign(0, -1)), float32(Copysign(0, -1))},
1611 {float32(Copysign(0, -1)), -1},
1612 {float32(NaN()), 0},
1613 {float32(NaN()), float32(NaN())},
1614 }
1615 var nextafter32SC = []float32{
1616 0,
1617 0,
1618 -1.401298464e-45,
1619 float32(NaN()),
1620 1.401298464e-45,
1621 float32(Copysign(0, -1)),
1622 float32(Copysign(0, -1)),
1623 -1.401298464e-45,
1624 float32(NaN()),
1625 float32(NaN()),
1626 }
1627
1628 var vfnextafter64SC = [][2]float64{
1629 {0, 0},
1630 {0, Copysign(0, -1)},
1631 {0, -1},
1632 {0, NaN()},
1633 {Copysign(0, -1), 1},
1634 {Copysign(0, -1), 0},
1635 {Copysign(0, -1), Copysign(0, -1)},
1636 {Copysign(0, -1), -1},
1637 {NaN(), 0},
1638 {NaN(), NaN()},
1639 }
1640 var nextafter64SC = []float64{
1641 0,
1642 0,
1643 -4.9406564584124654418e-324,
1644 NaN(),
1645 4.9406564584124654418e-324,
1646 Copysign(0, -1),
1647 Copysign(0, -1),
1648 -4.9406564584124654418e-324,
1649 NaN(),
1650 NaN(),
1651 }
1652
1653 var vfpowSC = [][2]float64{
1654 {Inf(-1), -Pi},
1655 {Inf(-1), -3},
1656 {Inf(-1), Copysign(0, -1)},
1657 {Inf(-1), 0},
1658 {Inf(-1), 1},
1659 {Inf(-1), 3},
1660 {Inf(-1), Pi},
1661 {Inf(-1), 0.5},
1662 {Inf(-1), NaN()},
1663
1664 {-Pi, Inf(-1)},
1665 {-Pi, -Pi},
1666 {-Pi, Copysign(0, -1)},
1667 {-Pi, 0},
1668 {-Pi, 1},
1669 {-Pi, Pi},
1670 {-Pi, Inf(1)},
1671 {-Pi, NaN()},
1672
1673 {-1, Inf(-1)},
1674 {-1, Inf(1)},
1675 {-1, NaN()},
1676 {-0.5, Inf(-1)},
1677 {-0.5, Inf(1)},
1678 {Copysign(0, -1), Inf(-1)},
1679 {Copysign(0, -1), -Pi},
1680 {Copysign(0, -1), -0.5},
1681 {Copysign(0, -1), -3},
1682 {Copysign(0, -1), 3},
1683 {Copysign(0, -1), Pi},
1684 {Copysign(0, -1), 0.5},
1685 {Copysign(0, -1), Inf(1)},
1686
1687 {0, Inf(-1)},
1688 {0, -Pi},
1689 {0, -3},
1690 {0, Copysign(0, -1)},
1691 {0, 0},
1692 {0, 3},
1693 {0, Pi},
1694 {0, Inf(1)},
1695 {0, NaN()},
1696
1697 {0.5, Inf(-1)},
1698 {0.5, Inf(1)},
1699 {1, Inf(-1)},
1700 {1, Inf(1)},
1701 {1, NaN()},
1702
1703 {Pi, Inf(-1)},
1704 {Pi, Copysign(0, -1)},
1705 {Pi, 0},
1706 {Pi, 1},
1707 {Pi, Inf(1)},
1708 {Pi, NaN()},
1709 {Inf(1), -Pi},
1710 {Inf(1), Copysign(0, -1)},
1711 {Inf(1), 0},
1712 {Inf(1), 1},
1713 {Inf(1), Pi},
1714 {Inf(1), NaN()},
1715 {NaN(), -Pi},
1716 {NaN(), Copysign(0, -1)},
1717 {NaN(), 0},
1718 {NaN(), 1},
1719 {NaN(), Pi},
1720 {NaN(), NaN()},
1721
1722
1723 {2, float64(1 << 32)},
1724 {2, -float64(1 << 32)},
1725 {-2, float64(1<<32 + 1)},
1726 {0.5, float64(1 << 45)},
1727 {0.5, -float64(1 << 45)},
1728 {Nextafter(1, 2), float64(1 << 63)},
1729 {Nextafter(1, -2), float64(1 << 63)},
1730 {Nextafter(-1, 2), float64(1 << 63)},
1731 {Nextafter(-1, -2), float64(1 << 63)},
1732
1733
1734 {Copysign(0, -1), 1e19},
1735 {Copysign(0, -1), -1e19},
1736 {Copysign(0, -1), 1<<53 - 1},
1737 {Copysign(0, -1), -(1<<53 - 1)},
1738 }
1739 var powSC = []float64{
1740 0,
1741 Copysign(0, -1),
1742 1,
1743 1,
1744 Inf(-1),
1745 Inf(-1),
1746 Inf(1),
1747 Inf(1),
1748 NaN(),
1749 0,
1750 NaN(),
1751 1,
1752 1,
1753 -Pi,
1754 NaN(),
1755 Inf(1),
1756 NaN(),
1757 1,
1758 1,
1759 NaN(),
1760 Inf(1),
1761 0,
1762 Inf(1),
1763 Inf(1),
1764 Inf(1),
1765 Inf(-1),
1766 Copysign(0, -1),
1767 0,
1768 0,
1769 0,
1770 Inf(1),
1771 Inf(1),
1772 Inf(1),
1773 1,
1774 1,
1775 0,
1776 0,
1777 0,
1778 NaN(),
1779 Inf(1),
1780 0,
1781 1,
1782 1,
1783 1,
1784 0,
1785 1,
1786 1,
1787 Pi,
1788 Inf(1),
1789 NaN(),
1790 0,
1791 1,
1792 1,
1793 Inf(1),
1794 Inf(1),
1795 NaN(),
1796 NaN(),
1797 1,
1798 1,
1799 NaN(),
1800 NaN(),
1801 NaN(),
1802
1803
1804 Inf(1),
1805 0,
1806 Inf(-1),
1807 0,
1808 Inf(1),
1809 Inf(1),
1810 0,
1811 0,
1812 Inf(1),
1813
1814
1815 0,
1816 Inf(1),
1817 Copysign(0, -1),
1818 Inf(-1),
1819 }
1820
1821 var vfpow10SC = []int{
1822 MinInt32,
1823 -324,
1824 -323,
1825 -50,
1826 -22,
1827 -1,
1828 0,
1829 1,
1830 22,
1831 50,
1832 100,
1833 200,
1834 308,
1835 309,
1836 MaxInt32,
1837 }
1838
1839 var pow10SC = []float64{
1840 0,
1841 0,
1842 1.0e-323,
1843 1.0e-50,
1844 1.0e-22,
1845 1.0e-1,
1846 1.0e0,
1847 1.0e1,
1848 1.0e22,
1849 1.0e50,
1850 1.0e100,
1851 1.0e200,
1852 1.0e308,
1853 Inf(1),
1854 Inf(1),
1855 }
1856
1857 var vfroundSC = [][2]float64{
1858 {0, 0},
1859 {1.390671161567e-309, 0},
1860 {0.49999999999999994, 0},
1861 {0.5, 1},
1862 {0.5000000000000001, 1},
1863 {-1.5, -2},
1864 {-2.5, -3},
1865 {NaN(), NaN()},
1866 {Inf(1), Inf(1)},
1867 {2251799813685249.5, 2251799813685250},
1868 {2251799813685250.5, 2251799813685251},
1869 {4503599627370495.5, 4503599627370496},
1870 {4503599627370497, 4503599627370497},
1871 }
1872 var vfroundEvenSC = [][2]float64{
1873 {0, 0},
1874 {1.390671161567e-309, 0},
1875 {0.49999999999999994, 0},
1876 {0.5, 0},
1877 {0.5000000000000001, 1},
1878 {-1.5, -2},
1879 {-2.5, -2},
1880 {NaN(), NaN()},
1881 {Inf(1), Inf(1)},
1882 {2251799813685249.5, 2251799813685250},
1883 {2251799813685250.5, 2251799813685250},
1884 {4503599627370495.5, 4503599627370496},
1885 {4503599627370497, 4503599627370497},
1886 }
1887
1888 var vfsignbitSC = []float64{
1889 Inf(-1),
1890 Copysign(0, -1),
1891 0,
1892 Inf(1),
1893 NaN(),
1894 }
1895 var signbitSC = []bool{
1896 true,
1897 true,
1898 false,
1899 false,
1900 false,
1901 }
1902
1903 var vfsinSC = []float64{
1904 Inf(-1),
1905 Copysign(0, -1),
1906 0,
1907 Inf(1),
1908 NaN(),
1909 }
1910 var sinSC = []float64{
1911 NaN(),
1912 Copysign(0, -1),
1913 0,
1914 NaN(),
1915 NaN(),
1916 }
1917
1918 var vfsinhSC = []float64{
1919 Inf(-1),
1920 Copysign(0, -1),
1921 0,
1922 Inf(1),
1923 NaN(),
1924 }
1925 var sinhSC = []float64{
1926 Inf(-1),
1927 Copysign(0, -1),
1928 0,
1929 Inf(1),
1930 NaN(),
1931 }
1932
1933 var vfsqrtSC = []float64{
1934 Inf(-1),
1935 -Pi,
1936 Copysign(0, -1),
1937 0,
1938 Inf(1),
1939 NaN(),
1940 Float64frombits(2),
1941 }
1942 var sqrtSC = []float64{
1943 NaN(),
1944 NaN(),
1945 Copysign(0, -1),
1946 0,
1947 Inf(1),
1948 NaN(),
1949 3.1434555694052576e-162,
1950 }
1951
1952 var vftanhSC = []float64{
1953 Inf(-1),
1954 Copysign(0, -1),
1955 0,
1956 Inf(1),
1957 NaN(),
1958 }
1959 var tanhSC = []float64{
1960 -1,
1961 Copysign(0, -1),
1962 0,
1963 1,
1964 NaN(),
1965 }
1966
1967 var vfy0SC = []float64{
1968 Inf(-1),
1969 0,
1970 Inf(1),
1971 NaN(),
1972 -1,
1973 }
1974 var y0SC = []float64{
1975 NaN(),
1976 Inf(-1),
1977 0,
1978 NaN(),
1979 NaN(),
1980 }
1981 var y1SC = []float64{
1982 NaN(),
1983 Inf(-1),
1984 0,
1985 NaN(),
1986 NaN(),
1987 }
1988 var y2SC = []float64{
1989 NaN(),
1990 Inf(-1),
1991 0,
1992 NaN(),
1993 NaN(),
1994 }
1995 var yM3SC = []float64{
1996 NaN(),
1997 Inf(1),
1998 0,
1999 NaN(),
2000 NaN(),
2001 }
2002
2003
2004 const (
2005 SmallestNormalFloat64 = 2.2250738585072014e-308
2006 LargestSubnormalFloat64 = SmallestNormalFloat64 - SmallestNonzeroFloat64
2007 )
2008
2009 var vffrexpBC = []float64{
2010 SmallestNormalFloat64,
2011 LargestSubnormalFloat64,
2012 SmallestNonzeroFloat64,
2013 MaxFloat64,
2014 -SmallestNormalFloat64,
2015 -LargestSubnormalFloat64,
2016 -SmallestNonzeroFloat64,
2017 -MaxFloat64,
2018 }
2019 var frexpBC = []fi{
2020 {0.5, -1021},
2021 {0.99999999999999978, -1022},
2022 {0.5, -1073},
2023 {0.99999999999999989, 1024},
2024 {-0.5, -1021},
2025 {-0.99999999999999978, -1022},
2026 {-0.5, -1073},
2027 {-0.99999999999999989, 1024},
2028 }
2029
2030 var vfldexpBC = []fi{
2031 {SmallestNormalFloat64, -52},
2032 {LargestSubnormalFloat64, -51},
2033 {SmallestNonzeroFloat64, 1074},
2034 {MaxFloat64, -(1023 + 1074)},
2035 {1, -1075},
2036 {-1, -1075},
2037 {1, 1024},
2038 {-1, 1024},
2039 {1.0000000000000002, -1075},
2040 {1, -1075},
2041 }
2042 var ldexpBC = []float64{
2043 SmallestNonzeroFloat64,
2044 1e-323,
2045 1,
2046 1e-323,
2047 0,
2048 Copysign(0, -1),
2049 Inf(1),
2050 Inf(-1),
2051 SmallestNonzeroFloat64,
2052 0,
2053 }
2054
2055 var logbBC = []float64{
2056 -1022,
2057 -1023,
2058 -1074,
2059 1023,
2060 -1022,
2061 -1023,
2062 -1074,
2063 1023,
2064 }
2065
2066
2067
2068
2069 var fmaC = []struct{ x, y, z, want float64 }{
2070
2071 {-3.999999999999087, -1.1123914289620494e-16, -7.999877929687506, -7.999877929687505},
2072 {-262112.0000004768, -0.06251525855623184, 1.1102230248837136e-16, 16385.99945072085},
2073 {-6.462348523533467e-27, -2.3763644720331857e-211, 4.000000000931324, 4.000000000931324},
2074
2075
2076 {-2.0000000037252907, 6.7904383376e-313, -3.3951933161e-313, -1.697607001654e-312},
2077 {-0.12499999999999999, 512.007568359375, -1.4193627164960366e-16, -64.00094604492188},
2078 {-2.7550648847397148e-39, -3.4028301595800694e+38, 0.9960937495343386, 1.9335955376735676},
2079 {5.723369164769208e+24, 3.8149300927159385e-06, 1.84489958778182e+19, 4.028324913621874e+19},
2080 {-0.4843749999990904, -3.6893487872543293e+19, 9.223653786709391e+18, 2.7093936974938993e+19},
2081 {-3.8146972665201165e-06, 4.2949672959999385e+09, -2.2204460489938386e-16, -16384.000003844263},
2082 {6.98156394130982e-309, -1.1072962560000002e+09, -4.4414561548793455e-308, -7.73065965765153e-300},
2083
2084
2085 {5e-324, 4.5, -2e-323, 0},
2086 {5e-324, 7, -3.5e-323, 0},
2087 {5e-324, 0.5000000000000001, -5e-324, Copysign(0, -1)},
2088 {-2.1240680525e-314, -1.233647078189316e+308, -0.25781249999954525, -0.25780987964919844},
2089 {8.579992955364441e-308, 0.6037391876780558, -4.4501307410480706e-308, 7.29947236107098e-309},
2090 {-4.450143471986689e-308, -0.9960937499927239, -4.450419332475649e-308, -1.7659233458788e-310},
2091 {1.4932076393918112, -2.2248022430460833e-308, 4.449875571054211e-308, 1.127783865601762e-308},
2092
2093
2094 {-2.288020632214759e+38, -8.98846570988901e+307, 1.7696041796300924e+308, Inf(0)},
2095 {1.4888652783208255e+308, -9.007199254742012e+15, -6.807282911929205e+38, Inf(-1)},
2096 {9.142703268902826e+192, -1.3504889569802838e+296, -1.9082200803806996e-89, Inf(-1)},
2097
2098
2099 {31.99218749627471, -1.7976930544991702e+308, Inf(0), Inf(0)},
2100 {-1.7976931281784667e+308, -2.0009765625002265, Inf(-1), Inf(-1)},
2101
2102
2103 {0, 0, 0, 0},
2104 {Copysign(0, -1), 0, 0, 0},
2105 {0, 0, Copysign(0, -1), 0},
2106 {Copysign(0, -1), 0, Copysign(0, -1), Copysign(0, -1)},
2107 {-1.1754226043408471e-38, NaN(), Inf(0), NaN()},
2108 {0, 0, 2.22507385643494e-308, 2.22507385643494e-308},
2109 {-8.65697792e+09, NaN(), -7.516192799999999e+09, NaN()},
2110 {-0.00012207403779029757, 3.221225471996093e+09, NaN(), NaN()},
2111 {Inf(-1), 0.1252441407414153, -1.387184532981584e-76, Inf(-1)},
2112 {Inf(0), 1.525878907671432e-05, -9.214364835452549e+18, Inf(0)},
2113
2114
2115 {0.1777916152213626, -32.000015266239636, -2.2204459148334633e-16, -5.689334401293007},
2116 {-2.0816681711722314e-16, -0.4997558592585846, -0.9465627129124969, -0.9465627129124968},
2117 {-1.9999997615814211, 1.8518819259933516e+19, 16.874999999999996, -3.703763410463646e+19},
2118 {-0.12499994039717421, 32767.99999976135, -2.0752587082923246e+19, -2.075258708292325e+19},
2119 {7.705600568510257e-34, -1.801432979000528e+16, -0.17224197722973714, -0.17224197722973716},
2120 {3.8988133103758913e-308, -0.9848632812499999, 3.893879244098556e-308, 5.40811742605814e-310},
2121 {-0.012651981190687427, 6.911985574912436e+38, 6.669240527007144e+18, -8.745031148409496e+36},
2122 {4.612811918325842e+18, 1.4901161193847641e-08, 2.6077032311277997e-08, 6.873625395187494e+10},
2123 {-9.094947033611148e-13, 4.450691014249257e-308, 2.086006742350485e-308, 2.086006742346437e-308},
2124 {-7.751454006381804e-05, 5.588653777189071e-308, -2.2207280111272877e-308, -2.2211612130544025e-308},
2125
2126
2127 {-1, 1, 1, 0},
2128 {1, 1, -1, 0},
2129
2130
2131 {0x1p-1022, -0x1p-1022, 0, Copysign(0, -1)},
2132 {Copysign(0, -1), 1, 0, 0},
2133 {1, Copysign(0, -1), 0, 0},
2134 }
2135
2136 var sqrt32 = []float32{
2137 0,
2138 float32(Copysign(0, -1)),
2139 float32(NaN()),
2140 float32(Inf(1)),
2141 float32(Inf(-1)),
2142 1,
2143 2,
2144 -2,
2145 4.9790119248836735e+00,
2146 7.7388724745781045e+00,
2147 -2.7688005719200159e-01,
2148 -5.0106036182710749e+00,
2149 }
2150
2151 func tolerance(a, b, e float64) bool {
2152
2153
2154
2155 if a == b {
2156 return true
2157 }
2158 d := a - b
2159 if d < 0 {
2160 d = -d
2161 }
2162
2163
2164
2165 if b != 0 {
2166 e = e * b
2167 if e < 0 {
2168 e = -e
2169 }
2170 }
2171 return d < e
2172 }
2173 func close(a, b float64) bool { return tolerance(a, b, 1e-14) }
2174 func veryclose(a, b float64) bool { return tolerance(a, b, 4e-16) }
2175 func soclose(a, b, e float64) bool { return tolerance(a, b, e) }
2176 func alike(a, b float64) bool {
2177 switch {
2178 case IsNaN(a) && IsNaN(b):
2179 return true
2180 case a == b:
2181 return Signbit(a) == Signbit(b)
2182 }
2183 return false
2184 }
2185
2186 func TestNaN(t *testing.T) {
2187 f64 := NaN()
2188 if f64 == f64 {
2189 t.Fatalf("NaN() returns %g, expected NaN", f64)
2190 }
2191 f32 := float32(f64)
2192 if f32 == f32 {
2193 t.Fatalf("float32(NaN()) is %g, expected NaN", f32)
2194 }
2195 }
2196
2197 func TestAcos(t *testing.T) {
2198 for i := 0; i < len(vf); i++ {
2199 a := vf[i] / 10
2200 if f := Acos(a); !close(acos[i], f) {
2201 t.Errorf("Acos(%g) = %g, want %g", a, f, acos[i])
2202 }
2203 }
2204 for i := 0; i < len(vfacosSC); i++ {
2205 if f := Acos(vfacosSC[i]); !alike(acosSC[i], f) {
2206 t.Errorf("Acos(%g) = %g, want %g", vfacosSC[i], f, acosSC[i])
2207 }
2208 }
2209 }
2210
2211 func TestAcosh(t *testing.T) {
2212 for i := 0; i < len(vf); i++ {
2213 a := 1 + Abs(vf[i])
2214 if f := Acosh(a); !veryclose(acosh[i], f) {
2215 t.Errorf("Acosh(%g) = %g, want %g", a, f, acosh[i])
2216 }
2217 }
2218 for i := 0; i < len(vfacoshSC); i++ {
2219 if f := Acosh(vfacoshSC[i]); !alike(acoshSC[i], f) {
2220 t.Errorf("Acosh(%g) = %g, want %g", vfacoshSC[i], f, acoshSC[i])
2221 }
2222 }
2223 }
2224
2225 func TestAsin(t *testing.T) {
2226 for i := 0; i < len(vf); i++ {
2227 a := vf[i] / 10
2228 if f := Asin(a); !veryclose(asin[i], f) {
2229 t.Errorf("Asin(%g) = %g, want %g", a, f, asin[i])
2230 }
2231 }
2232 for i := 0; i < len(vfasinSC); i++ {
2233 if f := Asin(vfasinSC[i]); !alike(asinSC[i], f) {
2234 t.Errorf("Asin(%g) = %g, want %g", vfasinSC[i], f, asinSC[i])
2235 }
2236 }
2237 }
2238
2239 func TestAsinh(t *testing.T) {
2240 for i := 0; i < len(vf); i++ {
2241 if f := Asinh(vf[i]); !veryclose(asinh[i], f) {
2242 t.Errorf("Asinh(%g) = %g, want %g", vf[i], f, asinh[i])
2243 }
2244 }
2245 for i := 0; i < len(vfasinhSC); i++ {
2246 if f := Asinh(vfasinhSC[i]); !alike(asinhSC[i], f) {
2247 t.Errorf("Asinh(%g) = %g, want %g", vfasinhSC[i], f, asinhSC[i])
2248 }
2249 }
2250 }
2251
2252 func TestAtan(t *testing.T) {
2253 for i := 0; i < len(vf); i++ {
2254 if f := Atan(vf[i]); !veryclose(atan[i], f) {
2255 t.Errorf("Atan(%g) = %g, want %g", vf[i], f, atan[i])
2256 }
2257 }
2258 for i := 0; i < len(vfatanSC); i++ {
2259 if f := Atan(vfatanSC[i]); !alike(atanSC[i], f) {
2260 t.Errorf("Atan(%g) = %g, want %g", vfatanSC[i], f, atanSC[i])
2261 }
2262 }
2263 }
2264
2265 func TestAtanh(t *testing.T) {
2266 for i := 0; i < len(vf); i++ {
2267 a := vf[i] / 10
2268 if f := Atanh(a); !veryclose(atanh[i], f) {
2269 t.Errorf("Atanh(%g) = %g, want %g", a, f, atanh[i])
2270 }
2271 }
2272 for i := 0; i < len(vfatanhSC); i++ {
2273 if f := Atanh(vfatanhSC[i]); !alike(atanhSC[i], f) {
2274 t.Errorf("Atanh(%g) = %g, want %g", vfatanhSC[i], f, atanhSC[i])
2275 }
2276 }
2277 }
2278
2279 func TestAtan2(t *testing.T) {
2280 for i := 0; i < len(vf); i++ {
2281 if f := Atan2(10, vf[i]); !veryclose(atan2[i], f) {
2282 t.Errorf("Atan2(10, %g) = %g, want %g", vf[i], f, atan2[i])
2283 }
2284 }
2285 for i := 0; i < len(vfatan2SC); i++ {
2286 if f := Atan2(vfatan2SC[i][0], vfatan2SC[i][1]); !alike(atan2SC[i], f) {
2287 t.Errorf("Atan2(%g, %g) = %g, want %g", vfatan2SC[i][0], vfatan2SC[i][1], f, atan2SC[i])
2288 }
2289 }
2290 }
2291
2292 func TestCbrt(t *testing.T) {
2293 for i := 0; i < len(vf); i++ {
2294 if f := Cbrt(vf[i]); !veryclose(cbrt[i], f) {
2295 t.Errorf("Cbrt(%g) = %g, want %g", vf[i], f, cbrt[i])
2296 }
2297 }
2298 for i := 0; i < len(vfcbrtSC); i++ {
2299 if f := Cbrt(vfcbrtSC[i]); !alike(cbrtSC[i], f) {
2300 t.Errorf("Cbrt(%g) = %g, want %g", vfcbrtSC[i], f, cbrtSC[i])
2301 }
2302 }
2303 }
2304
2305 func TestCeil(t *testing.T) {
2306 for i := 0; i < len(vf); i++ {
2307 if f := Ceil(vf[i]); !alike(ceil[i], f) {
2308 t.Errorf("Ceil(%g) = %g, want %g", vf[i], f, ceil[i])
2309 }
2310 }
2311 for i := 0; i < len(vfceilSC); i++ {
2312 if f := Ceil(vfceilSC[i]); !alike(ceilSC[i], f) {
2313 t.Errorf("Ceil(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
2314 }
2315 }
2316 }
2317
2318 func TestCopysign(t *testing.T) {
2319 for i := 0; i < len(vf); i++ {
2320 if f := Copysign(vf[i], -1); copysign[i] != f {
2321 t.Errorf("Copysign(%g, -1) = %g, want %g", vf[i], f, copysign[i])
2322 }
2323 }
2324 for i := 0; i < len(vf); i++ {
2325 if f := Copysign(vf[i], 1); -copysign[i] != f {
2326 t.Errorf("Copysign(%g, 1) = %g, want %g", vf[i], f, -copysign[i])
2327 }
2328 }
2329 for i := 0; i < len(vfcopysignSC); i++ {
2330 if f := Copysign(vfcopysignSC[i], -1); !alike(copysignSC[i], f) {
2331 t.Errorf("Copysign(%g, -1) = %g, want %g", vfcopysignSC[i], f, copysignSC[i])
2332 }
2333 }
2334 }
2335
2336 func TestCos(t *testing.T) {
2337 for i := 0; i < len(vf); i++ {
2338 if f := Cos(vf[i]); !veryclose(cos[i], f) {
2339 t.Errorf("Cos(%g) = %g, want %g", vf[i], f, cos[i])
2340 }
2341 }
2342 for i := 0; i < len(vfcosSC); i++ {
2343 if f := Cos(vfcosSC[i]); !alike(cosSC[i], f) {
2344 t.Errorf("Cos(%g) = %g, want %g", vfcosSC[i], f, cosSC[i])
2345 }
2346 }
2347 }
2348
2349 func TestCosh(t *testing.T) {
2350 for i := 0; i < len(vf); i++ {
2351 if f := Cosh(vf[i]); !close(cosh[i], f) {
2352 t.Errorf("Cosh(%g) = %g, want %g", vf[i], f, cosh[i])
2353 }
2354 }
2355 for i := 0; i < len(vfcoshSC); i++ {
2356 if f := Cosh(vfcoshSC[i]); !alike(coshSC[i], f) {
2357 t.Errorf("Cosh(%g) = %g, want %g", vfcoshSC[i], f, coshSC[i])
2358 }
2359 }
2360 }
2361
2362 func TestErf(t *testing.T) {
2363 for i := 0; i < len(vf); i++ {
2364 a := vf[i] / 10
2365 if f := Erf(a); !veryclose(erf[i], f) {
2366 t.Errorf("Erf(%g) = %g, want %g", a, f, erf[i])
2367 }
2368 }
2369 for i := 0; i < len(vferfSC); i++ {
2370 if f := Erf(vferfSC[i]); !alike(erfSC[i], f) {
2371 t.Errorf("Erf(%g) = %g, want %g", vferfSC[i], f, erfSC[i])
2372 }
2373 }
2374 }
2375
2376 func TestErfc(t *testing.T) {
2377 for i := 0; i < len(vf); i++ {
2378 a := vf[i] / 10
2379 if f := Erfc(a); !veryclose(erfc[i], f) {
2380 t.Errorf("Erfc(%g) = %g, want %g", a, f, erfc[i])
2381 }
2382 }
2383 for i := 0; i < len(vferfcSC); i++ {
2384 if f := Erfc(vferfcSC[i]); !alike(erfcSC[i], f) {
2385 t.Errorf("Erfc(%g) = %g, want %g", vferfcSC[i], f, erfcSC[i])
2386 }
2387 }
2388 }
2389
2390 func TestErfinv(t *testing.T) {
2391 for i := 0; i < len(vf); i++ {
2392 a := vf[i] / 10
2393 if f := Erfinv(a); !veryclose(erfinv[i], f) {
2394 t.Errorf("Erfinv(%g) = %g, want %g", a, f, erfinv[i])
2395 }
2396 }
2397 for i := 0; i < len(vferfinvSC); i++ {
2398 if f := Erfinv(vferfinvSC[i]); !alike(erfinvSC[i], f) {
2399 t.Errorf("Erfinv(%g) = %g, want %g", vferfinvSC[i], f, erfinvSC[i])
2400 }
2401 }
2402 for x := -0.9; x <= 0.90; x += 1e-2 {
2403 if f := Erf(Erfinv(x)); !close(x, f) {
2404 t.Errorf("Erf(Erfinv(%g)) = %g, want %g", x, f, x)
2405 }
2406 }
2407 for x := -0.9; x <= 0.90; x += 1e-2 {
2408 if f := Erfinv(Erf(x)); !close(x, f) {
2409 t.Errorf("Erfinv(Erf(%g)) = %g, want %g", x, f, x)
2410 }
2411 }
2412 }
2413
2414 func TestErfcinv(t *testing.T) {
2415 for i := 0; i < len(vf); i++ {
2416 a := 1.0 - (vf[i] / 10)
2417 if f := Erfcinv(a); !veryclose(erfinv[i], f) {
2418 t.Errorf("Erfcinv(%g) = %g, want %g", a, f, erfinv[i])
2419 }
2420 }
2421 for i := 0; i < len(vferfcinvSC); i++ {
2422 if f := Erfcinv(vferfcinvSC[i]); !alike(erfcinvSC[i], f) {
2423 t.Errorf("Erfcinv(%g) = %g, want %g", vferfcinvSC[i], f, erfcinvSC[i])
2424 }
2425 }
2426 for x := 0.1; x <= 1.9; x += 1e-2 {
2427 if f := Erfc(Erfcinv(x)); !close(x, f) {
2428 t.Errorf("Erfc(Erfcinv(%g)) = %g, want %g", x, f, x)
2429 }
2430 }
2431 for x := 0.1; x <= 1.9; x += 1e-2 {
2432 if f := Erfcinv(Erfc(x)); !close(x, f) {
2433 t.Errorf("Erfcinv(Erfc(%g)) = %g, want %g", x, f, x)
2434 }
2435 }
2436 }
2437
2438 func TestExp(t *testing.T) {
2439 testExp(t, Exp, "Exp")
2440 testExp(t, ExpGo, "ExpGo")
2441 }
2442
2443 func testExp(t *testing.T, Exp func(float64) float64, name string) {
2444 for i := 0; i < len(vf); i++ {
2445 if f := Exp(vf[i]); !veryclose(exp[i], f) {
2446 t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp[i])
2447 }
2448 }
2449 for i := 0; i < len(vfexpSC); i++ {
2450 if f := Exp(vfexpSC[i]); !alike(expSC[i], f) {
2451 t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
2452 }
2453 }
2454 }
2455
2456 func TestExpm1(t *testing.T) {
2457 for i := 0; i < len(vf); i++ {
2458 a := vf[i] / 100
2459 if f := Expm1(a); !veryclose(expm1[i], f) {
2460 t.Errorf("Expm1(%g) = %g, want %g", a, f, expm1[i])
2461 }
2462 }
2463 for i := 0; i < len(vf); i++ {
2464 a := vf[i] * 10
2465 if f := Expm1(a); !close(expm1Large[i], f) {
2466 t.Errorf("Expm1(%g) = %g, want %g", a, f, expm1Large[i])
2467 }
2468 }
2469 for i := 0; i < len(vfexpm1SC); i++ {
2470 if f := Expm1(vfexpm1SC[i]); !alike(expm1SC[i], f) {
2471 t.Errorf("Expm1(%g) = %g, want %g", vfexpm1SC[i], f, expm1SC[i])
2472 }
2473 }
2474 }
2475
2476 func TestExp2(t *testing.T) {
2477 testExp2(t, Exp2, "Exp2")
2478 testExp2(t, Exp2Go, "Exp2Go")
2479 }
2480
2481 func testExp2(t *testing.T, Exp2 func(float64) float64, name string) {
2482 for i := 0; i < len(vf); i++ {
2483 if f := Exp2(vf[i]); !close(exp2[i], f) {
2484 t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp2[i])
2485 }
2486 }
2487 for i := 0; i < len(vfexp2SC); i++ {
2488 if f := Exp2(vfexp2SC[i]); !alike(exp2SC[i], f) {
2489 t.Errorf("%s(%g) = %g, want %g", name, vfexp2SC[i], f, exp2SC[i])
2490 }
2491 }
2492 for n := -1074; n < 1024; n++ {
2493 f := Exp2(float64(n))
2494 vf := Ldexp(1, n)
2495 if f != vf {
2496 t.Errorf("%s(%d) = %g, want %g", name, n, f, vf)
2497 }
2498 }
2499 }
2500
2501 func TestAbs(t *testing.T) {
2502 for i := 0; i < len(vf); i++ {
2503 if f := Abs(vf[i]); fabs[i] != f {
2504 t.Errorf("Abs(%g) = %g, want %g", vf[i], f, fabs[i])
2505 }
2506 }
2507 for i := 0; i < len(vffabsSC); i++ {
2508 if f := Abs(vffabsSC[i]); !alike(fabsSC[i], f) {
2509 t.Errorf("Abs(%g) = %g, want %g", vffabsSC[i], f, fabsSC[i])
2510 }
2511 }
2512 }
2513
2514 func TestDim(t *testing.T) {
2515 for i := 0; i < len(vf); i++ {
2516 if f := Dim(vf[i], 0); fdim[i] != f {
2517 t.Errorf("Dim(%g, %g) = %g, want %g", vf[i], 0.0, f, fdim[i])
2518 }
2519 }
2520 for i := 0; i < len(vffdimSC); i++ {
2521 if f := Dim(vffdimSC[i][0], vffdimSC[i][1]); !alike(fdimSC[i], f) {
2522 t.Errorf("Dim(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fdimSC[i])
2523 }
2524 }
2525 for i := 0; i < len(vffdim2SC); i++ {
2526 if f := Dim(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fdimSC[i], f) {
2527 t.Errorf("Dim(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fdimSC[i])
2528 }
2529 }
2530 }
2531
2532 func TestFloor(t *testing.T) {
2533 for i := 0; i < len(vf); i++ {
2534 if f := Floor(vf[i]); !alike(floor[i], f) {
2535 t.Errorf("Floor(%g) = %g, want %g", vf[i], f, floor[i])
2536 }
2537 }
2538 for i := 0; i < len(vfceilSC); i++ {
2539 if f := Floor(vfceilSC[i]); !alike(floorSC[i], f) {
2540 t.Errorf("Floor(%g) = %g, want %g", vfceilSC[i], f, floorSC[i])
2541 }
2542 }
2543 }
2544
2545 func TestMax(t *testing.T) {
2546 for i := 0; i < len(vf); i++ {
2547 if f := Max(vf[i], ceil[i]); ceil[i] != f {
2548 t.Errorf("Max(%g, %g) = %g, want %g", vf[i], ceil[i], f, ceil[i])
2549 }
2550 }
2551 for i := 0; i < len(vffdimSC); i++ {
2552 if f := Max(vffdimSC[i][0], vffdimSC[i][1]); !alike(fmaxSC[i], f) {
2553 t.Errorf("Max(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fmaxSC[i])
2554 }
2555 }
2556 for i := 0; i < len(vffdim2SC); i++ {
2557 if f := Max(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fmaxSC[i], f) {
2558 t.Errorf("Max(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fmaxSC[i])
2559 }
2560 }
2561 }
2562
2563 func TestMin(t *testing.T) {
2564 for i := 0; i < len(vf); i++ {
2565 if f := Min(vf[i], floor[i]); floor[i] != f {
2566 t.Errorf("Min(%g, %g) = %g, want %g", vf[i], floor[i], f, floor[i])
2567 }
2568 }
2569 for i := 0; i < len(vffdimSC); i++ {
2570 if f := Min(vffdimSC[i][0], vffdimSC[i][1]); !alike(fminSC[i], f) {
2571 t.Errorf("Min(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fminSC[i])
2572 }
2573 }
2574 for i := 0; i < len(vffdim2SC); i++ {
2575 if f := Min(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fminSC[i], f) {
2576 t.Errorf("Min(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fminSC[i])
2577 }
2578 }
2579 }
2580
2581 func TestMod(t *testing.T) {
2582 for i := 0; i < len(vf); i++ {
2583 if f := Mod(10, vf[i]); fmod[i] != f {
2584 t.Errorf("Mod(10, %g) = %g, want %g", vf[i], f, fmod[i])
2585 }
2586 }
2587 for i := 0; i < len(vffmodSC); i++ {
2588 if f := Mod(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
2589 t.Errorf("Mod(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
2590 }
2591 }
2592
2593 if f := Mod(5.9790119248836734e+200, 1.1258465975523544); 0.6447968302508578 != f {
2594 t.Errorf("Remainder(5.9790119248836734e+200, 1.1258465975523544) = %g, want 0.6447968302508578", f)
2595 }
2596 }
2597
2598 func TestFrexp(t *testing.T) {
2599 for i := 0; i < len(vf); i++ {
2600 if f, j := Frexp(vf[i]); !veryclose(frexp[i].f, f) || frexp[i].i != j {
2601 t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vf[i], f, j, frexp[i].f, frexp[i].i)
2602 }
2603 }
2604 for i := 0; i < len(vffrexpSC); i++ {
2605 if f, j := Frexp(vffrexpSC[i]); !alike(frexpSC[i].f, f) || frexpSC[i].i != j {
2606 t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpSC[i], f, j, frexpSC[i].f, frexpSC[i].i)
2607 }
2608 }
2609 for i := 0; i < len(vffrexpBC); i++ {
2610 if f, j := Frexp(vffrexpBC[i]); !alike(frexpBC[i].f, f) || frexpBC[i].i != j {
2611 t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpBC[i], f, j, frexpBC[i].f, frexpBC[i].i)
2612 }
2613 }
2614 }
2615
2616 func TestGamma(t *testing.T) {
2617 for i := 0; i < len(vf); i++ {
2618 if f := Gamma(vf[i]); !close(gamma[i], f) {
2619 t.Errorf("Gamma(%g) = %g, want %g", vf[i], f, gamma[i])
2620 }
2621 }
2622 for _, g := range vfgamma {
2623 f := Gamma(g[0])
2624 var ok bool
2625 if IsNaN(g[1]) || IsInf(g[1], 0) || g[1] == 0 || f == 0 {
2626 ok = alike(g[1], f)
2627 } else if g[0] > -50 && g[0] <= 171 {
2628 ok = veryclose(g[1], f)
2629 } else {
2630 ok = close(g[1], f)
2631 }
2632 if !ok {
2633 t.Errorf("Gamma(%g) = %g, want %g", g[0], f, g[1])
2634 }
2635 }
2636 }
2637
2638 func TestHypot(t *testing.T) {
2639 for i := 0; i < len(vf); i++ {
2640 a := Abs(1e200 * tanh[i] * Sqrt(2))
2641 if f := Hypot(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
2642 t.Errorf("Hypot(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
2643 }
2644 }
2645 for i := 0; i < len(vfhypotSC); i++ {
2646 if f := Hypot(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
2647 t.Errorf("Hypot(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
2648 }
2649 }
2650 }
2651
2652 func TestHypotGo(t *testing.T) {
2653 for i := 0; i < len(vf); i++ {
2654 a := Abs(1e200 * tanh[i] * Sqrt(2))
2655 if f := HypotGo(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
2656 t.Errorf("HypotGo(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
2657 }
2658 }
2659 for i := 0; i < len(vfhypotSC); i++ {
2660 if f := HypotGo(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
2661 t.Errorf("HypotGo(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
2662 }
2663 }
2664 }
2665
2666 func TestIlogb(t *testing.T) {
2667 for i := 0; i < len(vf); i++ {
2668 a := frexp[i].i - 1
2669 if e := Ilogb(vf[i]); a != e {
2670 t.Errorf("Ilogb(%g) = %d, want %d", vf[i], e, a)
2671 }
2672 }
2673 for i := 0; i < len(vflogbSC); i++ {
2674 if e := Ilogb(vflogbSC[i]); ilogbSC[i] != e {
2675 t.Errorf("Ilogb(%g) = %d, want %d", vflogbSC[i], e, ilogbSC[i])
2676 }
2677 }
2678 for i := 0; i < len(vffrexpBC); i++ {
2679 if e := Ilogb(vffrexpBC[i]); int(logbBC[i]) != e {
2680 t.Errorf("Ilogb(%g) = %d, want %d", vffrexpBC[i], e, int(logbBC[i]))
2681 }
2682 }
2683 }
2684
2685 func TestJ0(t *testing.T) {
2686 for i := 0; i < len(vf); i++ {
2687 if f := J0(vf[i]); !soclose(j0[i], f, 4e-14) {
2688 t.Errorf("J0(%g) = %g, want %g", vf[i], f, j0[i])
2689 }
2690 }
2691 for i := 0; i < len(vfj0SC); i++ {
2692 if f := J0(vfj0SC[i]); !alike(j0SC[i], f) {
2693 t.Errorf("J0(%g) = %g, want %g", vfj0SC[i], f, j0SC[i])
2694 }
2695 }
2696 }
2697
2698 func TestJ1(t *testing.T) {
2699 for i := 0; i < len(vf); i++ {
2700 if f := J1(vf[i]); !close(j1[i], f) {
2701 t.Errorf("J1(%g) = %g, want %g", vf[i], f, j1[i])
2702 }
2703 }
2704 for i := 0; i < len(vfj0SC); i++ {
2705 if f := J1(vfj0SC[i]); !alike(j1SC[i], f) {
2706 t.Errorf("J1(%g) = %g, want %g", vfj0SC[i], f, j1SC[i])
2707 }
2708 }
2709 }
2710
2711 func TestJn(t *testing.T) {
2712 for i := 0; i < len(vf); i++ {
2713 if f := Jn(2, vf[i]); !close(j2[i], f) {
2714 t.Errorf("Jn(2, %g) = %g, want %g", vf[i], f, j2[i])
2715 }
2716 if f := Jn(-3, vf[i]); !close(jM3[i], f) {
2717 t.Errorf("Jn(-3, %g) = %g, want %g", vf[i], f, jM3[i])
2718 }
2719 }
2720 for i := 0; i < len(vfj0SC); i++ {
2721 if f := Jn(2, vfj0SC[i]); !alike(j2SC[i], f) {
2722 t.Errorf("Jn(2, %g) = %g, want %g", vfj0SC[i], f, j2SC[i])
2723 }
2724 if f := Jn(-3, vfj0SC[i]); !alike(jM3SC[i], f) {
2725 t.Errorf("Jn(-3, %g) = %g, want %g", vfj0SC[i], f, jM3SC[i])
2726 }
2727 }
2728 }
2729
2730 func TestLdexp(t *testing.T) {
2731 for i := 0; i < len(vf); i++ {
2732 if f := Ldexp(frexp[i].f, frexp[i].i); !veryclose(vf[i], f) {
2733 t.Errorf("Ldexp(%g, %d) = %g, want %g", frexp[i].f, frexp[i].i, f, vf[i])
2734 }
2735 }
2736 for i := 0; i < len(vffrexpSC); i++ {
2737 if f := Ldexp(frexpSC[i].f, frexpSC[i].i); !alike(vffrexpSC[i], f) {
2738 t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpSC[i].f, frexpSC[i].i, f, vffrexpSC[i])
2739 }
2740 }
2741 for i := 0; i < len(vfldexpSC); i++ {
2742 if f := Ldexp(vfldexpSC[i].f, vfldexpSC[i].i); !alike(ldexpSC[i], f) {
2743 t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpSC[i].f, vfldexpSC[i].i, f, ldexpSC[i])
2744 }
2745 }
2746 for i := 0; i < len(vffrexpBC); i++ {
2747 if f := Ldexp(frexpBC[i].f, frexpBC[i].i); !alike(vffrexpBC[i], f) {
2748 t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpBC[i].f, frexpBC[i].i, f, vffrexpBC[i])
2749 }
2750 }
2751 for i := 0; i < len(vfldexpBC); i++ {
2752 if f := Ldexp(vfldexpBC[i].f, vfldexpBC[i].i); !alike(ldexpBC[i], f) {
2753 t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpBC[i].f, vfldexpBC[i].i, f, ldexpBC[i])
2754 }
2755 }
2756 }
2757
2758 func TestLgamma(t *testing.T) {
2759 for i := 0; i < len(vf); i++ {
2760 if f, s := Lgamma(vf[i]); !close(lgamma[i].f, f) || lgamma[i].i != s {
2761 t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vf[i], f, s, lgamma[i].f, lgamma[i].i)
2762 }
2763 }
2764 for i := 0; i < len(vflgammaSC); i++ {
2765 if f, s := Lgamma(vflgammaSC[i]); !alike(lgammaSC[i].f, f) || lgammaSC[i].i != s {
2766 t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vflgammaSC[i], f, s, lgammaSC[i].f, lgammaSC[i].i)
2767 }
2768 }
2769 }
2770
2771 func TestLog(t *testing.T) {
2772 for i := 0; i < len(vf); i++ {
2773 a := Abs(vf[i])
2774 if f := Log(a); log[i] != f {
2775 t.Errorf("Log(%g) = %g, want %g", a, f, log[i])
2776 }
2777 }
2778 if f := Log(10); f != Ln10 {
2779 t.Errorf("Log(%g) = %g, want %g", 10.0, f, Ln10)
2780 }
2781 for i := 0; i < len(vflogSC); i++ {
2782 if f := Log(vflogSC[i]); !alike(logSC[i], f) {
2783 t.Errorf("Log(%g) = %g, want %g", vflogSC[i], f, logSC[i])
2784 }
2785 }
2786 }
2787
2788 func TestLogb(t *testing.T) {
2789 for i := 0; i < len(vf); i++ {
2790 if f := Logb(vf[i]); logb[i] != f {
2791 t.Errorf("Logb(%g) = %g, want %g", vf[i], f, logb[i])
2792 }
2793 }
2794 for i := 0; i < len(vflogbSC); i++ {
2795 if f := Logb(vflogbSC[i]); !alike(logbSC[i], f) {
2796 t.Errorf("Logb(%g) = %g, want %g", vflogbSC[i], f, logbSC[i])
2797 }
2798 }
2799 for i := 0; i < len(vffrexpBC); i++ {
2800 if f := Logb(vffrexpBC[i]); !alike(logbBC[i], f) {
2801 t.Errorf("Logb(%g) = %g, want %g", vffrexpBC[i], f, logbBC[i])
2802 }
2803 }
2804 }
2805
2806 func TestLog10(t *testing.T) {
2807 for i := 0; i < len(vf); i++ {
2808 a := Abs(vf[i])
2809 if f := Log10(a); !veryclose(log10[i], f) {
2810 t.Errorf("Log10(%g) = %g, want %g", a, f, log10[i])
2811 }
2812 }
2813 if f := Log10(E); f != Log10E {
2814 t.Errorf("Log10(%g) = %g, want %g", E, f, Log10E)
2815 }
2816 for i := 0; i < len(vflogSC); i++ {
2817 if f := Log10(vflogSC[i]); !alike(logSC[i], f) {
2818 t.Errorf("Log10(%g) = %g, want %g", vflogSC[i], f, logSC[i])
2819 }
2820 }
2821 }
2822
2823 func TestLog1p(t *testing.T) {
2824 for i := 0; i < len(vf); i++ {
2825 a := vf[i] / 100
2826 if f := Log1p(a); !veryclose(log1p[i], f) {
2827 t.Errorf("Log1p(%g) = %g, want %g", a, f, log1p[i])
2828 }
2829 }
2830 a := 9.0
2831 if f := Log1p(a); f != Ln10 {
2832 t.Errorf("Log1p(%g) = %g, want %g", a, f, Ln10)
2833 }
2834 for i := 0; i < len(vflogSC); i++ {
2835 if f := Log1p(vflog1pSC[i]); !alike(log1pSC[i], f) {
2836 t.Errorf("Log1p(%g) = %g, want %g", vflog1pSC[i], f, log1pSC[i])
2837 }
2838 }
2839 }
2840
2841 func TestLog2(t *testing.T) {
2842 for i := 0; i < len(vf); i++ {
2843 a := Abs(vf[i])
2844 if f := Log2(a); !veryclose(log2[i], f) {
2845 t.Errorf("Log2(%g) = %g, want %g", a, f, log2[i])
2846 }
2847 }
2848 if f := Log2(E); f != Log2E {
2849 t.Errorf("Log2(%g) = %g, want %g", E, f, Log2E)
2850 }
2851 for i := 0; i < len(vflogSC); i++ {
2852 if f := Log2(vflogSC[i]); !alike(logSC[i], f) {
2853 t.Errorf("Log2(%g) = %g, want %g", vflogSC[i], f, logSC[i])
2854 }
2855 }
2856 for i := -1074; i <= 1023; i++ {
2857 f := Ldexp(1, i)
2858 l := Log2(f)
2859 if l != float64(i) {
2860 t.Errorf("Log2(2**%d) = %g, want %d", i, l, i)
2861 }
2862 }
2863 }
2864
2865 func TestModf(t *testing.T) {
2866 for i := 0; i < len(vf); i++ {
2867 if f, g := Modf(vf[i]); !veryclose(modf[i][0], f) || !veryclose(modf[i][1], g) {
2868 t.Errorf("Modf(%g) = %g, %g, want %g, %g", vf[i], f, g, modf[i][0], modf[i][1])
2869 }
2870 }
2871 for i := 0; i < len(vfmodfSC); i++ {
2872 if f, g := Modf(vfmodfSC[i]); !alike(modfSC[i][0], f) || !alike(modfSC[i][1], g) {
2873 t.Errorf("Modf(%g) = %g, %g, want %g, %g", vfmodfSC[i], f, g, modfSC[i][0], modfSC[i][1])
2874 }
2875 }
2876 }
2877
2878 func TestNextafter32(t *testing.T) {
2879 for i := 0; i < len(vf); i++ {
2880 vfi := float32(vf[i])
2881 if f := Nextafter32(vfi, 10); nextafter32[i] != f {
2882 t.Errorf("Nextafter32(%g, %g) = %g want %g", vfi, 10.0, f, nextafter32[i])
2883 }
2884 }
2885 for i := 0; i < len(vfnextafter32SC); i++ {
2886 if f := Nextafter32(vfnextafter32SC[i][0], vfnextafter32SC[i][1]); !alike(float64(nextafter32SC[i]), float64(f)) {
2887 t.Errorf("Nextafter32(%g, %g) = %g want %g", vfnextafter32SC[i][0], vfnextafter32SC[i][1], f, nextafter32SC[i])
2888 }
2889 }
2890 }
2891
2892 func TestNextafter64(t *testing.T) {
2893 for i := 0; i < len(vf); i++ {
2894 if f := Nextafter(vf[i], 10); nextafter64[i] != f {
2895 t.Errorf("Nextafter64(%g, %g) = %g want %g", vf[i], 10.0, f, nextafter64[i])
2896 }
2897 }
2898 for i := 0; i < len(vfnextafter64SC); i++ {
2899 if f := Nextafter(vfnextafter64SC[i][0], vfnextafter64SC[i][1]); !alike(nextafter64SC[i], f) {
2900 t.Errorf("Nextafter64(%g, %g) = %g want %g", vfnextafter64SC[i][0], vfnextafter64SC[i][1], f, nextafter64SC[i])
2901 }
2902 }
2903 }
2904
2905 func TestPow(t *testing.T) {
2906 for i := 0; i < len(vf); i++ {
2907 if f := Pow(10, vf[i]); !close(pow[i], f) {
2908 t.Errorf("Pow(10, %g) = %g, want %g", vf[i], f, pow[i])
2909 }
2910 }
2911 for i := 0; i < len(vfpowSC); i++ {
2912 if f := Pow(vfpowSC[i][0], vfpowSC[i][1]); !alike(powSC[i], f) {
2913 t.Errorf("Pow(%g, %g) = %g, want %g", vfpowSC[i][0], vfpowSC[i][1], f, powSC[i])
2914 }
2915 }
2916 }
2917
2918 func TestPow10(t *testing.T) {
2919 for i := 0; i < len(vfpow10SC); i++ {
2920 if f := Pow10(vfpow10SC[i]); !alike(pow10SC[i], f) {
2921 t.Errorf("Pow10(%d) = %g, want %g", vfpow10SC[i], f, pow10SC[i])
2922 }
2923 }
2924 }
2925
2926 func TestRemainder(t *testing.T) {
2927 for i := 0; i < len(vf); i++ {
2928 if f := Remainder(10, vf[i]); remainder[i] != f {
2929 t.Errorf("Remainder(10, %g) = %g, want %g", vf[i], f, remainder[i])
2930 }
2931 }
2932 for i := 0; i < len(vffmodSC); i++ {
2933 if f := Remainder(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
2934 t.Errorf("Remainder(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
2935 }
2936 }
2937
2938 if f := Remainder(5.9790119248836734e+200, 1.1258465975523544); -0.4810497673014966 != f {
2939 t.Errorf("Remainder(5.9790119248836734e+200, 1.1258465975523544) = %g, want -0.4810497673014966", f)
2940 }
2941
2942 test := func(x, y float64) {
2943 if r := Remainder(x, y); r == 0 && Signbit(r) != Signbit(x) {
2944 t.Errorf("Remainder(x=%f, y=%f) = %f, sign of (zero) result should agree with sign of x", x, y, r)
2945 }
2946 }
2947 for x := 0.0; x <= 3.0; x += 1 {
2948 for y := 1.0; y <= 3.0; y += 1 {
2949 test(x, y)
2950 test(x, -y)
2951 test(-x, y)
2952 test(-x, -y)
2953 }
2954 }
2955 }
2956
2957 func TestRound(t *testing.T) {
2958 for i := 0; i < len(vf); i++ {
2959 if f := Round(vf[i]); !alike(round[i], f) {
2960 t.Errorf("Round(%g) = %g, want %g", vf[i], f, round[i])
2961 }
2962 }
2963 for i := 0; i < len(vfroundSC); i++ {
2964 if f := Round(vfroundSC[i][0]); !alike(vfroundSC[i][1], f) {
2965 t.Errorf("Round(%g) = %g, want %g", vfroundSC[i][0], f, vfroundSC[i][1])
2966 }
2967 }
2968 }
2969
2970 func TestRoundToEven(t *testing.T) {
2971 for i := 0; i < len(vf); i++ {
2972 if f := RoundToEven(vf[i]); !alike(round[i], f) {
2973 t.Errorf("RoundToEven(%g) = %g, want %g", vf[i], f, round[i])
2974 }
2975 }
2976 for i := 0; i < len(vfroundEvenSC); i++ {
2977 if f := RoundToEven(vfroundEvenSC[i][0]); !alike(vfroundEvenSC[i][1], f) {
2978 t.Errorf("RoundToEven(%g) = %g, want %g", vfroundEvenSC[i][0], f, vfroundEvenSC[i][1])
2979 }
2980 }
2981 }
2982
2983 func TestSignbit(t *testing.T) {
2984 for i := 0; i < len(vf); i++ {
2985 if f := Signbit(vf[i]); signbit[i] != f {
2986 t.Errorf("Signbit(%g) = %t, want %t", vf[i], f, signbit[i])
2987 }
2988 }
2989 for i := 0; i < len(vfsignbitSC); i++ {
2990 if f := Signbit(vfsignbitSC[i]); signbitSC[i] != f {
2991 t.Errorf("Signbit(%g) = %t, want %t", vfsignbitSC[i], f, signbitSC[i])
2992 }
2993 }
2994 }
2995 func TestSin(t *testing.T) {
2996 for i := 0; i < len(vf); i++ {
2997 if f := Sin(vf[i]); !veryclose(sin[i], f) {
2998 t.Errorf("Sin(%g) = %g, want %g", vf[i], f, sin[i])
2999 }
3000 }
3001 for i := 0; i < len(vfsinSC); i++ {
3002 if f := Sin(vfsinSC[i]); !alike(sinSC[i], f) {
3003 t.Errorf("Sin(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
3004 }
3005 }
3006 }
3007
3008 func TestSincos(t *testing.T) {
3009 for i := 0; i < len(vf); i++ {
3010 if s, c := Sincos(vf[i]); !veryclose(sin[i], s) || !veryclose(cos[i], c) {
3011 t.Errorf("Sincos(%g) = %g, %g want %g, %g", vf[i], s, c, sin[i], cos[i])
3012 }
3013 }
3014 }
3015
3016 func TestSinh(t *testing.T) {
3017 for i := 0; i < len(vf); i++ {
3018 if f := Sinh(vf[i]); !close(sinh[i], f) {
3019 t.Errorf("Sinh(%g) = %g, want %g", vf[i], f, sinh[i])
3020 }
3021 }
3022 for i := 0; i < len(vfsinhSC); i++ {
3023 if f := Sinh(vfsinhSC[i]); !alike(sinhSC[i], f) {
3024 t.Errorf("Sinh(%g) = %g, want %g", vfsinhSC[i], f, sinhSC[i])
3025 }
3026 }
3027 }
3028
3029 func TestSqrt(t *testing.T) {
3030 for i := 0; i < len(vf); i++ {
3031 a := Abs(vf[i])
3032 if f := SqrtGo(a); sqrt[i] != f {
3033 t.Errorf("SqrtGo(%g) = %g, want %g", a, f, sqrt[i])
3034 }
3035 a = Abs(vf[i])
3036 if f := Sqrt(a); sqrt[i] != f {
3037 t.Errorf("Sqrt(%g) = %g, want %g", a, f, sqrt[i])
3038 }
3039 }
3040 for i := 0; i < len(vfsqrtSC); i++ {
3041 if f := SqrtGo(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
3042 t.Errorf("SqrtGo(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
3043 }
3044 if f := Sqrt(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
3045 t.Errorf("Sqrt(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
3046 }
3047 }
3048 }
3049
3050 func TestTan(t *testing.T) {
3051 for i := 0; i < len(vf); i++ {
3052 if f := Tan(vf[i]); !veryclose(tan[i], f) {
3053 t.Errorf("Tan(%g) = %g, want %g", vf[i], f, tan[i])
3054 }
3055 }
3056
3057 for i := 0; i < len(vfsinSC); i++ {
3058 if f := Tan(vfsinSC[i]); !alike(sinSC[i], f) {
3059 t.Errorf("Tan(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
3060 }
3061 }
3062 }
3063
3064 func TestTanh(t *testing.T) {
3065 for i := 0; i < len(vf); i++ {
3066 if f := Tanh(vf[i]); !veryclose(tanh[i], f) {
3067 t.Errorf("Tanh(%g) = %g, want %g", vf[i], f, tanh[i])
3068 }
3069 }
3070 for i := 0; i < len(vftanhSC); i++ {
3071 if f := Tanh(vftanhSC[i]); !alike(tanhSC[i], f) {
3072 t.Errorf("Tanh(%g) = %g, want %g", vftanhSC[i], f, tanhSC[i])
3073 }
3074 }
3075 }
3076
3077 func TestTrunc(t *testing.T) {
3078 for i := 0; i < len(vf); i++ {
3079 if f := Trunc(vf[i]); !alike(trunc[i], f) {
3080 t.Errorf("Trunc(%g) = %g, want %g", vf[i], f, trunc[i])
3081 }
3082 }
3083 for i := 0; i < len(vfceilSC); i++ {
3084 if f := Trunc(vfceilSC[i]); !alike(truncSC[i], f) {
3085 t.Errorf("Trunc(%g) = %g, want %g", vfceilSC[i], f, truncSC[i])
3086 }
3087 }
3088 }
3089
3090 func TestY0(t *testing.T) {
3091 for i := 0; i < len(vf); i++ {
3092 a := Abs(vf[i])
3093 if f := Y0(a); !close(y0[i], f) {
3094 t.Errorf("Y0(%g) = %g, want %g", a, f, y0[i])
3095 }
3096 }
3097 for i := 0; i < len(vfy0SC); i++ {
3098 if f := Y0(vfy0SC[i]); !alike(y0SC[i], f) {
3099 t.Errorf("Y0(%g) = %g, want %g", vfy0SC[i], f, y0SC[i])
3100 }
3101 }
3102 }
3103
3104 func TestY1(t *testing.T) {
3105 for i := 0; i < len(vf); i++ {
3106 a := Abs(vf[i])
3107 if f := Y1(a); !soclose(y1[i], f, 2e-14) {
3108 t.Errorf("Y1(%g) = %g, want %g", a, f, y1[i])
3109 }
3110 }
3111 for i := 0; i < len(vfy0SC); i++ {
3112 if f := Y1(vfy0SC[i]); !alike(y1SC[i], f) {
3113 t.Errorf("Y1(%g) = %g, want %g", vfy0SC[i], f, y1SC[i])
3114 }
3115 }
3116 }
3117
3118 func TestYn(t *testing.T) {
3119 for i := 0; i < len(vf); i++ {
3120 a := Abs(vf[i])
3121 if f := Yn(2, a); !close(y2[i], f) {
3122 t.Errorf("Yn(2, %g) = %g, want %g", a, f, y2[i])
3123 }
3124 if f := Yn(-3, a); !close(yM3[i], f) {
3125 t.Errorf("Yn(-3, %g) = %g, want %g", a, f, yM3[i])
3126 }
3127 }
3128 for i := 0; i < len(vfy0SC); i++ {
3129 if f := Yn(2, vfy0SC[i]); !alike(y2SC[i], f) {
3130 t.Errorf("Yn(2, %g) = %g, want %g", vfy0SC[i], f, y2SC[i])
3131 }
3132 if f := Yn(-3, vfy0SC[i]); !alike(yM3SC[i], f) {
3133 t.Errorf("Yn(-3, %g) = %g, want %g", vfy0SC[i], f, yM3SC[i])
3134 }
3135 }
3136 if f := Yn(0, 0); !alike(Inf(-1), f) {
3137 t.Errorf("Yn(0, 0) = %g, want %g", f, Inf(-1))
3138 }
3139 }
3140
3141 var PortableFMA = FMA
3142
3143 func TestFMA(t *testing.T) {
3144 for _, c := range fmaC {
3145 got := FMA(c.x, c.y, c.z)
3146 if !alike(got, c.want) {
3147 t.Errorf("FMA(%g,%g,%g) == %g; want %g", c.x, c.y, c.z, got, c.want)
3148 }
3149 got = PortableFMA(c.x, c.y, c.z)
3150 if !alike(got, c.want) {
3151 t.Errorf("PortableFMA(%g,%g,%g) == %g; want %g", c.x, c.y, c.z, got, c.want)
3152 }
3153 }
3154 }
3155
3156
3157 func fmsub(x, y, z float64) float64 {
3158 return FMA(x, y, -z)
3159 }
3160
3161
3162 func fnmsub(x, y, z float64) float64 {
3163 return FMA(-x, y, z)
3164 }
3165
3166
3167 func fnmadd(x, y, z float64) float64 {
3168 return FMA(-x, y, -z)
3169 }
3170
3171 func TestFMANegativeArgs(t *testing.T) {
3172
3173
3174
3175
3176 for _, c := range fmaC {
3177 want := PortableFMA(c.x, c.y, -c.z)
3178 got := fmsub(c.x, c.y, c.z)
3179 if !alike(got, want) {
3180 t.Errorf("FMA(%g, %g, -(%g)) == %g, want %g", c.x, c.y, c.z, got, want)
3181 }
3182 want = PortableFMA(-c.x, c.y, c.z)
3183 got = fnmsub(c.x, c.y, c.z)
3184 if !alike(got, want) {
3185 t.Errorf("FMA(-(%g), %g, %g) == %g, want %g", c.x, c.y, c.z, got, want)
3186 }
3187 want = PortableFMA(-c.x, c.y, -c.z)
3188 got = fnmadd(c.x, c.y, c.z)
3189 if !alike(got, want) {
3190 t.Errorf("FMA(-(%g), %g, -(%g)) == %g, want %g", c.x, c.y, c.z, got, want)
3191 }
3192 }
3193 }
3194
3195
3196
3197
3198
3199 func TestLargeCos(t *testing.T) {
3200 large := float64(100000 * Pi)
3201 for i := 0; i < len(vf); i++ {
3202 f1 := cosLarge[i]
3203 f2 := Cos(vf[i] + large)
3204 if !close(f1, f2) {
3205 t.Errorf("Cos(%g) = %g, want %g", vf[i]+large, f2, f1)
3206 }
3207 }
3208 }
3209
3210 func TestLargeSin(t *testing.T) {
3211 large := float64(100000 * Pi)
3212 for i := 0; i < len(vf); i++ {
3213 f1 := sinLarge[i]
3214 f2 := Sin(vf[i] + large)
3215 if !close(f1, f2) {
3216 t.Errorf("Sin(%g) = %g, want %g", vf[i]+large, f2, f1)
3217 }
3218 }
3219 }
3220
3221 func TestLargeSincos(t *testing.T) {
3222 large := float64(100000 * Pi)
3223 for i := 0; i < len(vf); i++ {
3224 f1, g1 := sinLarge[i], cosLarge[i]
3225 f2, g2 := Sincos(vf[i] + large)
3226 if !close(f1, f2) || !close(g1, g2) {
3227 t.Errorf("Sincos(%g) = %g, %g, want %g, %g", vf[i]+large, f2, g2, f1, g1)
3228 }
3229 }
3230 }
3231
3232 func TestLargeTan(t *testing.T) {
3233 large := float64(100000 * Pi)
3234 for i := 0; i < len(vf); i++ {
3235 f1 := tanLarge[i]
3236 f2 := Tan(vf[i] + large)
3237 if !close(f1, f2) {
3238 t.Errorf("Tan(%g) = %g, want %g", vf[i]+large, f2, f1)
3239 }
3240 }
3241 }
3242
3243
3244
3245 func TestTrigReduce(t *testing.T) {
3246 inputs := make([]float64, len(vf))
3247
3248 copy(inputs, vf)
3249
3250 large := float64(100000 * Pi)
3251 for _, v := range vf {
3252 inputs = append(inputs, v+large)
3253 }
3254
3255 inputs = append(inputs, Pi, Nextafter(ReduceThreshold, 0))
3256 for _, x := range inputs {
3257
3258 j, z := TrigReduce(x)
3259 xred := float64(j)*(Pi/4) + z
3260
3261 if f, fred := Sin(x), Sin(xred); !close(f, fred) {
3262 t.Errorf("Sin(trigReduce(%g)) != Sin(%g), got %g, want %g", x, x, fred, f)
3263 }
3264 if f, fred := Cos(x), Cos(xred); !close(f, fred) {
3265 t.Errorf("Cos(trigReduce(%g)) != Cos(%g), got %g, want %g", x, x, fred, f)
3266 }
3267 if f, fred := Tan(x), Tan(xred); !close(f, fred) {
3268 t.Errorf(" Tan(trigReduce(%g)) != Tan(%g), got %g, want %g", x, x, fred, f)
3269 }
3270 f, g := Sincos(x)
3271 fred, gred := Sincos(xred)
3272 if !close(f, fred) || !close(g, gred) {
3273 t.Errorf(" Sincos(trigReduce(%g)) != Sincos(%g), got %g, %g, want %g, %g", x, x, fred, gred, f, g)
3274 }
3275 }
3276 }
3277
3278
3279
3280
3281
3282 type floatTest struct {
3283 val any
3284 name string
3285 str string
3286 }
3287
3288 var floatTests = []floatTest{
3289 {float64(MaxFloat64), "MaxFloat64", "1.7976931348623157e+308"},
3290 {float64(SmallestNonzeroFloat64), "SmallestNonzeroFloat64", "5e-324"},
3291 {float32(MaxFloat32), "MaxFloat32", "3.4028235e+38"},
3292 {float32(SmallestNonzeroFloat32), "SmallestNonzeroFloat32", "1e-45"},
3293 }
3294
3295 func TestFloatMinMax(t *testing.T) {
3296 for _, tt := range floatTests {
3297 s := fmt.Sprint(tt.val)
3298 if s != tt.str {
3299 t.Errorf("Sprint(%v) = %s, want %s", tt.name, s, tt.str)
3300 }
3301 }
3302 }
3303
3304 func TestFloatMinima(t *testing.T) {
3305 if q := float32(SmallestNonzeroFloat32 / 2); q != 0 {
3306 t.Errorf("float32(SmallestNonzeroFloat32 / 2) = %g, want 0", q)
3307 }
3308 if q := float64(SmallestNonzeroFloat64 / 2); q != 0 {
3309 t.Errorf("float64(SmallestNonzeroFloat64 / 2) = %g, want 0", q)
3310 }
3311 }
3312
3313 var indirectSqrt = Sqrt
3314
3315
3316 func TestFloat32Sqrt(t *testing.T) {
3317 for _, v := range sqrt32 {
3318 want := float32(indirectSqrt(float64(v)))
3319 got := float32(Sqrt(float64(v)))
3320 if IsNaN(float64(want)) {
3321 if !IsNaN(float64(got)) {
3322 t.Errorf("got=%#v want=NaN, v=%#v", got, v)
3323 }
3324 continue
3325 }
3326 if got != want {
3327 t.Errorf("got=%#v want=%#v, v=%#v", got, want, v)
3328 }
3329 }
3330 }
3331
3332
3333
3334
3335
3336
3337
3338 var (
3339 GlobalI int
3340 GlobalB bool
3341 GlobalF float64
3342 )
3343
3344 func BenchmarkAcos(b *testing.B) {
3345 x := 0.0
3346 for i := 0; i < b.N; i++ {
3347 x = Acos(.5)
3348 }
3349 GlobalF = x
3350 }
3351
3352 func BenchmarkAcosh(b *testing.B) {
3353 x := 0.0
3354 for i := 0; i < b.N; i++ {
3355 x = Acosh(1.5)
3356 }
3357 GlobalF = x
3358 }
3359
3360 func BenchmarkAsin(b *testing.B) {
3361 x := 0.0
3362 for i := 0; i < b.N; i++ {
3363 x = Asin(.5)
3364 }
3365 GlobalF = x
3366 }
3367
3368 func BenchmarkAsinh(b *testing.B) {
3369 x := 0.0
3370 for i := 0; i < b.N; i++ {
3371 x = Asinh(.5)
3372 }
3373 GlobalF = x
3374 }
3375
3376 func BenchmarkAtan(b *testing.B) {
3377 x := 0.0
3378 for i := 0; i < b.N; i++ {
3379 x = Atan(.5)
3380 }
3381 GlobalF = x
3382 }
3383
3384 func BenchmarkAtanh(b *testing.B) {
3385 x := 0.0
3386 for i := 0; i < b.N; i++ {
3387 x = Atanh(.5)
3388 }
3389 GlobalF = x
3390 }
3391
3392 func BenchmarkAtan2(b *testing.B) {
3393 x := 0.0
3394 for i := 0; i < b.N; i++ {
3395 x = Atan2(.5, 1)
3396 }
3397 GlobalF = x
3398 }
3399
3400 func BenchmarkCbrt(b *testing.B) {
3401 x := 0.0
3402 for i := 0; i < b.N; i++ {
3403 x = Cbrt(10)
3404 }
3405 GlobalF = x
3406 }
3407
3408 func BenchmarkCeil(b *testing.B) {
3409 x := 0.0
3410 for i := 0; i < b.N; i++ {
3411 x = Ceil(.5)
3412 }
3413 GlobalF = x
3414 }
3415
3416 var copysignNeg = -1.0
3417
3418 func BenchmarkCopysign(b *testing.B) {
3419 x := 0.0
3420 for i := 0; i < b.N; i++ {
3421 x = Copysign(.5, copysignNeg)
3422 }
3423 GlobalF = x
3424 }
3425
3426 func BenchmarkCos(b *testing.B) {
3427 x := 0.0
3428 for i := 0; i < b.N; i++ {
3429 x = Cos(.5)
3430 }
3431 GlobalF = x
3432 }
3433
3434 func BenchmarkCosh(b *testing.B) {
3435 x := 0.0
3436 for i := 0; i < b.N; i++ {
3437 x = Cosh(2.5)
3438 }
3439 GlobalF = x
3440 }
3441
3442 func BenchmarkErf(b *testing.B) {
3443 x := 0.0
3444 for i := 0; i < b.N; i++ {
3445 x = Erf(.5)
3446 }
3447 GlobalF = x
3448 }
3449
3450 func BenchmarkErfc(b *testing.B) {
3451 x := 0.0
3452 for i := 0; i < b.N; i++ {
3453 x = Erfc(.5)
3454 }
3455 GlobalF = x
3456 }
3457
3458 func BenchmarkErfinv(b *testing.B) {
3459 x := 0.0
3460 for i := 0; i < b.N; i++ {
3461 x = Erfinv(.5)
3462 }
3463 GlobalF = x
3464 }
3465
3466 func BenchmarkErfcinv(b *testing.B) {
3467 x := 0.0
3468 for i := 0; i < b.N; i++ {
3469 x = Erfcinv(.5)
3470 }
3471 GlobalF = x
3472 }
3473
3474 func BenchmarkExp(b *testing.B) {
3475 x := 0.0
3476 for i := 0; i < b.N; i++ {
3477 x = Exp(.5)
3478 }
3479 GlobalF = x
3480 }
3481
3482 func BenchmarkExpGo(b *testing.B) {
3483 x := 0.0
3484 for i := 0; i < b.N; i++ {
3485 x = ExpGo(.5)
3486 }
3487 GlobalF = x
3488 }
3489
3490 func BenchmarkExpm1(b *testing.B) {
3491 x := 0.0
3492 for i := 0; i < b.N; i++ {
3493 x = Expm1(.5)
3494 }
3495 GlobalF = x
3496 }
3497
3498 func BenchmarkExp2(b *testing.B) {
3499 x := 0.0
3500 for i := 0; i < b.N; i++ {
3501 x = Exp2(.5)
3502 }
3503 GlobalF = x
3504 }
3505
3506 func BenchmarkExp2Go(b *testing.B) {
3507 x := 0.0
3508 for i := 0; i < b.N; i++ {
3509 x = Exp2Go(.5)
3510 }
3511 GlobalF = x
3512 }
3513
3514 var absPos = .5
3515
3516 func BenchmarkAbs(b *testing.B) {
3517 x := 0.0
3518 for i := 0; i < b.N; i++ {
3519 x = Abs(absPos)
3520 }
3521 GlobalF = x
3522
3523 }
3524
3525 func BenchmarkDim(b *testing.B) {
3526 x := 0.0
3527 for i := 0; i < b.N; i++ {
3528 x = Dim(GlobalF, x)
3529 }
3530 GlobalF = x
3531 }
3532
3533 func BenchmarkFloor(b *testing.B) {
3534 x := 0.0
3535 for i := 0; i < b.N; i++ {
3536 x = Floor(.5)
3537 }
3538 GlobalF = x
3539 }
3540
3541 func BenchmarkMax(b *testing.B) {
3542 x := 0.0
3543 for i := 0; i < b.N; i++ {
3544 x = Max(10, 3)
3545 }
3546 GlobalF = x
3547 }
3548
3549 func BenchmarkMin(b *testing.B) {
3550 x := 0.0
3551 for i := 0; i < b.N; i++ {
3552 x = Min(10, 3)
3553 }
3554 GlobalF = x
3555 }
3556
3557 func BenchmarkMod(b *testing.B) {
3558 x := 0.0
3559 for i := 0; i < b.N; i++ {
3560 x = Mod(10, 3)
3561 }
3562 GlobalF = x
3563 }
3564
3565 func BenchmarkFrexp(b *testing.B) {
3566 x := 0.0
3567 y := 0
3568 for i := 0; i < b.N; i++ {
3569 x, y = Frexp(8)
3570 }
3571 GlobalF = x
3572 GlobalI = y
3573 }
3574
3575 func BenchmarkGamma(b *testing.B) {
3576 x := 0.0
3577 for i := 0; i < b.N; i++ {
3578 x = Gamma(2.5)
3579 }
3580 GlobalF = x
3581 }
3582
3583 func BenchmarkHypot(b *testing.B) {
3584 x := 0.0
3585 for i := 0; i < b.N; i++ {
3586 x = Hypot(3, 4)
3587 }
3588 GlobalF = x
3589 }
3590
3591 func BenchmarkHypotGo(b *testing.B) {
3592 x := 0.0
3593 for i := 0; i < b.N; i++ {
3594 x = HypotGo(3, 4)
3595 }
3596 GlobalF = x
3597 }
3598
3599 func BenchmarkIlogb(b *testing.B) {
3600 x := 0
3601 for i := 0; i < b.N; i++ {
3602 x = Ilogb(.5)
3603 }
3604 GlobalI = x
3605 }
3606
3607 func BenchmarkJ0(b *testing.B) {
3608 x := 0.0
3609 for i := 0; i < b.N; i++ {
3610 x = J0(2.5)
3611 }
3612 GlobalF = x
3613 }
3614
3615 func BenchmarkJ1(b *testing.B) {
3616 x := 0.0
3617 for i := 0; i < b.N; i++ {
3618 x = J1(2.5)
3619 }
3620 GlobalF = x
3621 }
3622
3623 func BenchmarkJn(b *testing.B) {
3624 x := 0.0
3625 for i := 0; i < b.N; i++ {
3626 x = Jn(2, 2.5)
3627 }
3628 GlobalF = x
3629 }
3630
3631 func BenchmarkLdexp(b *testing.B) {
3632 x := 0.0
3633 for i := 0; i < b.N; i++ {
3634 x = Ldexp(.5, 2)
3635 }
3636 GlobalF = x
3637 }
3638
3639 func BenchmarkLgamma(b *testing.B) {
3640 x := 0.0
3641 y := 0
3642 for i := 0; i < b.N; i++ {
3643 x, y = Lgamma(2.5)
3644 }
3645 GlobalF = x
3646 GlobalI = y
3647 }
3648
3649 func BenchmarkLog(b *testing.B) {
3650 x := 0.0
3651 for i := 0; i < b.N; i++ {
3652 x = Log(.5)
3653 }
3654 GlobalF = x
3655 }
3656
3657 func BenchmarkLogb(b *testing.B) {
3658 x := 0.0
3659 for i := 0; i < b.N; i++ {
3660 x = Logb(.5)
3661 }
3662 GlobalF = x
3663 }
3664
3665 func BenchmarkLog1p(b *testing.B) {
3666 x := 0.0
3667 for i := 0; i < b.N; i++ {
3668 x = Log1p(.5)
3669 }
3670 GlobalF = x
3671 }
3672
3673 func BenchmarkLog10(b *testing.B) {
3674 x := 0.0
3675 for i := 0; i < b.N; i++ {
3676 x = Log10(.5)
3677 }
3678 GlobalF = x
3679 }
3680
3681 func BenchmarkLog2(b *testing.B) {
3682 x := 0.0
3683 for i := 0; i < b.N; i++ {
3684 x = Log2(.5)
3685 }
3686 GlobalF += x
3687 }
3688
3689 func BenchmarkModf(b *testing.B) {
3690 x := 0.0
3691 y := 0.0
3692 for i := 0; i < b.N; i++ {
3693 x, y = Modf(1.5)
3694 }
3695 GlobalF += x
3696 GlobalF += y
3697 }
3698
3699 func BenchmarkNextafter32(b *testing.B) {
3700 x := float32(0.0)
3701 for i := 0; i < b.N; i++ {
3702 x = Nextafter32(.5, 1)
3703 }
3704 GlobalF = float64(x)
3705 }
3706
3707 func BenchmarkNextafter64(b *testing.B) {
3708 x := 0.0
3709 for i := 0; i < b.N; i++ {
3710 x = Nextafter(.5, 1)
3711 }
3712 GlobalF = x
3713 }
3714
3715 func BenchmarkPowInt(b *testing.B) {
3716 x := 0.0
3717 for i := 0; i < b.N; i++ {
3718 x = Pow(2, 2)
3719 }
3720 GlobalF = x
3721 }
3722
3723 func BenchmarkPowFrac(b *testing.B) {
3724 x := 0.0
3725 for i := 0; i < b.N; i++ {
3726 x = Pow(2.5, 1.5)
3727 }
3728 GlobalF = x
3729 }
3730
3731 var pow10pos = int(300)
3732
3733 func BenchmarkPow10Pos(b *testing.B) {
3734 x := 0.0
3735 for i := 0; i < b.N; i++ {
3736 x = Pow10(pow10pos)
3737 }
3738 GlobalF = x
3739 }
3740
3741 var pow10neg = int(-300)
3742
3743 func BenchmarkPow10Neg(b *testing.B) {
3744 x := 0.0
3745 for i := 0; i < b.N; i++ {
3746 x = Pow10(pow10neg)
3747 }
3748 GlobalF = x
3749 }
3750
3751 var roundNeg = float64(-2.5)
3752
3753 func BenchmarkRound(b *testing.B) {
3754 x := 0.0
3755 for i := 0; i < b.N; i++ {
3756 x = Round(roundNeg)
3757 }
3758 GlobalF = x
3759 }
3760
3761 func BenchmarkRoundToEven(b *testing.B) {
3762 x := 0.0
3763 for i := 0; i < b.N; i++ {
3764 x = RoundToEven(roundNeg)
3765 }
3766 GlobalF = x
3767 }
3768
3769 func BenchmarkRemainder(b *testing.B) {
3770 x := 0.0
3771 for i := 0; i < b.N; i++ {
3772 x = Remainder(10, 3)
3773 }
3774 GlobalF = x
3775 }
3776
3777 var signbitPos = 2.5
3778
3779 func BenchmarkSignbit(b *testing.B) {
3780 x := false
3781 for i := 0; i < b.N; i++ {
3782 x = Signbit(signbitPos)
3783 }
3784 GlobalB = x
3785 }
3786
3787 func BenchmarkSin(b *testing.B) {
3788 x := 0.0
3789 for i := 0; i < b.N; i++ {
3790 x = Sin(.5)
3791 }
3792 GlobalF = x
3793 }
3794
3795 func BenchmarkSincos(b *testing.B) {
3796 x := 0.0
3797 y := 0.0
3798 for i := 0; i < b.N; i++ {
3799 x, y = Sincos(.5)
3800 }
3801 GlobalF += x
3802 GlobalF += y
3803 }
3804
3805 func BenchmarkSinh(b *testing.B) {
3806 x := 0.0
3807 for i := 0; i < b.N; i++ {
3808 x = Sinh(2.5)
3809 }
3810 GlobalF = x
3811 }
3812
3813 func BenchmarkSqrtIndirect(b *testing.B) {
3814 x, y := 0.0, 10.0
3815 f := Sqrt
3816 for i := 0; i < b.N; i++ {
3817 x += f(y)
3818 }
3819 GlobalF = x
3820 }
3821
3822 func BenchmarkSqrtLatency(b *testing.B) {
3823 x := 10.0
3824 for i := 0; i < b.N; i++ {
3825 x = Sqrt(x)
3826 }
3827 GlobalF = x
3828 }
3829
3830 func BenchmarkSqrtIndirectLatency(b *testing.B) {
3831 x := 10.0
3832 f := Sqrt
3833 for i := 0; i < b.N; i++ {
3834 x = f(x)
3835 }
3836 GlobalF = x
3837 }
3838
3839 func BenchmarkSqrtGoLatency(b *testing.B) {
3840 x := 10.0
3841 for i := 0; i < b.N; i++ {
3842 x = SqrtGo(x)
3843 }
3844 GlobalF = x
3845 }
3846
3847 func isPrime(i int) bool {
3848
3849
3850
3851
3852
3853 for j := 2; float64(j) <= Sqrt(float64(i)); j++ {
3854 if i%j == 0 {
3855 return false
3856 }
3857 }
3858 return true
3859 }
3860
3861 func BenchmarkSqrtPrime(b *testing.B) {
3862 x := false
3863 for i := 0; i < b.N; i++ {
3864 x = isPrime(100003)
3865 }
3866 GlobalB = x
3867 }
3868
3869 func BenchmarkTan(b *testing.B) {
3870 x := 0.0
3871 for i := 0; i < b.N; i++ {
3872 x = Tan(.5)
3873 }
3874 GlobalF = x
3875 }
3876
3877 func BenchmarkTanh(b *testing.B) {
3878 x := 0.0
3879 for i := 0; i < b.N; i++ {
3880 x = Tanh(2.5)
3881 }
3882 GlobalF = x
3883 }
3884 func BenchmarkTrunc(b *testing.B) {
3885 x := 0.0
3886 for i := 0; i < b.N; i++ {
3887 x = Trunc(.5)
3888 }
3889 GlobalF = x
3890 }
3891
3892 func BenchmarkY0(b *testing.B) {
3893 x := 0.0
3894 for i := 0; i < b.N; i++ {
3895 x = Y0(2.5)
3896 }
3897 GlobalF = x
3898 }
3899
3900 func BenchmarkY1(b *testing.B) {
3901 x := 0.0
3902 for i := 0; i < b.N; i++ {
3903 x = Y1(2.5)
3904 }
3905 GlobalF = x
3906 }
3907
3908 func BenchmarkYn(b *testing.B) {
3909 x := 0.0
3910 for i := 0; i < b.N; i++ {
3911 x = Yn(2, 2.5)
3912 }
3913 GlobalF = x
3914 }
3915
3916 func BenchmarkFloat64bits(b *testing.B) {
3917 y := uint64(0)
3918 for i := 0; i < b.N; i++ {
3919 y = Float64bits(roundNeg)
3920 }
3921 GlobalI = int(y)
3922 }
3923
3924 var roundUint64 = uint64(5)
3925
3926 func BenchmarkFloat64frombits(b *testing.B) {
3927 x := 0.0
3928 for i := 0; i < b.N; i++ {
3929 x = Float64frombits(roundUint64)
3930 }
3931 GlobalF = x
3932 }
3933
3934 var roundFloat32 = float32(-2.5)
3935
3936 func BenchmarkFloat32bits(b *testing.B) {
3937 y := uint32(0)
3938 for i := 0; i < b.N; i++ {
3939 y = Float32bits(roundFloat32)
3940 }
3941 GlobalI = int(y)
3942 }
3943
3944 var roundUint32 = uint32(5)
3945
3946 func BenchmarkFloat32frombits(b *testing.B) {
3947 x := float32(0.0)
3948 for i := 0; i < b.N; i++ {
3949 x = Float32frombits(roundUint32)
3950 }
3951 GlobalF = float64(x)
3952 }
3953
3954 func BenchmarkFMA(b *testing.B) {
3955 x := 0.0
3956 for i := 0; i < b.N; i++ {
3957 x = FMA(E, Pi, x)
3958 }
3959 GlobalF = x
3960 }
3961
View as plain text