var-tracking.c (vt_add_function_parameter): Adjust for VEC changes.
[official-gcc.git] / libgo / go / math / all_test.go
blobed66a42fb0088b851b3ac29ca5e5233a705506f8
1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 package math_test
7 import (
8 "fmt"
9 . "math"
10 "testing"
13 var vf = []float64{
14 4.9790119248836735e+00,
15 7.7388724745781045e+00,
16 -2.7688005719200159e-01,
17 -5.0106036182710749e+00,
18 9.6362937071984173e+00,
19 2.9263772392439646e+00,
20 5.2290834314593066e+00,
21 2.7279399104360102e+00,
22 1.8253080916808550e+00,
23 -8.6859247685756013e+00,
26 // The expected results below were computed by the high precision calculators
27 // at http://keisan.casio.com/. More exact input values (array vf[], above)
28 // were obtained by printing them with "%.26f". The answers were calculated
29 // to 26 digits (by using the "Digit number" drop-down control of each
30 // calculator).
31 var acos = []float64{
32 1.0496193546107222142571536e+00,
33 6.8584012813664425171660692e-01,
34 1.5984878714577160325521819e+00,
35 2.0956199361475859327461799e+00,
36 2.7053008467824138592616927e-01,
37 1.2738121680361776018155625e+00,
38 1.0205369421140629186287407e+00,
39 1.2945003481781246062157835e+00,
40 1.3872364345374451433846657e+00,
41 2.6231510803970463967294145e+00,
43 var acosh = []float64{
44 2.4743347004159012494457618e+00,
45 2.8576385344292769649802701e+00,
46 7.2796961502981066190593175e-01,
47 2.4796794418831451156471977e+00,
48 3.0552020742306061857212962e+00,
49 2.044238592688586588942468e+00,
50 2.5158701513104513595766636e+00,
51 1.99050839282411638174299e+00,
52 1.6988625798424034227205445e+00,
53 2.9611454842470387925531875e+00,
55 var asin = []float64{
56 5.2117697218417440497416805e-01,
57 8.8495619865825236751471477e-01,
58 -02.769154466281941332086016e-02,
59 -5.2482360935268931351485822e-01,
60 1.3002662421166552333051524e+00,
61 2.9698415875871901741575922e-01,
62 5.5025938468083370060258102e-01,
63 2.7629597861677201301553823e-01,
64 1.83559892257451475846656e-01,
65 -1.0523547536021497774980928e+00,
67 var asinh = []float64{
68 2.3083139124923523427628243e+00,
69 2.743551594301593620039021e+00,
70 -2.7345908534880091229413487e-01,
71 -2.3145157644718338650499085e+00,
72 2.9613652154015058521951083e+00,
73 1.7949041616585821933067568e+00,
74 2.3564032905983506405561554e+00,
75 1.7287118790768438878045346e+00,
76 1.3626658083714826013073193e+00,
77 -2.8581483626513914445234004e+00,
79 var atan = []float64{
80 1.372590262129621651920085e+00,
81 1.442290609645298083020664e+00,
82 -2.7011324359471758245192595e-01,
83 -1.3738077684543379452781531e+00,
84 1.4673921193587666049154681e+00,
85 1.2415173565870168649117764e+00,
86 1.3818396865615168979966498e+00,
87 1.2194305844639670701091426e+00,
88 1.0696031952318783760193244e+00,
89 -1.4561721938838084990898679e+00,
91 var atanh = []float64{
92 5.4651163712251938116878204e-01,
93 1.0299474112843111224914709e+00,
94 -2.7695084420740135145234906e-02,
95 -5.5072096119207195480202529e-01,
96 1.9943940993171843235906642e+00,
97 3.01448604578089708203017e-01,
98 5.8033427206942188834370595e-01,
99 2.7987997499441511013958297e-01,
100 1.8459947964298794318714228e-01,
101 -1.3273186910532645867272502e+00,
103 var atan2 = []float64{
104 1.1088291730037004444527075e+00,
105 9.1218183188715804018797795e-01,
106 1.5984772603216203736068915e+00,
107 2.0352918654092086637227327e+00,
108 8.0391819139044720267356014e-01,
109 1.2861075249894661588866752e+00,
110 1.0889904479131695712182587e+00,
111 1.3044821793397925293797357e+00,
112 1.3902530903455392306872261e+00,
113 2.2859857424479142655411058e+00,
115 var cbrt = []float64{
116 1.7075799841925094446722675e+00,
117 1.9779982212970353936691498e+00,
118 -6.5177429017779910853339447e-01,
119 -1.7111838886544019873338113e+00,
120 2.1279920909827937423960472e+00,
121 1.4303536770460741452312367e+00,
122 1.7357021059106154902341052e+00,
123 1.3972633462554328350552916e+00,
124 1.2221149580905388454977636e+00,
125 -2.0556003730500069110343596e+00,
127 var ceil = []float64{
128 5.0000000000000000e+00,
129 8.0000000000000000e+00,
130 0.0000000000000000e+00,
131 -5.0000000000000000e+00,
132 1.0000000000000000e+01,
133 3.0000000000000000e+00,
134 6.0000000000000000e+00,
135 3.0000000000000000e+00,
136 2.0000000000000000e+00,
137 -8.0000000000000000e+00,
139 var copysign = []float64{
140 -4.9790119248836735e+00,
141 -7.7388724745781045e+00,
142 -2.7688005719200159e-01,
143 -5.0106036182710749e+00,
144 -9.6362937071984173e+00,
145 -2.9263772392439646e+00,
146 -5.2290834314593066e+00,
147 -2.7279399104360102e+00,
148 -1.8253080916808550e+00,
149 -8.6859247685756013e+00,
151 var cos = []float64{
152 2.634752140995199110787593e-01,
153 1.148551260848219865642039e-01,
154 9.6191297325640768154550453e-01,
155 2.938141150061714816890637e-01,
156 -9.777138189897924126294461e-01,
157 -9.7693041344303219127199518e-01,
158 4.940088096948647263961162e-01,
159 -9.1565869021018925545016502e-01,
160 -2.517729313893103197176091e-01,
161 -7.39241351595676573201918e-01,
164 // Results for 100000 * Pi + vf[i]
165 var cosLarge = []float64{
166 2.634752141185559426744e-01,
167 1.14855126055543100712e-01,
168 9.61912973266488928113e-01,
169 2.9381411499556122552e-01,
170 -9.777138189880161924641e-01,
171 -9.76930413445147608049e-01,
172 4.940088097314976789841e-01,
173 -9.15658690217517835002e-01,
174 -2.51772931436786954751e-01,
175 -7.3924135157173099849e-01,
177 var cosh = []float64{
178 7.2668796942212842775517446e+01,
179 1.1479413465659254502011135e+03,
180 1.0385767908766418550935495e+00,
181 7.5000957789658051428857788e+01,
182 7.655246669605357888468613e+03,
183 9.3567491758321272072888257e+00,
184 9.331351599270605471131735e+01,
185 7.6833430994624643209296404e+00,
186 3.1829371625150718153881164e+00,
187 2.9595059261916188501640911e+03,
189 var erf = []float64{
190 5.1865354817738701906913566e-01,
191 7.2623875834137295116929844e-01,
192 -3.123458688281309990629839e-02,
193 -5.2143121110253302920437013e-01,
194 8.2704742671312902508629582e-01,
195 3.2101767558376376743993945e-01,
196 5.403990312223245516066252e-01,
197 3.0034702916738588551174831e-01,
198 2.0369924417882241241559589e-01,
199 -7.8069386968009226729944677e-01,
201 var erfc = []float64{
202 4.8134645182261298093086434e-01,
203 2.7376124165862704883070156e-01,
204 1.0312345868828130999062984e+00,
205 1.5214312111025330292043701e+00,
206 1.7295257328687097491370418e-01,
207 6.7898232441623623256006055e-01,
208 4.596009687776754483933748e-01,
209 6.9965297083261411448825169e-01,
210 7.9630075582117758758440411e-01,
211 1.7806938696800922672994468e+00,
213 var exp = []float64{
214 1.4533071302642137507696589e+02,
215 2.2958822575694449002537581e+03,
216 7.5814542574851666582042306e-01,
217 6.6668778421791005061482264e-03,
218 1.5310493273896033740861206e+04,
219 1.8659907517999328638667732e+01,
220 1.8662167355098714543942057e+02,
221 1.5301332413189378961665788e+01,
222 6.2047063430646876349125085e+00,
223 1.6894712385826521111610438e-04,
225 var expm1 = []float64{
226 5.105047796122957327384770212e-02,
227 8.046199708567344080562675439e-02,
228 -2.764970978891639815187418703e-03,
229 -4.8871434888875355394330300273e-02,
230 1.0115864277221467777117227494e-01,
231 2.969616407795910726014621657e-02,
232 5.368214487944892300914037972e-02,
233 2.765488851131274068067445335e-02,
234 1.842068661871398836913874273e-02,
235 -8.3193870863553801814961137573e-02,
237 var exp2 = []float64{
238 3.1537839463286288034313104e+01,
239 2.1361549283756232296144849e+02,
240 8.2537402562185562902577219e-01,
241 3.1021158628740294833424229e-02,
242 7.9581744110252191462569661e+02,
243 7.6019905892596359262696423e+00,
244 3.7506882048388096973183084e+01,
245 6.6250893439173561733216375e+00,
246 3.5438267900243941544605339e+00,
247 2.4281533133513300984289196e-03,
249 var fabs = []float64{
250 4.9790119248836735e+00,
251 7.7388724745781045e+00,
252 2.7688005719200159e-01,
253 5.0106036182710749e+00,
254 9.6362937071984173e+00,
255 2.9263772392439646e+00,
256 5.2290834314593066e+00,
257 2.7279399104360102e+00,
258 1.8253080916808550e+00,
259 8.6859247685756013e+00,
261 var fdim = []float64{
262 4.9790119248836735e+00,
263 7.7388724745781045e+00,
264 0.0000000000000000e+00,
265 0.0000000000000000e+00,
266 9.6362937071984173e+00,
267 2.9263772392439646e+00,
268 5.2290834314593066e+00,
269 2.7279399104360102e+00,
270 1.8253080916808550e+00,
271 0.0000000000000000e+00,
273 var floor = []float64{
274 4.0000000000000000e+00,
275 7.0000000000000000e+00,
276 -1.0000000000000000e+00,
277 -6.0000000000000000e+00,
278 9.0000000000000000e+00,
279 2.0000000000000000e+00,
280 5.0000000000000000e+00,
281 2.0000000000000000e+00,
282 1.0000000000000000e+00,
283 -9.0000000000000000e+00,
285 var fmod = []float64{
286 4.197615023265299782906368e-02,
287 2.261127525421895434476482e+00,
288 3.231794108794261433104108e-02,
289 4.989396381728925078391512e+00,
290 3.637062928015826201999516e-01,
291 1.220868282268106064236690e+00,
292 4.770916568540693347699744e+00,
293 1.816180268691969246219742e+00,
294 8.734595415957246977711748e-01,
295 1.314075231424398637614104e+00,
298 type fi struct {
299 f float64
300 i int
303 var frexp = []fi{
304 {6.2237649061045918750e-01, 3},
305 {9.6735905932226306250e-01, 3},
306 {-5.5376011438400318000e-01, -1},
307 {-6.2632545228388436250e-01, 3},
308 {6.02268356699901081250e-01, 4},
309 {7.3159430981099115000e-01, 2},
310 {6.5363542893241332500e-01, 3},
311 {6.8198497760900255000e-01, 2},
312 {9.1265404584042750000e-01, 1},
313 {-5.4287029803597508250e-01, 4},
315 var gamma = []float64{
316 2.3254348370739963835386613898e+01,
317 2.991153837155317076427529816e+03,
318 -4.561154336726758060575129109e+00,
319 7.719403468842639065959210984e-01,
320 1.6111876618855418534325755566e+05,
321 1.8706575145216421164173224946e+00,
322 3.4082787447257502836734201635e+01,
323 1.579733951448952054898583387e+00,
324 9.3834586598354592860187267089e-01,
325 -2.093995902923148389186189429e-05,
327 var j0 = []float64{
328 -1.8444682230601672018219338e-01,
329 2.27353668906331975435892e-01,
330 9.809259936157051116270273e-01,
331 -1.741170131426226587841181e-01,
332 -2.1389448451144143352039069e-01,
333 -2.340905848928038763337414e-01,
334 -1.0029099691890912094586326e-01,
335 -1.5466726714884328135358907e-01,
336 3.252650187653420388714693e-01,
337 -8.72218484409407250005360235e-03,
339 var j1 = []float64{
340 -3.251526395295203422162967e-01,
341 1.893581711430515718062564e-01,
342 -1.3711761352467242914491514e-01,
343 3.287486536269617297529617e-01,
344 1.3133899188830978473849215e-01,
345 3.660243417832986825301766e-01,
346 -3.4436769271848174665420672e-01,
347 4.329481396640773768835036e-01,
348 5.8181350531954794639333955e-01,
349 -2.7030574577733036112996607e-01,
351 var j2 = []float64{
352 5.3837518920137802565192769e-02,
353 -1.7841678003393207281244667e-01,
354 9.521746934916464142495821e-03,
355 4.28958355470987397983072e-02,
356 2.4115371837854494725492872e-01,
357 4.842458532394520316844449e-01,
358 -3.142145220618633390125946e-02,
359 4.720849184745124761189957e-01,
360 3.122312022520957042957497e-01,
361 7.096213118930231185707277e-02,
363 var jM3 = []float64{
364 -3.684042080996403091021151e-01,
365 2.8157665936340887268092661e-01,
366 4.401005480841948348343589e-04,
367 3.629926999056814081597135e-01,
368 3.123672198825455192489266e-02,
369 -2.958805510589623607540455e-01,
370 -3.2033177696533233403289416e-01,
371 -2.592737332129663376736604e-01,
372 -1.0241334641061485092351251e-01,
373 -2.3762660886100206491674503e-01,
375 var lgamma = []fi{
376 {3.146492141244545774319734e+00, 1},
377 {8.003414490659126375852113e+00, 1},
378 {1.517575735509779707488106e+00, -1},
379 {-2.588480028182145853558748e-01, 1},
380 {1.1989897050205555002007985e+01, 1},
381 {6.262899811091257519386906e-01, 1},
382 {3.5287924899091566764846037e+00, 1},
383 {4.5725644770161182299423372e-01, 1},
384 {-6.363667087767961257654854e-02, 1},
385 {-1.077385130910300066425564e+01, -1},
387 var log = []float64{
388 1.605231462693062999102599e+00,
389 2.0462560018708770653153909e+00,
390 -1.2841708730962657801275038e+00,
391 1.6115563905281545116286206e+00,
392 2.2655365644872016636317461e+00,
393 1.0737652208918379856272735e+00,
394 1.6542360106073546632707956e+00,
395 1.0035467127723465801264487e+00,
396 6.0174879014578057187016475e-01,
397 2.161703872847352815363655e+00,
399 var logb = []float64{
400 2.0000000000000000e+00,
401 2.0000000000000000e+00,
402 -2.0000000000000000e+00,
403 2.0000000000000000e+00,
404 3.0000000000000000e+00,
405 1.0000000000000000e+00,
406 2.0000000000000000e+00,
407 1.0000000000000000e+00,
408 0.0000000000000000e+00,
409 3.0000000000000000e+00,
411 var log10 = []float64{
412 6.9714316642508290997617083e-01,
413 8.886776901739320576279124e-01,
414 -5.5770832400658929815908236e-01,
415 6.998900476822994346229723e-01,
416 9.8391002850684232013281033e-01,
417 4.6633031029295153334285302e-01,
418 7.1842557117242328821552533e-01,
419 4.3583479968917773161304553e-01,
420 2.6133617905227038228626834e-01,
421 9.3881606348649405716214241e-01,
423 var log1p = []float64{
424 4.8590257759797794104158205e-02,
425 7.4540265965225865330849141e-02,
426 -2.7726407903942672823234024e-03,
427 -5.1404917651627649094953380e-02,
428 9.1998280672258624681335010e-02,
429 2.8843762576593352865894824e-02,
430 5.0969534581863707268992645e-02,
431 2.6913947602193238458458594e-02,
432 1.8088493239630770262045333e-02,
433 -9.0865245631588989681559268e-02,
435 var log2 = []float64{
436 2.3158594707062190618898251e+00,
437 2.9521233862883917703341018e+00,
438 -1.8526669502700329984917062e+00,
439 2.3249844127278861543568029e+00,
440 3.268478366538305087466309e+00,
441 1.5491157592596970278166492e+00,
442 2.3865580889631732407886495e+00,
443 1.447811865817085365540347e+00,
444 8.6813999540425116282815557e-01,
445 3.118679457227342224364709e+00,
447 var modf = [][2]float64{
448 {4.0000000000000000e+00, 9.7901192488367350108546816e-01},
449 {7.0000000000000000e+00, 7.3887247457810456552351752e-01},
450 {0.0000000000000000e+00, -2.7688005719200159404635997e-01},
451 {-5.0000000000000000e+00, -1.060361827107492160848778e-02},
452 {9.0000000000000000e+00, 6.3629370719841737980004837e-01},
453 {2.0000000000000000e+00, 9.2637723924396464525443662e-01},
454 {5.0000000000000000e+00, 2.2908343145930665230025625e-01},
455 {2.0000000000000000e+00, 7.2793991043601025126008608e-01},
456 {1.0000000000000000e+00, 8.2530809168085506044576505e-01},
457 {-8.0000000000000000e+00, -6.8592476857560136238589621e-01},
459 var nextafter = []float64{
460 4.97901192488367438926388786e+00,
461 7.73887247457810545370193722e+00,
462 -2.7688005719200153853520874e-01,
463 -5.01060361827107403343006808e+00,
464 9.63629370719841915615688777e+00,
465 2.92637723924396508934364647e+00,
466 5.22908343145930754047867595e+00,
467 2.72793991043601069534929593e+00,
468 1.82530809168085528249036997e+00,
469 -8.68592476857559958602905681e+00,
471 var pow = []float64{
472 9.5282232631648411840742957e+04,
473 5.4811599352999901232411871e+07,
474 5.2859121715894396531132279e-01,
475 9.7587991957286474464259698e-06,
476 4.328064329346044846740467e+09,
477 8.4406761805034547437659092e+02,
478 1.6946633276191194947742146e+05,
479 5.3449040147551939075312879e+02,
480 6.688182138451414936380374e+01,
481 2.0609869004248742886827439e-09,
483 var remainder = []float64{
484 4.197615023265299782906368e-02,
485 2.261127525421895434476482e+00,
486 3.231794108794261433104108e-02,
487 -2.120723654214984321697556e-02,
488 3.637062928015826201999516e-01,
489 1.220868282268106064236690e+00,
490 -4.581668629186133046005125e-01,
491 -9.117596417440410050403443e-01,
492 8.734595415957246977711748e-01,
493 1.314075231424398637614104e+00,
495 var signbit = []bool{
496 false,
497 false,
498 true,
499 true,
500 false,
501 false,
502 false,
503 false,
504 false,
505 true,
507 var sin = []float64{
508 -9.6466616586009283766724726e-01,
509 9.9338225271646545763467022e-01,
510 -2.7335587039794393342449301e-01,
511 9.5586257685042792878173752e-01,
512 -2.099421066779969164496634e-01,
513 2.135578780799860532750616e-01,
514 -8.694568971167362743327708e-01,
515 4.019566681155577786649878e-01,
516 9.6778633541687993721617774e-01,
517 -6.734405869050344734943028e-01,
520 // Results for 100000 * Pi + vf[i]
521 var sinLarge = []float64{
522 -9.646661658548936063912e-01,
523 9.933822527198506903752e-01,
524 -2.7335587036246899796e-01,
525 9.55862576853689321268e-01,
526 -2.099421066862688873691e-01,
527 2.13557878070308981163e-01,
528 -8.694568970959221300497e-01,
529 4.01956668098863248917e-01,
530 9.67786335404528727927e-01,
531 -6.7344058693131973066e-01,
533 var sinh = []float64{
534 7.2661916084208532301448439e+01,
535 1.1479409110035194500526446e+03,
536 -2.8043136512812518927312641e-01,
537 -7.499429091181587232835164e+01,
538 7.6552466042906758523925934e+03,
539 9.3031583421672014313789064e+00,
540 9.330815755828109072810322e+01,
541 7.6179893137269146407361477e+00,
542 3.021769180549615819524392e+00,
543 -2.95950575724449499189888e+03,
545 var sqrt = []float64{
546 2.2313699659365484748756904e+00,
547 2.7818829009464263511285458e+00,
548 5.2619393496314796848143251e-01,
549 2.2384377628763938724244104e+00,
550 3.1042380236055381099288487e+00,
551 1.7106657298385224403917771e+00,
552 2.286718922705479046148059e+00,
553 1.6516476350711159636222979e+00,
554 1.3510396336454586262419247e+00,
555 2.9471892997524949215723329e+00,
557 var tan = []float64{
558 -3.661316565040227801781974e+00,
559 8.64900232648597589369854e+00,
560 -2.8417941955033612725238097e-01,
561 3.253290185974728640827156e+00,
562 2.147275640380293804770778e-01,
563 -2.18600910711067004921551e-01,
564 -1.760002817872367935518928e+00,
565 -4.389808914752818126249079e-01,
566 -3.843885560201130679995041e+00,
567 9.10988793377685105753416e-01,
570 // Results for 100000 * Pi + vf[i]
571 var tanLarge = []float64{
572 -3.66131656475596512705e+00,
573 8.6490023287202547927e+00,
574 -2.841794195104782406e-01,
575 3.2532901861033120983e+00,
576 2.14727564046880001365e-01,
577 -2.18600910700688062874e-01,
578 -1.760002817699722747043e+00,
579 -4.38980891453536115952e-01,
580 -3.84388555942723509071e+00,
581 9.1098879344275101051e-01,
583 var tanh = []float64{
584 9.9990531206936338549262119e-01,
585 9.9999962057085294197613294e-01,
586 -2.7001505097318677233756845e-01,
587 -9.9991110943061718603541401e-01,
588 9.9999999146798465745022007e-01,
589 9.9427249436125236705001048e-01,
590 9.9994257600983138572705076e-01,
591 9.9149409509772875982054701e-01,
592 9.4936501296239685514466577e-01,
593 -9.9999994291374030946055701e-01,
595 var trunc = []float64{
596 4.0000000000000000e+00,
597 7.0000000000000000e+00,
598 -0.0000000000000000e+00,
599 -5.0000000000000000e+00,
600 9.0000000000000000e+00,
601 2.0000000000000000e+00,
602 5.0000000000000000e+00,
603 2.0000000000000000e+00,
604 1.0000000000000000e+00,
605 -8.0000000000000000e+00,
607 var y0 = []float64{
608 -3.053399153780788357534855e-01,
609 1.7437227649515231515503649e-01,
610 -8.6221781263678836910392572e-01,
611 -3.100664880987498407872839e-01,
612 1.422200649300982280645377e-01,
613 4.000004067997901144239363e-01,
614 -3.3340749753099352392332536e-01,
615 4.5399790746668954555205502e-01,
616 4.8290004112497761007536522e-01,
617 2.7036697826604756229601611e-01,
619 var y1 = []float64{
620 0.15494213737457922210218611,
621 -0.2165955142081145245075746,
622 -2.4644949631241895201032829,
623 0.1442740489541836405154505,
624 0.2215379960518984777080163,
625 0.3038800915160754150565448,
626 0.0691107642452362383808547,
627 0.2380116417809914424860165,
628 -0.20849492979459761009678934,
629 0.0242503179793232308250804,
631 var y2 = []float64{
632 0.3675780219390303613394936,
633 -0.23034826393250119879267257,
634 -16.939677983817727205631397,
635 0.367653980523052152867791,
636 -0.0962401471767804440353136,
637 -0.1923169356184851105200523,
638 0.35984072054267882391843766,
639 -0.2794987252299739821654982,
640 -0.7113490692587462579757954,
641 -0.2647831587821263302087457,
643 var yM3 = []float64{
644 -0.14035984421094849100895341,
645 -0.097535139617792072703973,
646 242.25775994555580176377379,
647 -0.1492267014802818619511046,
648 0.26148702629155918694500469,
649 0.56675383593895176530394248,
650 -0.206150264009006981070575,
651 0.64784284687568332737963658,
652 1.3503631555901938037008443,
653 0.1461869756579956803341844,
656 // arguments and expected results for special cases
657 var vfacosSC = []float64{
658 -Pi,
661 NaN(),
663 var acosSC = []float64{
664 NaN(),
666 NaN(),
667 NaN(),
670 var vfacoshSC = []float64{
671 Inf(-1),
672 0.5,
674 Inf(1),
675 NaN(),
677 var acoshSC = []float64{
678 NaN(),
679 NaN(),
681 Inf(1),
682 NaN(),
685 var vfasinSC = []float64{
686 -Pi,
687 Copysign(0, -1),
690 NaN(),
692 var asinSC = []float64{
693 NaN(),
694 Copysign(0, -1),
696 NaN(),
697 NaN(),
700 var vfasinhSC = []float64{
701 Inf(-1),
702 Copysign(0, -1),
704 Inf(1),
705 NaN(),
707 var asinhSC = []float64{
708 Inf(-1),
709 Copysign(0, -1),
711 Inf(1),
712 NaN(),
715 var vfatanSC = []float64{
716 Inf(-1),
717 Copysign(0, -1),
719 Inf(1),
720 NaN(),
722 var atanSC = []float64{
723 -Pi / 2,
724 Copysign(0, -1),
726 Pi / 2,
727 NaN(),
730 var vfatanhSC = []float64{
731 Inf(-1),
732 -Pi,
734 Copysign(0, -1),
738 Inf(1),
739 NaN(),
741 var atanhSC = []float64{
742 NaN(),
743 NaN(),
744 Inf(-1),
745 Copysign(0, -1),
747 Inf(1),
748 NaN(),
749 NaN(),
750 NaN(),
752 var vfatan2SC = [][2]float64{
753 {Inf(-1), Inf(-1)},
754 {Inf(-1), -Pi},
755 {Inf(-1), 0},
756 {Inf(-1), +Pi},
757 {Inf(-1), Inf(1)},
758 {Inf(-1), NaN()},
759 {-Pi, Inf(-1)},
760 {-Pi, 0},
761 {-Pi, Inf(1)},
762 {-Pi, NaN()},
763 {Copysign(0, -1), Inf(-1)},
764 {Copysign(0, -1), -Pi},
765 {Copysign(0, -1), Copysign(0, -1)},
766 {Copysign(0, -1), 0},
767 {Copysign(0, -1), +Pi},
768 {Copysign(0, -1), Inf(1)},
769 {Copysign(0, -1), NaN()},
770 {0, Inf(-1)},
771 {0, -Pi},
772 {0, Copysign(0, -1)},
773 {0, 0},
774 {0, +Pi},
775 {0, Inf(1)},
776 {0, NaN()},
777 {+Pi, Inf(-1)},
778 {+Pi, 0},
779 {+Pi, Inf(1)},
780 {+Pi, NaN()},
781 {Inf(1), Inf(-1)},
782 {Inf(1), -Pi},
783 {Inf(1), 0},
784 {Inf(1), +Pi},
785 {Inf(1), Inf(1)},
786 {Inf(1), NaN()},
787 {NaN(), NaN()},
789 var atan2SC = []float64{
790 -3 * Pi / 4, // atan2(-Inf, -Inf)
791 -Pi / 2, // atan2(-Inf, -Pi)
792 -Pi / 2, // atan2(-Inf, +0)
793 -Pi / 2, // atan2(-Inf, +Pi)
794 -Pi / 4, // atan2(-Inf, +Inf)
795 NaN(), // atan2(-Inf, NaN)
796 -Pi, // atan2(-Pi, -Inf)
797 -Pi / 2, // atan2(-Pi, +0)
798 Copysign(0, -1), // atan2(-Pi, Inf)
799 NaN(), // atan2(-Pi, NaN)
800 -Pi, // atan2(-0, -Inf)
801 -Pi, // atan2(-0, -Pi)
802 -Pi, // atan2(-0, -0)
803 Copysign(0, -1), // atan2(-0, +0)
804 Copysign(0, -1), // atan2(-0, +Pi)
805 Copysign(0, -1), // atan2(-0, +Inf)
806 NaN(), // atan2(-0, NaN)
807 Pi, // atan2(+0, -Inf)
808 Pi, // atan2(+0, -Pi)
809 Pi, // atan2(+0, -0)
810 0, // atan2(+0, +0)
811 0, // atan2(+0, +Pi)
812 0, // atan2(+0, +Inf)
813 NaN(), // atan2(+0, NaN)
814 Pi, // atan2(+Pi, -Inf)
815 Pi / 2, // atan2(+Pi, +0)
816 0, // atan2(+Pi, +Inf)
817 NaN(), // atan2(+Pi, NaN)
818 3 * Pi / 4, // atan2(+Inf, -Inf)
819 Pi / 2, // atan2(+Inf, -Pi)
820 Pi / 2, // atan2(+Inf, +0)
821 Pi / 2, // atan2(+Inf, +Pi)
822 Pi / 4, // atan2(+Inf, +Inf)
823 NaN(), // atan2(+Inf, NaN)
824 NaN(), // atan2(NaN, NaN)
827 var vfcbrtSC = []float64{
828 Inf(-1),
829 Copysign(0, -1),
831 Inf(1),
832 NaN(),
834 var cbrtSC = []float64{
835 Inf(-1),
836 Copysign(0, -1),
838 Inf(1),
839 NaN(),
842 var vfceilSC = []float64{
843 Inf(-1),
844 Copysign(0, -1),
846 Inf(1),
847 NaN(),
849 var ceilSC = []float64{
850 Inf(-1),
851 Copysign(0, -1),
853 Inf(1),
854 NaN(),
857 var vfcopysignSC = []float64{
858 Inf(-1),
859 Inf(1),
860 NaN(),
862 var copysignSC = []float64{
863 Inf(-1),
864 Inf(-1),
865 NaN(),
868 var vfcosSC = []float64{
869 Inf(-1),
870 Inf(1),
871 NaN(),
873 var cosSC = []float64{
874 NaN(),
875 NaN(),
876 NaN(),
879 var vfcoshSC = []float64{
880 Inf(-1),
881 Copysign(0, -1),
883 Inf(1),
884 NaN(),
886 var coshSC = []float64{
887 Inf(1),
890 Inf(1),
891 NaN(),
894 var vferfSC = []float64{
895 Inf(-1),
896 Copysign(0, -1),
898 Inf(1),
899 NaN(),
901 var erfSC = []float64{
903 Copysign(0, -1),
906 NaN(),
909 var vferfcSC = []float64{
910 Inf(-1),
911 Inf(1),
912 NaN(),
914 var erfcSC = []float64{
917 NaN(),
920 var vfexpSC = []float64{
921 Inf(-1),
922 -2000,
923 2000,
924 Inf(1),
925 NaN(),
927 var expSC = []float64{
930 Inf(1),
931 Inf(1),
932 NaN(),
935 var vfexpm1SC = []float64{
936 Inf(-1),
937 Copysign(0, -1),
939 Inf(1),
940 NaN(),
942 var expm1SC = []float64{
944 Copysign(0, -1),
946 Inf(1),
947 NaN(),
950 var vffabsSC = []float64{
951 Inf(-1),
952 Copysign(0, -1),
954 Inf(1),
955 NaN(),
957 var fabsSC = []float64{
958 Inf(1),
961 Inf(1),
962 NaN(),
965 var vffdimSC = [][2]float64{
966 {Inf(-1), Inf(-1)},
967 {Inf(-1), Inf(1)},
968 {Inf(-1), NaN()},
969 {Copysign(0, -1), Copysign(0, -1)},
970 {Copysign(0, -1), 0},
971 {0, Copysign(0, -1)},
972 {0, 0},
973 {Inf(1), Inf(-1)},
974 {Inf(1), Inf(1)},
975 {Inf(1), NaN()},
976 {NaN(), Inf(-1)},
977 {NaN(), Copysign(0, -1)},
978 {NaN(), 0},
979 {NaN(), Inf(1)},
980 {NaN(), NaN()},
982 var fdimSC = []float64{
983 NaN(),
985 NaN(),
990 Inf(1),
991 NaN(),
992 NaN(),
993 NaN(),
994 NaN(),
995 NaN(),
996 NaN(),
997 NaN(),
999 var fmaxSC = []float64{
1000 Inf(-1),
1001 Inf(1),
1002 NaN(),
1003 Copysign(0, -1),
1007 Inf(1),
1008 Inf(1),
1009 Inf(1),
1010 NaN(),
1011 NaN(),
1012 NaN(),
1013 Inf(1),
1014 NaN(),
1016 var fminSC = []float64{
1017 Inf(-1),
1018 Inf(-1),
1019 Inf(-1),
1020 Copysign(0, -1),
1021 Copysign(0, -1),
1022 Copysign(0, -1),
1024 Inf(-1),
1025 Inf(1),
1026 NaN(),
1027 Inf(-1),
1028 NaN(),
1029 NaN(),
1030 NaN(),
1031 NaN(),
1034 var vffmodSC = [][2]float64{
1035 {Inf(-1), Inf(-1)},
1036 {Inf(-1), -Pi},
1037 {Inf(-1), 0},
1038 {Inf(-1), Pi},
1039 {Inf(-1), Inf(1)},
1040 {Inf(-1), NaN()},
1041 {-Pi, Inf(-1)},
1042 {-Pi, 0},
1043 {-Pi, Inf(1)},
1044 {-Pi, NaN()},
1045 {Copysign(0, -1), Inf(-1)},
1046 {Copysign(0, -1), 0},
1047 {Copysign(0, -1), Inf(1)},
1048 {Copysign(0, -1), NaN()},
1049 {0, Inf(-1)},
1050 {0, 0},
1051 {0, Inf(1)},
1052 {0, NaN()},
1053 {Pi, Inf(-1)},
1054 {Pi, 0},
1055 {Pi, Inf(1)},
1056 {Pi, NaN()},
1057 {Inf(1), Inf(-1)},
1058 {Inf(1), -Pi},
1059 {Inf(1), 0},
1060 {Inf(1), Pi},
1061 {Inf(1), Inf(1)},
1062 {Inf(1), NaN()},
1063 {NaN(), Inf(-1)},
1064 {NaN(), -Pi},
1065 {NaN(), 0},
1066 {NaN(), Pi},
1067 {NaN(), Inf(1)},
1068 {NaN(), NaN()},
1070 var fmodSC = []float64{
1071 NaN(), // fmod(-Inf, -Inf)
1072 NaN(), // fmod(-Inf, -Pi)
1073 NaN(), // fmod(-Inf, 0)
1074 NaN(), // fmod(-Inf, Pi)
1075 NaN(), // fmod(-Inf, +Inf)
1076 NaN(), // fmod(-Inf, NaN)
1077 -Pi, // fmod(-Pi, -Inf)
1078 NaN(), // fmod(-Pi, 0)
1079 -Pi, // fmod(-Pi, +Inf)
1080 NaN(), // fmod(-Pi, NaN)
1081 Copysign(0, -1), // fmod(-0, -Inf)
1082 NaN(), // fmod(-0, 0)
1083 Copysign(0, -1), // fmod(-0, Inf)
1084 NaN(), // fmod(-0, NaN)
1085 0, // fmod(0, -Inf)
1086 NaN(), // fmod(0, 0)
1087 0, // fmod(0, +Inf)
1088 NaN(), // fmod(0, NaN)
1089 Pi, // fmod(Pi, -Inf)
1090 NaN(), // fmod(Pi, 0)
1091 Pi, // fmod(Pi, +Inf)
1092 NaN(), // fmod(Pi, NaN)
1093 NaN(), // fmod(+Inf, -Inf)
1094 NaN(), // fmod(+Inf, -Pi)
1095 NaN(), // fmod(+Inf, 0)
1096 NaN(), // fmod(+Inf, Pi)
1097 NaN(), // fmod(+Inf, +Inf)
1098 NaN(), // fmod(+Inf, NaN)
1099 NaN(), // fmod(NaN, -Inf)
1100 NaN(), // fmod(NaN, -Pi)
1101 NaN(), // fmod(NaN, 0)
1102 NaN(), // fmod(NaN, Pi)
1103 NaN(), // fmod(NaN, +Inf)
1104 NaN(), // fmod(NaN, NaN)
1107 var vffrexpSC = []float64{
1108 Inf(-1),
1109 Copysign(0, -1),
1111 Inf(1),
1112 NaN(),
1114 var frexpSC = []fi{
1115 {Inf(-1), 0},
1116 {Copysign(0, -1), 0},
1117 {0, 0},
1118 {Inf(1), 0},
1119 {NaN(), 0},
1122 var vfgammaSC = []float64{
1123 Inf(-1),
1125 Copysign(0, -1),
1127 Inf(1),
1128 NaN(),
1130 var gammaSC = []float64{
1131 Inf(-1),
1132 Inf(1),
1133 Inf(1),
1134 Inf(1),
1135 Inf(1),
1136 NaN(),
1139 var vfhypotSC = [][2]float64{
1140 {Inf(-1), Inf(-1)},
1141 {Inf(-1), 0},
1142 {Inf(-1), Inf(1)},
1143 {Inf(-1), NaN()},
1144 {Copysign(0, -1), Copysign(0, -1)},
1145 {Copysign(0, -1), 0},
1146 {0, Copysign(0, -1)},
1147 {0, 0}, // +0, +0
1148 {0, Inf(-1)},
1149 {0, Inf(1)},
1150 {0, NaN()},
1151 {Inf(1), Inf(-1)},
1152 {Inf(1), 0},
1153 {Inf(1), Inf(1)},
1154 {Inf(1), NaN()},
1155 {NaN(), Inf(-1)},
1156 {NaN(), 0},
1157 {NaN(), Inf(1)},
1158 {NaN(), NaN()},
1160 var hypotSC = []float64{
1161 Inf(1),
1162 Inf(1),
1163 Inf(1),
1164 Inf(1),
1169 Inf(1),
1170 Inf(1),
1171 NaN(),
1172 Inf(1),
1173 Inf(1),
1174 Inf(1),
1175 Inf(1),
1176 Inf(1),
1177 NaN(),
1178 Inf(1),
1179 NaN(),
1182 var vfilogbSC = []float64{
1183 Inf(-1),
1185 Inf(1),
1186 NaN(),
1188 var ilogbSC = []int{
1189 MaxInt32,
1190 MinInt32,
1191 MaxInt32,
1192 MaxInt32,
1195 var vfj0SC = []float64{
1196 Inf(-1),
1198 Inf(1),
1199 NaN(),
1201 var j0SC = []float64{
1205 NaN(),
1207 var j1SC = []float64{
1211 NaN(),
1213 var j2SC = []float64{
1217 NaN(),
1219 var jM3SC = []float64{
1223 NaN(),
1226 var vfldexpSC = []fi{
1227 {0, 0},
1228 {0, -1075},
1229 {0, 1024},
1230 {Copysign(0, -1), 0},
1231 {Copysign(0, -1), -1075},
1232 {Copysign(0, -1), 1024},
1233 {Inf(1), 0},
1234 {Inf(1), -1024},
1235 {Inf(-1), 0},
1236 {Inf(-1), -1024},
1237 {NaN(), -1024},
1239 var ldexpSC = []float64{
1243 Copysign(0, -1),
1244 Copysign(0, -1),
1245 Copysign(0, -1),
1246 Inf(1),
1247 Inf(1),
1248 Inf(-1),
1249 Inf(-1),
1250 NaN(),
1253 var vflgammaSC = []float64{
1254 Inf(-1),
1259 Inf(1),
1260 NaN(),
1262 var lgammaSC = []fi{
1263 {Inf(-1), 1},
1264 {Inf(1), 1},
1265 {Inf(1), 1},
1266 {0, 1},
1267 {0, 1},
1268 {Inf(1), 1},
1269 {NaN(), 1},
1272 var vflogSC = []float64{
1273 Inf(-1),
1274 -Pi,
1275 Copysign(0, -1),
1278 Inf(1),
1279 NaN(),
1281 var logSC = []float64{
1282 NaN(),
1283 NaN(),
1284 Inf(-1),
1285 Inf(-1),
1287 Inf(1),
1288 NaN(),
1291 var vflogbSC = []float64{
1292 Inf(-1),
1294 Inf(1),
1295 NaN(),
1297 var logbSC = []float64{
1298 Inf(1),
1299 Inf(-1),
1300 Inf(1),
1301 NaN(),
1304 var vflog1pSC = []float64{
1305 Inf(-1),
1306 -Pi,
1308 Copysign(0, -1),
1310 Inf(1),
1311 NaN(),
1313 var log1pSC = []float64{
1314 NaN(),
1315 NaN(),
1316 Inf(-1),
1317 Copysign(0, -1),
1319 Inf(1),
1320 NaN(),
1323 var vfmodfSC = []float64{
1324 Inf(-1),
1325 Inf(1),
1326 NaN(),
1328 var modfSC = [][2]float64{
1329 {Inf(-1), NaN()}, // [2]float64{Copysign(0, -1), Inf(-1)},
1330 {Inf(1), NaN()}, // [2]float64{0, Inf(1)},
1331 {NaN(), NaN()},
1334 var vfnextafterSC = [][2]float64{
1335 {0, 0},
1336 {0, Copysign(0, -1)},
1337 {0, -1},
1338 {0, NaN()},
1339 {Copysign(0, -1), 1},
1340 {Copysign(0, -1), 0},
1341 {Copysign(0, -1), Copysign(0, -1)},
1342 {Copysign(0, -1), -1},
1343 {NaN(), 0},
1344 {NaN(), NaN()},
1346 var nextafterSC = []float64{
1349 -4.9406564584124654418e-324, // Float64frombits(0x8000000000000001)
1350 NaN(),
1351 4.9406564584124654418e-324, // Float64frombits(0x0000000000000001)
1352 Copysign(0, -1),
1353 Copysign(0, -1),
1354 -4.9406564584124654418e-324, // Float64frombits(0x8000000000000001)
1355 NaN(),
1356 NaN(),
1359 var vfpowSC = [][2]float64{
1360 {Inf(-1), -Pi},
1361 {Inf(-1), -3},
1362 {Inf(-1), Copysign(0, -1)},
1363 {Inf(-1), 0},
1364 {Inf(-1), 1},
1365 {Inf(-1), 3},
1366 {Inf(-1), Pi},
1367 {Inf(-1), NaN()},
1369 {-Pi, Inf(-1)},
1370 {-Pi, -Pi},
1371 {-Pi, Copysign(0, -1)},
1372 {-Pi, 0},
1373 {-Pi, 1},
1374 {-Pi, Pi},
1375 {-Pi, Inf(1)},
1376 {-Pi, NaN()},
1378 {-1, Inf(-1)},
1379 {-1, Inf(1)},
1380 {-1, NaN()},
1381 {-1 / 2, Inf(-1)},
1382 {-1 / 2, Inf(1)},
1383 {Copysign(0, -1), Inf(-1)},
1384 {Copysign(0, -1), -Pi},
1385 {Copysign(0, -1), -3},
1386 {Copysign(0, -1), 3},
1387 {Copysign(0, -1), Pi},
1388 {Copysign(0, -1), Inf(1)},
1390 {0, Inf(-1)},
1391 {0, -Pi},
1392 {0, -3},
1393 {0, Copysign(0, -1)},
1394 {0, 0},
1395 {0, 3},
1396 {0, Pi},
1397 {0, Inf(1)},
1398 {0, NaN()},
1400 {1 / 2, Inf(-1)},
1401 {1 / 2, Inf(1)},
1402 {1, Inf(-1)},
1403 {1, Inf(1)},
1404 {1, NaN()},
1406 {Pi, Inf(-1)},
1407 {Pi, Copysign(0, -1)},
1408 {Pi, 0},
1409 {Pi, 1},
1410 {Pi, Inf(1)},
1411 {Pi, NaN()},
1412 {Inf(1), -Pi},
1413 {Inf(1), Copysign(0, -1)},
1414 {Inf(1), 0},
1415 {Inf(1), 1},
1416 {Inf(1), Pi},
1417 {Inf(1), NaN()},
1418 {NaN(), -Pi},
1419 {NaN(), Copysign(0, -1)},
1420 {NaN(), 0},
1421 {NaN(), 1},
1422 {NaN(), Pi},
1423 {NaN(), NaN()},
1425 var powSC = []float64{
1426 0, // pow(-Inf, -Pi)
1427 Copysign(0, -1), // pow(-Inf, -3)
1428 1, // pow(-Inf, -0)
1429 1, // pow(-Inf, +0)
1430 Inf(-1), // pow(-Inf, 1)
1431 Inf(-1), // pow(-Inf, 3)
1432 Inf(1), // pow(-Inf, Pi)
1433 NaN(), // pow(-Inf, NaN)
1434 0, // pow(-Pi, -Inf)
1435 NaN(), // pow(-Pi, -Pi)
1436 1, // pow(-Pi, -0)
1437 1, // pow(-Pi, +0)
1438 -Pi, // pow(-Pi, 1)
1439 NaN(), // pow(-Pi, Pi)
1440 Inf(1), // pow(-Pi, +Inf)
1441 NaN(), // pow(-Pi, NaN)
1442 1, // pow(-1, -Inf) IEEE 754-2008
1443 1, // pow(-1, +Inf) IEEE 754-2008
1444 NaN(), // pow(-1, NaN)
1445 Inf(1), // pow(-1/2, -Inf)
1446 0, // pow(-1/2, +Inf)
1447 Inf(1), // pow(-0, -Inf)
1448 Inf(1), // pow(-0, -Pi)
1449 Inf(-1), // pow(-0, -3) IEEE 754-2008
1450 Copysign(0, -1), // pow(-0, 3) IEEE 754-2008
1451 0, // pow(-0, +Pi)
1452 0, // pow(-0, +Inf)
1453 Inf(1), // pow(+0, -Inf)
1454 Inf(1), // pow(+0, -Pi)
1455 Inf(1), // pow(+0, -3)
1456 1, // pow(+0, -0)
1457 1, // pow(+0, +0)
1458 0, // pow(+0, 3)
1459 0, // pow(+0, +Pi)
1460 0, // pow(+0, +Inf)
1461 NaN(), // pow(+0, NaN)
1462 Inf(1), // pow(1/2, -Inf)
1463 0, // pow(1/2, +Inf)
1464 1, // pow(1, -Inf) IEEE 754-2008
1465 1, // pow(1, +Inf) IEEE 754-2008
1466 1, // pow(1, NaN) IEEE 754-2008
1467 0, // pow(+Pi, -Inf)
1468 1, // pow(+Pi, -0)
1469 1, // pow(+Pi, +0)
1470 Pi, // pow(+Pi, 1)
1471 Inf(1), // pow(+Pi, +Inf)
1472 NaN(), // pow(+Pi, NaN)
1473 0, // pow(+Inf, -Pi)
1474 1, // pow(+Inf, -0)
1475 1, // pow(+Inf, +0)
1476 Inf(1), // pow(+Inf, 1)
1477 Inf(1), // pow(+Inf, Pi)
1478 NaN(), // pow(+Inf, NaN)
1479 NaN(), // pow(NaN, -Pi)
1480 1, // pow(NaN, -0)
1481 1, // pow(NaN, +0)
1482 NaN(), // pow(NaN, 1)
1483 NaN(), // pow(NaN, +Pi)
1484 NaN(), // pow(NaN, NaN)
1487 var vfpow10SC = []int{
1488 MinInt32,
1489 MaxInt32,
1490 -325,
1491 309,
1494 var pow10SC = []float64{
1495 0, // pow10(MinInt32)
1496 Inf(1), // pow10(MaxInt32)
1497 0, // pow10(-325)
1498 Inf(1), // pow10(309)
1501 var vfsignbitSC = []float64{
1502 Inf(-1),
1503 Copysign(0, -1),
1505 Inf(1),
1506 NaN(),
1508 var signbitSC = []bool{
1509 true,
1510 true,
1511 false,
1512 false,
1513 false,
1516 var vfsinSC = []float64{
1517 Inf(-1),
1518 Copysign(0, -1),
1520 Inf(1),
1521 NaN(),
1523 var sinSC = []float64{
1524 NaN(),
1525 Copysign(0, -1),
1527 NaN(),
1528 NaN(),
1531 var vfsinhSC = []float64{
1532 Inf(-1),
1533 Copysign(0, -1),
1535 Inf(1),
1536 NaN(),
1538 var sinhSC = []float64{
1539 Inf(-1),
1540 Copysign(0, -1),
1542 Inf(1),
1543 NaN(),
1546 var vfsqrtSC = []float64{
1547 Inf(-1),
1548 -Pi,
1549 Copysign(0, -1),
1551 Inf(1),
1552 NaN(),
1554 var sqrtSC = []float64{
1555 NaN(),
1556 NaN(),
1557 Copysign(0, -1),
1559 Inf(1),
1560 NaN(),
1563 var vftanhSC = []float64{
1564 Inf(-1),
1565 Copysign(0, -1),
1567 Inf(1),
1568 NaN(),
1570 var tanhSC = []float64{
1572 Copysign(0, -1),
1575 NaN(),
1578 var vfy0SC = []float64{
1579 Inf(-1),
1581 Inf(1),
1582 NaN(),
1584 var y0SC = []float64{
1585 NaN(),
1586 Inf(-1),
1588 NaN(),
1590 var y1SC = []float64{
1591 NaN(),
1592 Inf(-1),
1594 NaN(),
1596 var y2SC = []float64{
1597 NaN(),
1598 Inf(-1),
1600 NaN(),
1602 var yM3SC = []float64{
1603 NaN(),
1604 Inf(1),
1606 NaN(),
1609 // arguments and expected results for boundary cases
1610 const (
1611 SmallestNormalFloat64 = 2.2250738585072014e-308 // 2**-1022
1612 LargestSubnormalFloat64 = SmallestNormalFloat64 - SmallestNonzeroFloat64
1615 var vffrexpBC = []float64{
1616 SmallestNormalFloat64,
1617 LargestSubnormalFloat64,
1618 SmallestNonzeroFloat64,
1619 MaxFloat64,
1620 -SmallestNormalFloat64,
1621 -LargestSubnormalFloat64,
1622 -SmallestNonzeroFloat64,
1623 -MaxFloat64,
1625 var frexpBC = []fi{
1626 {0.5, -1021},
1627 {0.99999999999999978, -1022},
1628 {0.5, -1073},
1629 {0.99999999999999989, 1024},
1630 {-0.5, -1021},
1631 {-0.99999999999999978, -1022},
1632 {-0.5, -1073},
1633 {-0.99999999999999989, 1024},
1636 var vfldexpBC = []fi{
1637 {SmallestNormalFloat64, -52},
1638 {LargestSubnormalFloat64, -51},
1639 {SmallestNonzeroFloat64, 1074},
1640 {MaxFloat64, -(1023 + 1074)},
1641 {1, -1075},
1642 {-1, -1075},
1643 {1, 1024},
1644 {-1, 1024},
1646 var ldexpBC = []float64{
1647 SmallestNonzeroFloat64,
1648 1e-323, // 2**-1073
1650 1e-323, // 2**-1073
1652 Copysign(0, -1),
1653 Inf(1),
1654 Inf(-1),
1657 var logbBC = []float64{
1658 -1022,
1659 -1023,
1660 -1074,
1661 1023,
1662 -1022,
1663 -1023,
1664 -1074,
1665 1023,
1668 func tolerance(a, b, e float64) bool {
1669 d := a - b
1670 if d < 0 {
1671 d = -d
1674 if a != 0 {
1675 e = e * a
1676 if e < 0 {
1677 e = -e
1680 return d < e
1682 func kindaclose(a, b float64) bool { return tolerance(a, b, 1e-8) }
1683 func close(a, b float64) bool { return tolerance(a, b, 1e-14) }
1684 func veryclose(a, b float64) bool { return tolerance(a, b, 4e-16) }
1685 func soclose(a, b, e float64) bool { return tolerance(a, b, e) }
1686 func alike(a, b float64) bool {
1687 switch {
1688 case IsNaN(a) && IsNaN(b):
1689 return true
1690 case a == b:
1691 return Signbit(a) == Signbit(b)
1693 return false
1696 func TestAcos(t *testing.T) {
1697 for i := 0; i < len(vf); i++ {
1698 a := vf[i] / 10
1699 if f := Acos(a); !close(acos[i], f) {
1700 t.Errorf("Acos(%g) = %g, want %g", a, f, acos[i])
1703 for i := 0; i < len(vfacosSC); i++ {
1704 if f := Acos(vfacosSC[i]); !alike(acosSC[i], f) {
1705 t.Errorf("Acos(%g) = %g, want %g", vfacosSC[i], f, acosSC[i])
1710 func TestAcosh(t *testing.T) {
1711 for i := 0; i < len(vf); i++ {
1712 a := 1 + Abs(vf[i])
1713 if f := Acosh(a); !veryclose(acosh[i], f) {
1714 t.Errorf("Acosh(%g) = %g, want %g", a, f, acosh[i])
1717 for i := 0; i < len(vfacoshSC); i++ {
1718 if f := Acosh(vfacoshSC[i]); !alike(acoshSC[i], f) {
1719 t.Errorf("Acosh(%g) = %g, want %g", vfacoshSC[i], f, acoshSC[i])
1724 func TestAsin(t *testing.T) {
1725 for i := 0; i < len(vf); i++ {
1726 a := vf[i] / 10
1727 if f := Asin(a); !veryclose(asin[i], f) {
1728 t.Errorf("Asin(%g) = %g, want %g", a, f, asin[i])
1731 for i := 0; i < len(vfasinSC); i++ {
1732 if f := Asin(vfasinSC[i]); !alike(asinSC[i], f) {
1733 t.Errorf("Asin(%g) = %g, want %g", vfasinSC[i], f, asinSC[i])
1738 func TestAsinh(t *testing.T) {
1739 for i := 0; i < len(vf); i++ {
1740 if f := Asinh(vf[i]); !veryclose(asinh[i], f) {
1741 t.Errorf("Asinh(%g) = %g, want %g", vf[i], f, asinh[i])
1744 for i := 0; i < len(vfasinhSC); i++ {
1745 if f := Asinh(vfasinhSC[i]); !alike(asinhSC[i], f) {
1746 t.Errorf("Asinh(%g) = %g, want %g", vfasinhSC[i], f, asinhSC[i])
1751 func TestAtan(t *testing.T) {
1752 for i := 0; i < len(vf); i++ {
1753 if f := Atan(vf[i]); !veryclose(atan[i], f) {
1754 t.Errorf("Atan(%g) = %g, want %g", vf[i], f, atan[i])
1757 for i := 0; i < len(vfatanSC); i++ {
1758 if f := Atan(vfatanSC[i]); !alike(atanSC[i], f) {
1759 t.Errorf("Atan(%g) = %g, want %g", vfatanSC[i], f, atanSC[i])
1764 func TestAtanh(t *testing.T) {
1765 for i := 0; i < len(vf); i++ {
1766 a := vf[i] / 10
1767 if f := Atanh(a); !veryclose(atanh[i], f) {
1768 t.Errorf("Atanh(%g) = %g, want %g", a, f, atanh[i])
1771 for i := 0; i < len(vfatanhSC); i++ {
1772 if f := Atanh(vfatanhSC[i]); !alike(atanhSC[i], f) {
1773 t.Errorf("Atanh(%g) = %g, want %g", vfatanhSC[i], f, atanhSC[i])
1778 func TestAtan2(t *testing.T) {
1779 for i := 0; i < len(vf); i++ {
1780 if f := Atan2(10, vf[i]); !veryclose(atan2[i], f) {
1781 t.Errorf("Atan2(10, %g) = %g, want %g", vf[i], f, atan2[i])
1784 for i := 0; i < len(vfatan2SC); i++ {
1785 if f := Atan2(vfatan2SC[i][0], vfatan2SC[i][1]); !alike(atan2SC[i], f) {
1786 t.Errorf("Atan2(%g, %g) = %g, want %g", vfatan2SC[i][0], vfatan2SC[i][1], f, atan2SC[i])
1791 func TestCbrt(t *testing.T) {
1792 for i := 0; i < len(vf); i++ {
1793 if f := Cbrt(vf[i]); !veryclose(cbrt[i], f) {
1794 t.Errorf("Cbrt(%g) = %g, want %g", vf[i], f, cbrt[i])
1797 for i := 0; i < len(vfcbrtSC); i++ {
1798 if f := Cbrt(vfcbrtSC[i]); !alike(cbrtSC[i], f) {
1799 t.Errorf("Cbrt(%g) = %g, want %g", vfcbrtSC[i], f, cbrtSC[i])
1804 func TestCeil(t *testing.T) {
1805 for i := 0; i < len(vf); i++ {
1806 if f := Ceil(vf[i]); ceil[i] != f {
1807 t.Errorf("Ceil(%g) = %g, want %g", vf[i], f, ceil[i])
1810 for i := 0; i < len(vfceilSC); i++ {
1811 if f := Ceil(vfceilSC[i]); !alike(ceilSC[i], f) {
1812 t.Errorf("Ceil(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
1817 func TestCopysign(t *testing.T) {
1818 for i := 0; i < len(vf); i++ {
1819 if f := Copysign(vf[i], -1); copysign[i] != f {
1820 t.Errorf("Copysign(%g, -1) = %g, want %g", vf[i], f, copysign[i])
1823 for i := 0; i < len(vf); i++ {
1824 if f := Copysign(vf[i], 1); -copysign[i] != f {
1825 t.Errorf("Copysign(%g, 1) = %g, want %g", vf[i], f, -copysign[i])
1828 for i := 0; i < len(vfcopysignSC); i++ {
1829 if f := Copysign(vfcopysignSC[i], -1); !alike(copysignSC[i], f) {
1830 t.Errorf("Copysign(%g, -1) = %g, want %g", vfcopysignSC[i], f, copysignSC[i])
1835 func TestCos(t *testing.T) {
1836 for i := 0; i < len(vf); i++ {
1837 if f := Cos(vf[i]); !veryclose(cos[i], f) {
1838 t.Errorf("Cos(%g) = %g, want %g", vf[i], f, cos[i])
1841 for i := 0; i < len(vfcosSC); i++ {
1842 if f := Cos(vfcosSC[i]); !alike(cosSC[i], f) {
1843 t.Errorf("Cos(%g) = %g, want %g", vfcosSC[i], f, cosSC[i])
1848 func TestCosh(t *testing.T) {
1849 for i := 0; i < len(vf); i++ {
1850 if f := Cosh(vf[i]); !close(cosh[i], f) {
1851 t.Errorf("Cosh(%g) = %g, want %g", vf[i], f, cosh[i])
1854 for i := 0; i < len(vfcoshSC); i++ {
1855 if f := Cosh(vfcoshSC[i]); !alike(coshSC[i], f) {
1856 t.Errorf("Cosh(%g) = %g, want %g", vfcoshSC[i], f, coshSC[i])
1861 func TestErf(t *testing.T) {
1862 for i := 0; i < len(vf); i++ {
1863 a := vf[i] / 10
1864 if f := Erf(a); !veryclose(erf[i], f) {
1865 t.Errorf("Erf(%g) = %g, want %g", a, f, erf[i])
1868 for i := 0; i < len(vferfSC); i++ {
1869 if f := Erf(vferfSC[i]); !alike(erfSC[i], f) {
1870 t.Errorf("Erf(%g) = %g, want %g", vferfSC[i], f, erfSC[i])
1875 func TestErfc(t *testing.T) {
1876 for i := 0; i < len(vf); i++ {
1877 a := vf[i] / 10
1878 if f := Erfc(a); !veryclose(erfc[i], f) {
1879 t.Errorf("Erfc(%g) = %g, want %g", a, f, erfc[i])
1882 for i := 0; i < len(vferfcSC); i++ {
1883 if f := Erfc(vferfcSC[i]); !alike(erfcSC[i], f) {
1884 t.Errorf("Erfc(%g) = %g, want %g", vferfcSC[i], f, erfcSC[i])
1889 func TestExp(t *testing.T) {
1890 testExp(t, Exp, "Exp")
1891 testExp(t, ExpGo, "ExpGo")
1894 func testExp(t *testing.T, Exp func(float64) float64, name string) {
1895 for i := 0; i < len(vf); i++ {
1896 if f := Exp(vf[i]); !close(exp[i], f) {
1897 t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp[i])
1900 for i := 0; i < len(vfexpSC); i++ {
1901 if f := Exp(vfexpSC[i]); !alike(expSC[i], f) {
1902 t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
1907 func TestExpm1(t *testing.T) {
1908 for i := 0; i < len(vf); i++ {
1909 a := vf[i] / 100
1910 if f := Expm1(a); !veryclose(expm1[i], f) {
1911 t.Errorf("Expm1(%g) = %g, want %g", a, f, expm1[i])
1914 for i := 0; i < len(vfexpm1SC); i++ {
1915 if f := Expm1(vfexpm1SC[i]); !alike(expm1SC[i], f) {
1916 t.Errorf("Expm1(%g) = %g, want %g", vfexpm1SC[i], f, expm1SC[i])
1921 func TestExp2(t *testing.T) {
1922 testExp2(t, Exp2, "Exp2")
1923 testExp2(t, Exp2Go, "Exp2Go")
1926 func testExp2(t *testing.T, Exp2 func(float64) float64, name string) {
1927 for i := 0; i < len(vf); i++ {
1928 if f := Exp2(vf[i]); !close(exp2[i], f) {
1929 t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp2[i])
1932 for i := 0; i < len(vfexpSC); i++ {
1933 if f := Exp2(vfexpSC[i]); !alike(expSC[i], f) {
1934 t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
1937 for n := -1074; n < 1024; n++ {
1938 f := Exp2(float64(n))
1939 vf := Ldexp(1, n)
1940 if f != vf {
1941 t.Errorf("%s(%d) = %g, want %g", name, n, f, vf)
1946 func TestAbs(t *testing.T) {
1947 for i := 0; i < len(vf); i++ {
1948 if f := Abs(vf[i]); fabs[i] != f {
1949 t.Errorf("Abs(%g) = %g, want %g", vf[i], f, fabs[i])
1952 for i := 0; i < len(vffabsSC); i++ {
1953 if f := Abs(vffabsSC[i]); !alike(fabsSC[i], f) {
1954 t.Errorf("Abs(%g) = %g, want %g", vffabsSC[i], f, fabsSC[i])
1959 func TestDim(t *testing.T) {
1960 for i := 0; i < len(vf); i++ {
1961 if f := Dim(vf[i], 0); fdim[i] != f {
1962 t.Errorf("Dim(%g, %g) = %g, want %g", vf[i], 0.0, f, fdim[i])
1965 for i := 0; i < len(vffdimSC); i++ {
1966 if f := Dim(vffdimSC[i][0], vffdimSC[i][1]); !alike(fdimSC[i], f) {
1967 t.Errorf("Dim(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fdimSC[i])
1972 func TestFloor(t *testing.T) {
1973 for i := 0; i < len(vf); i++ {
1974 if f := Floor(vf[i]); floor[i] != f {
1975 t.Errorf("Floor(%g) = %g, want %g", vf[i], f, floor[i])
1978 for i := 0; i < len(vfceilSC); i++ {
1979 if f := Floor(vfceilSC[i]); !alike(ceilSC[i], f) {
1980 t.Errorf("Floor(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
1985 func TestMax(t *testing.T) {
1986 for i := 0; i < len(vf); i++ {
1987 if f := Max(vf[i], ceil[i]); ceil[i] != f {
1988 t.Errorf("Max(%g, %g) = %g, want %g", vf[i], ceil[i], f, ceil[i])
1991 for i := 0; i < len(vffdimSC); i++ {
1992 if f := Max(vffdimSC[i][0], vffdimSC[i][1]); !alike(fmaxSC[i], f) {
1993 t.Errorf("Max(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fmaxSC[i])
1998 func TestMin(t *testing.T) {
1999 for i := 0; i < len(vf); i++ {
2000 if f := Min(vf[i], floor[i]); floor[i] != f {
2001 t.Errorf("Min(%g, %g) = %g, want %g", vf[i], floor[i], f, floor[i])
2004 for i := 0; i < len(vffdimSC); i++ {
2005 if f := Min(vffdimSC[i][0], vffdimSC[i][1]); !alike(fminSC[i], f) {
2006 t.Errorf("Min(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fminSC[i])
2011 func TestMod(t *testing.T) {
2012 for i := 0; i < len(vf); i++ {
2013 if f := Mod(10, vf[i]); fmod[i] != f {
2014 t.Errorf("Mod(10, %g) = %g, want %g", vf[i], f, fmod[i])
2017 for i := 0; i < len(vffmodSC); i++ {
2018 if f := Mod(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
2019 t.Errorf("Mod(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
2024 func TestFrexp(t *testing.T) {
2025 for i := 0; i < len(vf); i++ {
2026 if f, j := Frexp(vf[i]); !veryclose(frexp[i].f, f) || frexp[i].i != j {
2027 t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vf[i], f, j, frexp[i].f, frexp[i].i)
2030 for i := 0; i < len(vffrexpSC); i++ {
2031 if f, j := Frexp(vffrexpSC[i]); !alike(frexpSC[i].f, f) || frexpSC[i].i != j {
2032 t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpSC[i], f, j, frexpSC[i].f, frexpSC[i].i)
2035 for i := 0; i < len(vffrexpBC); i++ {
2036 if f, j := Frexp(vffrexpBC[i]); !alike(frexpBC[i].f, f) || frexpBC[i].i != j {
2037 t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpBC[i], f, j, frexpBC[i].f, frexpBC[i].i)
2042 func TestGamma(t *testing.T) {
2043 for i := 0; i < len(vf); i++ {
2044 if f := Gamma(vf[i]); !close(gamma[i], f) {
2045 t.Errorf("Gamma(%g) = %g, want %g", vf[i], f, gamma[i])
2048 for i := 0; i < len(vfgammaSC); i++ {
2049 if f := Gamma(vfgammaSC[i]); !alike(gammaSC[i], f) {
2050 t.Errorf("Gamma(%g) = %g, want %g", vfgammaSC[i], f, gammaSC[i])
2055 func TestHypot(t *testing.T) {
2056 for i := 0; i < len(vf); i++ {
2057 a := Abs(1e200 * tanh[i] * Sqrt(2))
2058 if f := Hypot(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
2059 t.Errorf("Hypot(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
2062 for i := 0; i < len(vfhypotSC); i++ {
2063 if f := Hypot(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
2064 t.Errorf("Hypot(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
2069 func TestHypotGo(t *testing.T) {
2070 for i := 0; i < len(vf); i++ {
2071 a := Abs(1e200 * tanh[i] * Sqrt(2))
2072 if f := HypotGo(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
2073 t.Errorf("HypotGo(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
2076 for i := 0; i < len(vfhypotSC); i++ {
2077 if f := HypotGo(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
2078 t.Errorf("HypotGo(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
2083 func TestIlogb(t *testing.T) {
2084 for i := 0; i < len(vf); i++ {
2085 a := frexp[i].i - 1 // adjust because fr in the interval [½, 1)
2086 if e := Ilogb(vf[i]); a != e {
2087 t.Errorf("Ilogb(%g) = %d, want %d", vf[i], e, a)
2090 for i := 0; i < len(vflogbSC); i++ {
2091 if e := Ilogb(vflogbSC[i]); ilogbSC[i] != e {
2092 t.Errorf("Ilogb(%g) = %d, want %d", vflogbSC[i], e, ilogbSC[i])
2095 for i := 0; i < len(vffrexpBC); i++ {
2096 if e := Ilogb(vffrexpBC[i]); int(logbBC[i]) != e {
2097 t.Errorf("Ilogb(%g) = %d, want %d", vffrexpBC[i], e, int(logbBC[i]))
2102 func TestJ0(t *testing.T) {
2103 for i := 0; i < len(vf); i++ {
2104 if f := J0(vf[i]); !soclose(j0[i], f, 4e-14) {
2105 t.Errorf("J0(%g) = %g, want %g", vf[i], f, j0[i])
2108 for i := 0; i < len(vfj0SC); i++ {
2109 if f := J0(vfj0SC[i]); !alike(j0SC[i], f) {
2110 t.Errorf("J0(%g) = %g, want %g", vfj0SC[i], f, j0SC[i])
2115 func TestJ1(t *testing.T) {
2116 for i := 0; i < len(vf); i++ {
2117 if f := J1(vf[i]); !close(j1[i], f) {
2118 t.Errorf("J1(%g) = %g, want %g", vf[i], f, j1[i])
2121 for i := 0; i < len(vfj0SC); i++ {
2122 if f := J1(vfj0SC[i]); !alike(j1SC[i], f) {
2123 t.Errorf("J1(%g) = %g, want %g", vfj0SC[i], f, j1SC[i])
2128 func TestJn(t *testing.T) {
2129 for i := 0; i < len(vf); i++ {
2130 if f := Jn(2, vf[i]); !close(j2[i], f) {
2131 t.Errorf("Jn(2, %g) = %g, want %g", vf[i], f, j2[i])
2133 if f := Jn(-3, vf[i]); !close(jM3[i], f) {
2134 t.Errorf("Jn(-3, %g) = %g, want %g", vf[i], f, jM3[i])
2137 for i := 0; i < len(vfj0SC); i++ {
2138 if f := Jn(2, vfj0SC[i]); !alike(j2SC[i], f) {
2139 t.Errorf("Jn(2, %g) = %g, want %g", vfj0SC[i], f, j2SC[i])
2141 if f := Jn(-3, vfj0SC[i]); !alike(jM3SC[i], f) {
2142 t.Errorf("Jn(-3, %g) = %g, want %g", vfj0SC[i], f, jM3SC[i])
2147 func TestLdexp(t *testing.T) {
2148 for i := 0; i < len(vf); i++ {
2149 if f := Ldexp(frexp[i].f, frexp[i].i); !veryclose(vf[i], f) {
2150 t.Errorf("Ldexp(%g, %d) = %g, want %g", frexp[i].f, frexp[i].i, f, vf[i])
2153 for i := 0; i < len(vffrexpSC); i++ {
2154 if f := Ldexp(frexpSC[i].f, frexpSC[i].i); !alike(vffrexpSC[i], f) {
2155 t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpSC[i].f, frexpSC[i].i, f, vffrexpSC[i])
2158 for i := 0; i < len(vfldexpSC); i++ {
2159 if f := Ldexp(vfldexpSC[i].f, vfldexpSC[i].i); !alike(ldexpSC[i], f) {
2160 t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpSC[i].f, vfldexpSC[i].i, f, ldexpSC[i])
2163 for i := 0; i < len(vffrexpBC); i++ {
2164 if f := Ldexp(frexpBC[i].f, frexpBC[i].i); !alike(vffrexpBC[i], f) {
2165 t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpBC[i].f, frexpBC[i].i, f, vffrexpBC[i])
2168 for i := 0; i < len(vfldexpBC); i++ {
2169 if f := Ldexp(vfldexpBC[i].f, vfldexpBC[i].i); !alike(ldexpBC[i], f) {
2170 t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpBC[i].f, vfldexpBC[i].i, f, ldexpBC[i])
2175 func TestLgamma(t *testing.T) {
2176 for i := 0; i < len(vf); i++ {
2177 if f, s := Lgamma(vf[i]); !close(lgamma[i].f, f) || lgamma[i].i != s {
2178 t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vf[i], f, s, lgamma[i].f, lgamma[i].i)
2181 for i := 0; i < len(vflgammaSC); i++ {
2182 if f, s := Lgamma(vflgammaSC[i]); !alike(lgammaSC[i].f, f) || lgammaSC[i].i != s {
2183 t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vflgammaSC[i], f, s, lgammaSC[i].f, lgammaSC[i].i)
2188 func TestLog(t *testing.T) {
2189 for i := 0; i < len(vf); i++ {
2190 a := Abs(vf[i])
2191 if f := Log(a); log[i] != f {
2192 t.Errorf("Log(%g) = %g, want %g", a, f, log[i])
2195 if f := Log(10); f != Ln10 {
2196 t.Errorf("Log(%g) = %g, want %g", 10.0, f, Ln10)
2198 for i := 0; i < len(vflogSC); i++ {
2199 if f := Log(vflogSC[i]); !alike(logSC[i], f) {
2200 t.Errorf("Log(%g) = %g, want %g", vflogSC[i], f, logSC[i])
2205 func TestLogb(t *testing.T) {
2206 for i := 0; i < len(vf); i++ {
2207 if f := Logb(vf[i]); logb[i] != f {
2208 t.Errorf("Logb(%g) = %g, want %g", vf[i], f, logb[i])
2211 for i := 0; i < len(vflogbSC); i++ {
2212 if f := Logb(vflogbSC[i]); !alike(logbSC[i], f) {
2213 t.Errorf("Logb(%g) = %g, want %g", vflogbSC[i], f, logbSC[i])
2216 for i := 0; i < len(vffrexpBC); i++ {
2217 if f := Logb(vffrexpBC[i]); !alike(logbBC[i], f) {
2218 t.Errorf("Logb(%g) = %g, want %g", vffrexpBC[i], f, logbBC[i])
2223 func TestLog10(t *testing.T) {
2224 for i := 0; i < len(vf); i++ {
2225 a := Abs(vf[i])
2226 if f := Log10(a); !veryclose(log10[i], f) {
2227 t.Errorf("Log10(%g) = %g, want %g", a, f, log10[i])
2230 if f := Log10(E); f != Log10E {
2231 t.Errorf("Log10(%g) = %g, want %g", E, f, Log10E)
2233 for i := 0; i < len(vflogSC); i++ {
2234 if f := Log10(vflogSC[i]); !alike(logSC[i], f) {
2235 t.Errorf("Log10(%g) = %g, want %g", vflogSC[i], f, logSC[i])
2240 func TestLog1p(t *testing.T) {
2241 for i := 0; i < len(vf); i++ {
2242 a := vf[i] / 100
2243 if f := Log1p(a); !veryclose(log1p[i], f) {
2244 t.Errorf("Log1p(%g) = %g, want %g", a, f, log1p[i])
2247 a := 9.0
2248 if f := Log1p(a); f != Ln10 {
2249 t.Errorf("Log1p(%g) = %g, want %g", a, f, Ln10)
2251 for i := 0; i < len(vflogSC); i++ {
2252 if f := Log1p(vflog1pSC[i]); !alike(log1pSC[i], f) {
2253 t.Errorf("Log1p(%g) = %g, want %g", vflog1pSC[i], f, log1pSC[i])
2258 func TestLog2(t *testing.T) {
2259 for i := 0; i < len(vf); i++ {
2260 a := Abs(vf[i])
2261 if f := Log2(a); !veryclose(log2[i], f) {
2262 t.Errorf("Log2(%g) = %g, want %g", a, f, log2[i])
2265 if f := Log2(E); f != Log2E {
2266 t.Errorf("Log2(%g) = %g, want %g", E, f, Log2E)
2268 for i := 0; i < len(vflogSC); i++ {
2269 if f := Log2(vflogSC[i]); !alike(logSC[i], f) {
2270 t.Errorf("Log2(%g) = %g, want %g", vflogSC[i], f, logSC[i])
2275 func TestModf(t *testing.T) {
2276 for i := 0; i < len(vf); i++ {
2277 if f, g := Modf(vf[i]); !veryclose(modf[i][0], f) || !veryclose(modf[i][1], g) {
2278 t.Errorf("Modf(%g) = %g, %g, want %g, %g", vf[i], f, g, modf[i][0], modf[i][1])
2281 for i := 0; i < len(vfmodfSC); i++ {
2282 if f, g := Modf(vfmodfSC[i]); !alike(modfSC[i][0], f) || !alike(modfSC[i][1], g) {
2283 t.Errorf("Modf(%g) = %g, %g, want %g, %g", vfmodfSC[i], f, g, modfSC[i][0], modfSC[i][1])
2288 func TestNextafter(t *testing.T) {
2289 for i := 0; i < len(vf); i++ {
2290 if f := Nextafter(vf[i], 10); nextafter[i] != f {
2291 t.Errorf("Nextafter(%g, %g) = %g want %g", vf[i], 10.0, f, nextafter[i])
2294 for i := 0; i < len(vfnextafterSC); i++ {
2295 if f := Nextafter(vfnextafterSC[i][0], vfnextafterSC[i][1]); !alike(nextafterSC[i], f) {
2296 t.Errorf("Nextafter(%g, %g) = %g want %g", vfnextafterSC[i][0], vfnextafterSC[i][1], f, nextafterSC[i])
2301 func TestPow(t *testing.T) {
2302 for i := 0; i < len(vf); i++ {
2303 if f := Pow(10, vf[i]); !close(pow[i], f) {
2304 t.Errorf("Pow(10, %g) = %g, want %g", vf[i], f, pow[i])
2307 for i := 0; i < len(vfpowSC); i++ {
2308 if f := Pow(vfpowSC[i][0], vfpowSC[i][1]); !alike(powSC[i], f) {
2309 t.Errorf("Pow(%g, %g) = %g, want %g", vfpowSC[i][0], vfpowSC[i][1], f, powSC[i])
2314 func TestPow10(t *testing.T) {
2315 for i := 0; i < len(vfpow10SC); i++ {
2316 if f := Pow10(vfpow10SC[i]); !alike(pow10SC[i], f) {
2317 t.Errorf("Pow10(%d) = %g, want %g", vfpow10SC[i], f, pow10SC[i])
2322 func TestRemainder(t *testing.T) {
2323 for i := 0; i < len(vf); i++ {
2324 if f := Remainder(10, vf[i]); remainder[i] != f {
2325 t.Errorf("Remainder(10, %g) = %g, want %g", vf[i], f, remainder[i])
2328 for i := 0; i < len(vffmodSC); i++ {
2329 if f := Remainder(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
2330 t.Errorf("Remainder(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
2335 func TestSignbit(t *testing.T) {
2336 for i := 0; i < len(vf); i++ {
2337 if f := Signbit(vf[i]); signbit[i] != f {
2338 t.Errorf("Signbit(%g) = %t, want %t", vf[i], f, signbit[i])
2341 for i := 0; i < len(vfsignbitSC); i++ {
2342 if f := Signbit(vfsignbitSC[i]); signbitSC[i] != f {
2343 t.Errorf("Signbit(%g) = %t, want %t", vfsignbitSC[i], f, signbitSC[i])
2347 func TestSin(t *testing.T) {
2348 for i := 0; i < len(vf); i++ {
2349 if f := Sin(vf[i]); !veryclose(sin[i], f) {
2350 t.Errorf("Sin(%g) = %g, want %g", vf[i], f, sin[i])
2353 for i := 0; i < len(vfsinSC); i++ {
2354 if f := Sin(vfsinSC[i]); !alike(sinSC[i], f) {
2355 t.Errorf("Sin(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
2360 func TestSincos(t *testing.T) {
2361 for i := 0; i < len(vf); i++ {
2362 if s, c := Sincos(vf[i]); !veryclose(sin[i], s) || !veryclose(cos[i], c) {
2363 t.Errorf("Sincos(%g) = %g, %g want %g, %g", vf[i], s, c, sin[i], cos[i])
2368 func TestSinh(t *testing.T) {
2369 for i := 0; i < len(vf); i++ {
2370 if f := Sinh(vf[i]); !close(sinh[i], f) {
2371 t.Errorf("Sinh(%g) = %g, want %g", vf[i], f, sinh[i])
2374 for i := 0; i < len(vfsinhSC); i++ {
2375 if f := Sinh(vfsinhSC[i]); !alike(sinhSC[i], f) {
2376 t.Errorf("Sinh(%g) = %g, want %g", vfsinhSC[i], f, sinhSC[i])
2381 func TestSqrt(t *testing.T) {
2382 for i := 0; i < len(vf); i++ {
2383 a := Abs(vf[i])
2384 if f := SqrtGo(a); sqrt[i] != f {
2385 t.Errorf("SqrtGo(%g) = %g, want %g", a, f, sqrt[i])
2387 a = Abs(vf[i])
2388 if f := Sqrt(a); sqrt[i] != f {
2389 t.Errorf("Sqrt(%g) = %g, want %g", a, f, sqrt[i])
2392 for i := 0; i < len(vfsqrtSC); i++ {
2393 if f := SqrtGo(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
2394 t.Errorf("SqrtGo(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
2396 if f := Sqrt(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
2397 t.Errorf("Sqrt(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
2402 func TestTan(t *testing.T) {
2403 for i := 0; i < len(vf); i++ {
2404 if f := Tan(vf[i]); !veryclose(tan[i], f) {
2405 t.Errorf("Tan(%g) = %g, want %g", vf[i], f, tan[i])
2408 // same special cases as Sin
2409 for i := 0; i < len(vfsinSC); i++ {
2410 if f := Tan(vfsinSC[i]); !alike(sinSC[i], f) {
2411 t.Errorf("Tan(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
2416 func TestTanh(t *testing.T) {
2417 for i := 0; i < len(vf); i++ {
2418 if f := Tanh(vf[i]); !veryclose(tanh[i], f) {
2419 t.Errorf("Tanh(%g) = %g, want %g", vf[i], f, tanh[i])
2422 for i := 0; i < len(vftanhSC); i++ {
2423 if f := Tanh(vftanhSC[i]); !alike(tanhSC[i], f) {
2424 t.Errorf("Tanh(%g) = %g, want %g", vftanhSC[i], f, tanhSC[i])
2429 func TestTrunc(t *testing.T) {
2430 for i := 0; i < len(vf); i++ {
2431 if f := Trunc(vf[i]); trunc[i] != f {
2432 t.Errorf("Trunc(%g) = %g, want %g", vf[i], f, trunc[i])
2435 for i := 0; i < len(vfceilSC); i++ {
2436 if f := Trunc(vfceilSC[i]); !alike(ceilSC[i], f) {
2437 t.Errorf("Trunc(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
2442 func TestY0(t *testing.T) {
2443 for i := 0; i < len(vf); i++ {
2444 a := Abs(vf[i])
2445 if f := Y0(a); !close(y0[i], f) {
2446 t.Errorf("Y0(%g) = %g, want %g", a, f, y0[i])
2449 for i := 0; i < len(vfy0SC); i++ {
2450 if f := Y0(vfy0SC[i]); !alike(y0SC[i], f) {
2451 t.Errorf("Y0(%g) = %g, want %g", vfy0SC[i], f, y0SC[i])
2456 func TestY1(t *testing.T) {
2457 for i := 0; i < len(vf); i++ {
2458 a := Abs(vf[i])
2459 if f := Y1(a); !soclose(y1[i], f, 2e-14) {
2460 t.Errorf("Y1(%g) = %g, want %g", a, f, y1[i])
2463 for i := 0; i < len(vfy0SC); i++ {
2464 if f := Y1(vfy0SC[i]); !alike(y1SC[i], f) {
2465 t.Errorf("Y1(%g) = %g, want %g", vfy0SC[i], f, y1SC[i])
2470 func TestYn(t *testing.T) {
2471 for i := 0; i < len(vf); i++ {
2472 a := Abs(vf[i])
2473 if f := Yn(2, a); !close(y2[i], f) {
2474 t.Errorf("Yn(2, %g) = %g, want %g", a, f, y2[i])
2476 if f := Yn(-3, a); !close(yM3[i], f) {
2477 t.Errorf("Yn(-3, %g) = %g, want %g", a, f, yM3[i])
2480 for i := 0; i < len(vfy0SC); i++ {
2481 if f := Yn(2, vfy0SC[i]); !alike(y2SC[i], f) {
2482 t.Errorf("Yn(2, %g) = %g, want %g", vfy0SC[i], f, y2SC[i])
2484 if f := Yn(-3, vfy0SC[i]); !alike(yM3SC[i], f) {
2485 t.Errorf("Yn(-3, %g) = %g, want %g", vfy0SC[i], f, yM3SC[i])
2490 // Check that math functions of high angle values
2491 // return accurate results. [Since (vf[i] + large) - large != vf[i],
2492 // testing for Trig(vf[i] + large) == Trig(vf[i]), where large is
2493 // a multiple of 2*Pi, is misleading.]
2494 func TestLargeCos(t *testing.T) {
2495 large := float64(100000 * Pi)
2496 for i := 0; i < len(vf); i++ {
2497 f1 := cosLarge[i]
2498 f2 := Cos(vf[i] + large)
2499 if !close(f1, f2) {
2500 t.Errorf("Cos(%g) = %g, want %g", vf[i]+large, f2, f1)
2505 func TestLargeSin(t *testing.T) {
2506 large := float64(100000 * Pi)
2507 for i := 0; i < len(vf); i++ {
2508 f1 := sinLarge[i]
2509 f2 := Sin(vf[i] + large)
2510 if !close(f1, f2) {
2511 t.Errorf("Sin(%g) = %g, want %g", vf[i]+large, f2, f1)
2516 func TestLargeSincos(t *testing.T) {
2517 large := float64(100000 * Pi)
2518 for i := 0; i < len(vf); i++ {
2519 f1, g1 := sinLarge[i], cosLarge[i]
2520 f2, g2 := Sincos(vf[i] + large)
2521 if !close(f1, f2) || !close(g1, g2) {
2522 t.Errorf("Sincos(%g) = %g, %g, want %g, %g", vf[i]+large, f2, g2, f1, g1)
2527 func TestLargeTan(t *testing.T) {
2528 large := float64(100000 * Pi)
2529 for i := 0; i < len(vf); i++ {
2530 f1 := tanLarge[i]
2531 f2 := Tan(vf[i] + large)
2532 if !close(f1, f2) {
2533 t.Errorf("Tan(%g) = %g, want %g", vf[i]+large, f2, f1)
2538 // Check that math constants are accepted by compiler
2539 // and have right value (assumes strconv.ParseFloat works).
2540 // http://code.google.com/p/go/issues/detail?id=201
2542 type floatTest struct {
2543 val interface{}
2544 name string
2545 str string
2548 var floatTests = []floatTest{
2549 {float64(MaxFloat64), "MaxFloat64", "1.7976931348623157e+308"},
2550 {float64(SmallestNonzeroFloat64), "SmallestNonzeroFloat64", "5e-324"},
2551 {float32(MaxFloat32), "MaxFloat32", "3.4028235e+38"},
2552 {float32(SmallestNonzeroFloat32), "SmallestNonzeroFloat32", "1e-45"},
2555 func TestFloatMinMax(t *testing.T) {
2556 for _, tt := range floatTests {
2557 s := fmt.Sprint(tt.val)
2558 if s != tt.str {
2559 t.Errorf("Sprint(%v) = %s, want %s", tt.name, s, tt.str)
2564 // Benchmarks
2566 func BenchmarkAcos(b *testing.B) {
2567 for i := 0; i < b.N; i++ {
2568 Acos(.5)
2572 func BenchmarkAcosh(b *testing.B) {
2573 for i := 0; i < b.N; i++ {
2574 Acosh(1.5)
2578 func BenchmarkAsin(b *testing.B) {
2579 for i := 0; i < b.N; i++ {
2580 Asin(.5)
2584 func BenchmarkAsinh(b *testing.B) {
2585 for i := 0; i < b.N; i++ {
2586 Asinh(.5)
2590 func BenchmarkAtan(b *testing.B) {
2591 for i := 0; i < b.N; i++ {
2592 Atan(.5)
2596 func BenchmarkAtanh(b *testing.B) {
2597 for i := 0; i < b.N; i++ {
2598 Atanh(.5)
2602 func BenchmarkAtan2(b *testing.B) {
2603 for i := 0; i < b.N; i++ {
2604 Atan2(.5, 1)
2608 func BenchmarkCbrt(b *testing.B) {
2609 for i := 0; i < b.N; i++ {
2610 Cbrt(10)
2614 func BenchmarkCeil(b *testing.B) {
2615 for i := 0; i < b.N; i++ {
2616 Ceil(.5)
2620 func BenchmarkCopysign(b *testing.B) {
2621 for i := 0; i < b.N; i++ {
2622 Copysign(.5, -1)
2626 func BenchmarkCos(b *testing.B) {
2627 for i := 0; i < b.N; i++ {
2628 Cos(.5)
2632 func BenchmarkCosh(b *testing.B) {
2633 for i := 0; i < b.N; i++ {
2634 Cosh(2.5)
2638 func BenchmarkErf(b *testing.B) {
2639 for i := 0; i < b.N; i++ {
2640 Erf(.5)
2644 func BenchmarkErfc(b *testing.B) {
2645 for i := 0; i < b.N; i++ {
2646 Erfc(.5)
2650 func BenchmarkExp(b *testing.B) {
2651 for i := 0; i < b.N; i++ {
2652 Exp(.5)
2656 func BenchmarkExpGo(b *testing.B) {
2657 for i := 0; i < b.N; i++ {
2658 ExpGo(.5)
2662 func BenchmarkExpm1(b *testing.B) {
2663 for i := 0; i < b.N; i++ {
2664 Expm1(.5)
2668 func BenchmarkExp2(b *testing.B) {
2669 for i := 0; i < b.N; i++ {
2670 Exp2(.5)
2674 func BenchmarkExp2Go(b *testing.B) {
2675 for i := 0; i < b.N; i++ {
2676 Exp2Go(.5)
2680 func BenchmarkAbs(b *testing.B) {
2681 for i := 0; i < b.N; i++ {
2682 Abs(.5)
2686 func BenchmarkDim(b *testing.B) {
2687 for i := 0; i < b.N; i++ {
2688 Dim(10, 3)
2692 func BenchmarkFloor(b *testing.B) {
2693 for i := 0; i < b.N; i++ {
2694 Floor(.5)
2698 func BenchmarkMax(b *testing.B) {
2699 for i := 0; i < b.N; i++ {
2700 Max(10, 3)
2704 func BenchmarkMin(b *testing.B) {
2705 for i := 0; i < b.N; i++ {
2706 Min(10, 3)
2710 func BenchmarkMod(b *testing.B) {
2711 for i := 0; i < b.N; i++ {
2712 Mod(10, 3)
2716 func BenchmarkFrexp(b *testing.B) {
2717 for i := 0; i < b.N; i++ {
2718 Frexp(8)
2722 func BenchmarkGamma(b *testing.B) {
2723 for i := 0; i < b.N; i++ {
2724 Gamma(2.5)
2728 func BenchmarkHypot(b *testing.B) {
2729 for i := 0; i < b.N; i++ {
2730 Hypot(3, 4)
2734 func BenchmarkHypotGo(b *testing.B) {
2735 for i := 0; i < b.N; i++ {
2736 HypotGo(3, 4)
2740 func BenchmarkIlogb(b *testing.B) {
2741 for i := 0; i < b.N; i++ {
2742 Ilogb(.5)
2746 func BenchmarkJ0(b *testing.B) {
2747 for i := 0; i < b.N; i++ {
2748 J0(2.5)
2752 func BenchmarkJ1(b *testing.B) {
2753 for i := 0; i < b.N; i++ {
2754 J1(2.5)
2758 func BenchmarkJn(b *testing.B) {
2759 for i := 0; i < b.N; i++ {
2760 Jn(2, 2.5)
2764 func BenchmarkLdexp(b *testing.B) {
2765 for i := 0; i < b.N; i++ {
2766 Ldexp(.5, 2)
2770 func BenchmarkLgamma(b *testing.B) {
2771 for i := 0; i < b.N; i++ {
2772 Lgamma(2.5)
2776 func BenchmarkLog(b *testing.B) {
2777 for i := 0; i < b.N; i++ {
2778 Log(.5)
2782 func BenchmarkLogb(b *testing.B) {
2783 for i := 0; i < b.N; i++ {
2784 Logb(.5)
2788 func BenchmarkLog1p(b *testing.B) {
2789 for i := 0; i < b.N; i++ {
2790 Log1p(.5)
2794 func BenchmarkLog10(b *testing.B) {
2795 for i := 0; i < b.N; i++ {
2796 Log10(.5)
2800 func BenchmarkLog2(b *testing.B) {
2801 for i := 0; i < b.N; i++ {
2802 Log2(.5)
2806 func BenchmarkModf(b *testing.B) {
2807 for i := 0; i < b.N; i++ {
2808 Modf(1.5)
2812 func BenchmarkNextafter(b *testing.B) {
2813 for i := 0; i < b.N; i++ {
2814 Nextafter(.5, 1)
2818 func BenchmarkPowInt(b *testing.B) {
2819 for i := 0; i < b.N; i++ {
2820 Pow(2, 2)
2824 func BenchmarkPowFrac(b *testing.B) {
2825 for i := 0; i < b.N; i++ {
2826 Pow(2.5, 1.5)
2830 func BenchmarkPow10Pos(b *testing.B) {
2831 for i := 0; i < b.N; i++ {
2832 Pow10(300)
2836 func BenchmarkPow10Neg(b *testing.B) {
2837 for i := 0; i < b.N; i++ {
2838 Pow10(-300)
2842 func BenchmarkRemainder(b *testing.B) {
2843 for i := 0; i < b.N; i++ {
2844 Remainder(10, 3)
2848 func BenchmarkSignbit(b *testing.B) {
2849 for i := 0; i < b.N; i++ {
2850 Signbit(2.5)
2854 func BenchmarkSin(b *testing.B) {
2855 for i := 0; i < b.N; i++ {
2856 Sin(.5)
2860 func BenchmarkSincos(b *testing.B) {
2861 for i := 0; i < b.N; i++ {
2862 Sincos(.5)
2866 func BenchmarkSinh(b *testing.B) {
2867 for i := 0; i < b.N; i++ {
2868 Sinh(2.5)
2872 func BenchmarkSqrt(b *testing.B) {
2873 for i := 0; i < b.N; i++ {
2874 Sqrt(10)
2878 func BenchmarkSqrtGo(b *testing.B) {
2879 for i := 0; i < b.N; i++ {
2880 SqrtGo(10)
2884 func BenchmarkTan(b *testing.B) {
2885 for i := 0; i < b.N; i++ {
2886 Tan(.5)
2890 func BenchmarkTanh(b *testing.B) {
2891 for i := 0; i < b.N; i++ {
2892 Tanh(2.5)
2895 func BenchmarkTrunc(b *testing.B) {
2896 for i := 0; i < b.N; i++ {
2897 Trunc(.5)
2901 func BenchmarkY0(b *testing.B) {
2902 for i := 0; i < b.N; i++ {
2903 Y0(2.5)
2907 func BenchmarkY1(b *testing.B) {
2908 for i := 0; i < b.N; i++ {
2909 Y1(2.5)
2913 func BenchmarkYn(b *testing.B) {
2914 for i := 0; i < b.N; i++ {
2915 Yn(2, 2.5)