Home | History | Annotate | Download | only in math
      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.
      4 
      5 package math_test
      6 
      7 import (
      8 	"fmt"
      9 	. "math"
     10 	"testing"
     11 )
     12 
     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,
     24 }
     25 
     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,
     42 }
     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,
     54 }
     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,
     66 }
     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,
     78 }
     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,
     90 }
     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,
    102 }
    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,
    114 }
    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,
    126 }
    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,
    138 }
    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,
    150 }
    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,
    162 }
    163 
    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,
    176 }
    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,
    188 }
    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,
    200 }
    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,
    212 }
    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,
    224 }
    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,
    236 }
    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,
    248 }
    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,
    260 }
    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,
    272 }
    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,
    284 }
    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,
    296 }
    297 
    298 type fi struct {
    299 	f float64
    300 	i int
    301 }
    302 
    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},
    314 }
    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,
    326 }
    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,
    338 }
    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,
    350 }
    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,
    362 }
    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,
    374 }
    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},
    386 }
    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,
    398 }
    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,
    410 }
    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,
    422 }
    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,
    434 }
    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,
    446 }
    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},
    458 }
    459 var nextafter32 = []float32{
    460 	4.979012489318848e+00,
    461 	7.738873004913330e+00,
    462 	-2.768800258636475e-01,
    463 	-5.010602951049805e+00,
    464 	9.636294364929199e+00,
    465 	2.926377534866333e+00,
    466 	5.229084014892578e+00,
    467 	2.727940082550049e+00,
    468 	1.825308203697205e+00,
    469 	-8.685923576354980e+00,
    470 }
    471 var nextafter64 = []float64{
    472 	4.97901192488367438926388786e+00,
    473 	7.73887247457810545370193722e+00,
    474 	-2.7688005719200153853520874e-01,
    475 	-5.01060361827107403343006808e+00,
    476 	9.63629370719841915615688777e+00,
    477 	2.92637723924396508934364647e+00,
    478 	5.22908343145930754047867595e+00,
    479 	2.72793991043601069534929593e+00,
    480 	1.82530809168085528249036997e+00,
    481 	-8.68592476857559958602905681e+00,
    482 }
    483 var pow = []float64{
    484 	9.5282232631648411840742957e+04,
    485 	5.4811599352999901232411871e+07,
    486 	5.2859121715894396531132279e-01,
    487 	9.7587991957286474464259698e-06,
    488 	4.328064329346044846740467e+09,
    489 	8.4406761805034547437659092e+02,
    490 	1.6946633276191194947742146e+05,
    491 	5.3449040147551939075312879e+02,
    492 	6.688182138451414936380374e+01,
    493 	2.0609869004248742886827439e-09,
    494 }
    495 var remainder = []float64{
    496 	4.197615023265299782906368e-02,
    497 	2.261127525421895434476482e+00,
    498 	3.231794108794261433104108e-02,
    499 	-2.120723654214984321697556e-02,
    500 	3.637062928015826201999516e-01,
    501 	1.220868282268106064236690e+00,
    502 	-4.581668629186133046005125e-01,
    503 	-9.117596417440410050403443e-01,
    504 	8.734595415957246977711748e-01,
    505 	1.314075231424398637614104e+00,
    506 }
    507 var signbit = []bool{
    508 	false,
    509 	false,
    510 	true,
    511 	true,
    512 	false,
    513 	false,
    514 	false,
    515 	false,
    516 	false,
    517 	true,
    518 }
    519 var sin = []float64{
    520 	-9.6466616586009283766724726e-01,
    521 	9.9338225271646545763467022e-01,
    522 	-2.7335587039794393342449301e-01,
    523 	9.5586257685042792878173752e-01,
    524 	-2.099421066779969164496634e-01,
    525 	2.135578780799860532750616e-01,
    526 	-8.694568971167362743327708e-01,
    527 	4.019566681155577786649878e-01,
    528 	9.6778633541687993721617774e-01,
    529 	-6.734405869050344734943028e-01,
    530 }
    531 
    532 // Results for 100000 * Pi + vf[i]
    533 var sinLarge = []float64{
    534 	-9.646661658548936063912e-01,
    535 	9.933822527198506903752e-01,
    536 	-2.7335587036246899796e-01,
    537 	9.55862576853689321268e-01,
    538 	-2.099421066862688873691e-01,
    539 	2.13557878070308981163e-01,
    540 	-8.694568970959221300497e-01,
    541 	4.01956668098863248917e-01,
    542 	9.67786335404528727927e-01,
    543 	-6.7344058693131973066e-01,
    544 }
    545 var sinh = []float64{
    546 	7.2661916084208532301448439e+01,
    547 	1.1479409110035194500526446e+03,
    548 	-2.8043136512812518927312641e-01,
    549 	-7.499429091181587232835164e+01,
    550 	7.6552466042906758523925934e+03,
    551 	9.3031583421672014313789064e+00,
    552 	9.330815755828109072810322e+01,
    553 	7.6179893137269146407361477e+00,
    554 	3.021769180549615819524392e+00,
    555 	-2.95950575724449499189888e+03,
    556 }
    557 var sqrt = []float64{
    558 	2.2313699659365484748756904e+00,
    559 	2.7818829009464263511285458e+00,
    560 	5.2619393496314796848143251e-01,
    561 	2.2384377628763938724244104e+00,
    562 	3.1042380236055381099288487e+00,
    563 	1.7106657298385224403917771e+00,
    564 	2.286718922705479046148059e+00,
    565 	1.6516476350711159636222979e+00,
    566 	1.3510396336454586262419247e+00,
    567 	2.9471892997524949215723329e+00,
    568 }
    569 var tan = []float64{
    570 	-3.661316565040227801781974e+00,
    571 	8.64900232648597589369854e+00,
    572 	-2.8417941955033612725238097e-01,
    573 	3.253290185974728640827156e+00,
    574 	2.147275640380293804770778e-01,
    575 	-2.18600910711067004921551e-01,
    576 	-1.760002817872367935518928e+00,
    577 	-4.389808914752818126249079e-01,
    578 	-3.843885560201130679995041e+00,
    579 	9.10988793377685105753416e-01,
    580 }
    581 
    582 // Results for 100000 * Pi + vf[i]
    583 var tanLarge = []float64{
    584 	-3.66131656475596512705e+00,
    585 	8.6490023287202547927e+00,
    586 	-2.841794195104782406e-01,
    587 	3.2532901861033120983e+00,
    588 	2.14727564046880001365e-01,
    589 	-2.18600910700688062874e-01,
    590 	-1.760002817699722747043e+00,
    591 	-4.38980891453536115952e-01,
    592 	-3.84388555942723509071e+00,
    593 	9.1098879344275101051e-01,
    594 }
    595 var tanh = []float64{
    596 	9.9990531206936338549262119e-01,
    597 	9.9999962057085294197613294e-01,
    598 	-2.7001505097318677233756845e-01,
    599 	-9.9991110943061718603541401e-01,
    600 	9.9999999146798465745022007e-01,
    601 	9.9427249436125236705001048e-01,
    602 	9.9994257600983138572705076e-01,
    603 	9.9149409509772875982054701e-01,
    604 	9.4936501296239685514466577e-01,
    605 	-9.9999994291374030946055701e-01,
    606 }
    607 var trunc = []float64{
    608 	4.0000000000000000e+00,
    609 	7.0000000000000000e+00,
    610 	-0.0000000000000000e+00,
    611 	-5.0000000000000000e+00,
    612 	9.0000000000000000e+00,
    613 	2.0000000000000000e+00,
    614 	5.0000000000000000e+00,
    615 	2.0000000000000000e+00,
    616 	1.0000000000000000e+00,
    617 	-8.0000000000000000e+00,
    618 }
    619 var y0 = []float64{
    620 	-3.053399153780788357534855e-01,
    621 	1.7437227649515231515503649e-01,
    622 	-8.6221781263678836910392572e-01,
    623 	-3.100664880987498407872839e-01,
    624 	1.422200649300982280645377e-01,
    625 	4.000004067997901144239363e-01,
    626 	-3.3340749753099352392332536e-01,
    627 	4.5399790746668954555205502e-01,
    628 	4.8290004112497761007536522e-01,
    629 	2.7036697826604756229601611e-01,
    630 }
    631 var y1 = []float64{
    632 	0.15494213737457922210218611,
    633 	-0.2165955142081145245075746,
    634 	-2.4644949631241895201032829,
    635 	0.1442740489541836405154505,
    636 	0.2215379960518984777080163,
    637 	0.3038800915160754150565448,
    638 	0.0691107642452362383808547,
    639 	0.2380116417809914424860165,
    640 	-0.20849492979459761009678934,
    641 	0.0242503179793232308250804,
    642 }
    643 var y2 = []float64{
    644 	0.3675780219390303613394936,
    645 	-0.23034826393250119879267257,
    646 	-16.939677983817727205631397,
    647 	0.367653980523052152867791,
    648 	-0.0962401471767804440353136,
    649 	-0.1923169356184851105200523,
    650 	0.35984072054267882391843766,
    651 	-0.2794987252299739821654982,
    652 	-0.7113490692587462579757954,
    653 	-0.2647831587821263302087457,
    654 }
    655 var yM3 = []float64{
    656 	-0.14035984421094849100895341,
    657 	-0.097535139617792072703973,
    658 	242.25775994555580176377379,
    659 	-0.1492267014802818619511046,
    660 	0.26148702629155918694500469,
    661 	0.56675383593895176530394248,
    662 	-0.206150264009006981070575,
    663 	0.64784284687568332737963658,
    664 	1.3503631555901938037008443,
    665 	0.1461869756579956803341844,
    666 }
    667 
    668 // arguments and expected results for special cases
    669 var vfacosSC = []float64{
    670 	-Pi,
    671 	1,
    672 	Pi,
    673 	NaN(),
    674 }
    675 var acosSC = []float64{
    676 	NaN(),
    677 	0,
    678 	NaN(),
    679 	NaN(),
    680 }
    681 
    682 var vfacoshSC = []float64{
    683 	Inf(-1),
    684 	0.5,
    685 	1,
    686 	Inf(1),
    687 	NaN(),
    688 }
    689 var acoshSC = []float64{
    690 	NaN(),
    691 	NaN(),
    692 	0,
    693 	Inf(1),
    694 	NaN(),
    695 }
    696 
    697 var vfasinSC = []float64{
    698 	-Pi,
    699 	Copysign(0, -1),
    700 	0,
    701 	Pi,
    702 	NaN(),
    703 }
    704 var asinSC = []float64{
    705 	NaN(),
    706 	Copysign(0, -1),
    707 	0,
    708 	NaN(),
    709 	NaN(),
    710 }
    711 
    712 var vfasinhSC = []float64{
    713 	Inf(-1),
    714 	Copysign(0, -1),
    715 	0,
    716 	Inf(1),
    717 	NaN(),
    718 }
    719 var asinhSC = []float64{
    720 	Inf(-1),
    721 	Copysign(0, -1),
    722 	0,
    723 	Inf(1),
    724 	NaN(),
    725 }
    726 
    727 var vfatanSC = []float64{
    728 	Inf(-1),
    729 	Copysign(0, -1),
    730 	0,
    731 	Inf(1),
    732 	NaN(),
    733 }
    734 var atanSC = []float64{
    735 	-Pi / 2,
    736 	Copysign(0, -1),
    737 	0,
    738 	Pi / 2,
    739 	NaN(),
    740 }
    741 
    742 var vfatanhSC = []float64{
    743 	Inf(-1),
    744 	-Pi,
    745 	-1,
    746 	Copysign(0, -1),
    747 	0,
    748 	1,
    749 	Pi,
    750 	Inf(1),
    751 	NaN(),
    752 }
    753 var atanhSC = []float64{
    754 	NaN(),
    755 	NaN(),
    756 	Inf(-1),
    757 	Copysign(0, -1),
    758 	0,
    759 	Inf(1),
    760 	NaN(),
    761 	NaN(),
    762 	NaN(),
    763 }
    764 var vfatan2SC = [][2]float64{
    765 	{Inf(-1), Inf(-1)},
    766 	{Inf(-1), -Pi},
    767 	{Inf(-1), 0},
    768 	{Inf(-1), +Pi},
    769 	{Inf(-1), Inf(1)},
    770 	{Inf(-1), NaN()},
    771 	{-Pi, Inf(-1)},
    772 	{-Pi, 0},
    773 	{-Pi, Inf(1)},
    774 	{-Pi, NaN()},
    775 	{Copysign(0, -1), Inf(-1)},
    776 	{Copysign(0, -1), -Pi},
    777 	{Copysign(0, -1), Copysign(0, -1)},
    778 	{Copysign(0, -1), 0},
    779 	{Copysign(0, -1), +Pi},
    780 	{Copysign(0, -1), Inf(1)},
    781 	{Copysign(0, -1), NaN()},
    782 	{0, Inf(-1)},
    783 	{0, -Pi},
    784 	{0, Copysign(0, -1)},
    785 	{0, 0},
    786 	{0, +Pi},
    787 	{0, Inf(1)},
    788 	{0, NaN()},
    789 	{+Pi, Inf(-1)},
    790 	{+Pi, 0},
    791 	{+Pi, Inf(1)},
    792 	{+Pi, NaN()},
    793 	{Inf(1), Inf(-1)},
    794 	{Inf(1), -Pi},
    795 	{Inf(1), 0},
    796 	{Inf(1), +Pi},
    797 	{Inf(1), Inf(1)},
    798 	{Inf(1), NaN()},
    799 	{NaN(), NaN()},
    800 }
    801 var atan2SC = []float64{
    802 	-3 * Pi / 4,     // atan2(-Inf, -Inf)
    803 	-Pi / 2,         // atan2(-Inf, -Pi)
    804 	-Pi / 2,         // atan2(-Inf, +0)
    805 	-Pi / 2,         // atan2(-Inf, +Pi)
    806 	-Pi / 4,         // atan2(-Inf, +Inf)
    807 	NaN(),           // atan2(-Inf, NaN)
    808 	-Pi,             // atan2(-Pi, -Inf)
    809 	-Pi / 2,         // atan2(-Pi, +0)
    810 	Copysign(0, -1), // atan2(-Pi, Inf)
    811 	NaN(),           // atan2(-Pi, NaN)
    812 	-Pi,             // atan2(-0, -Inf)
    813 	-Pi,             // atan2(-0, -Pi)
    814 	-Pi,             // atan2(-0, -0)
    815 	Copysign(0, -1), // atan2(-0, +0)
    816 	Copysign(0, -1), // atan2(-0, +Pi)
    817 	Copysign(0, -1), // atan2(-0, +Inf)
    818 	NaN(),           // atan2(-0, NaN)
    819 	Pi,              // atan2(+0, -Inf)
    820 	Pi,              // atan2(+0, -Pi)
    821 	Pi,              // atan2(+0, -0)
    822 	0,               // atan2(+0, +0)
    823 	0,               // atan2(+0, +Pi)
    824 	0,               // atan2(+0, +Inf)
    825 	NaN(),           // atan2(+0, NaN)
    826 	Pi,              // atan2(+Pi, -Inf)
    827 	Pi / 2,          // atan2(+Pi, +0)
    828 	0,               // atan2(+Pi, +Inf)
    829 	NaN(),           // atan2(+Pi, NaN)
    830 	3 * Pi / 4,      // atan2(+Inf, -Inf)
    831 	Pi / 2,          // atan2(+Inf, -Pi)
    832 	Pi / 2,          // atan2(+Inf, +0)
    833 	Pi / 2,          // atan2(+Inf, +Pi)
    834 	Pi / 4,          // atan2(+Inf, +Inf)
    835 	NaN(),           // atan2(+Inf, NaN)
    836 	NaN(),           // atan2(NaN, NaN)
    837 }
    838 
    839 var vfcbrtSC = []float64{
    840 	Inf(-1),
    841 	Copysign(0, -1),
    842 	0,
    843 	Inf(1),
    844 	NaN(),
    845 }
    846 var cbrtSC = []float64{
    847 	Inf(-1),
    848 	Copysign(0, -1),
    849 	0,
    850 	Inf(1),
    851 	NaN(),
    852 }
    853 
    854 var vfceilSC = []float64{
    855 	Inf(-1),
    856 	Copysign(0, -1),
    857 	0,
    858 	Inf(1),
    859 	NaN(),
    860 }
    861 var ceilSC = []float64{
    862 	Inf(-1),
    863 	Copysign(0, -1),
    864 	0,
    865 	Inf(1),
    866 	NaN(),
    867 }
    868 
    869 var vfcopysignSC = []float64{
    870 	Inf(-1),
    871 	Inf(1),
    872 	NaN(),
    873 }
    874 var copysignSC = []float64{
    875 	Inf(-1),
    876 	Inf(-1),
    877 	NaN(),
    878 }
    879 
    880 var vfcosSC = []float64{
    881 	Inf(-1),
    882 	Inf(1),
    883 	NaN(),
    884 }
    885 var cosSC = []float64{
    886 	NaN(),
    887 	NaN(),
    888 	NaN(),
    889 }
    890 
    891 var vfcoshSC = []float64{
    892 	Inf(-1),
    893 	Copysign(0, -1),
    894 	0,
    895 	Inf(1),
    896 	NaN(),
    897 }
    898 var coshSC = []float64{
    899 	Inf(1),
    900 	1,
    901 	1,
    902 	Inf(1),
    903 	NaN(),
    904 }
    905 
    906 var vferfSC = []float64{
    907 	Inf(-1),
    908 	Copysign(0, -1),
    909 	0,
    910 	Inf(1),
    911 	NaN(),
    912 }
    913 var erfSC = []float64{
    914 	-1,
    915 	Copysign(0, -1),
    916 	0,
    917 	1,
    918 	NaN(),
    919 }
    920 
    921 var vferfcSC = []float64{
    922 	Inf(-1),
    923 	Inf(1),
    924 	NaN(),
    925 }
    926 var erfcSC = []float64{
    927 	2,
    928 	0,
    929 	NaN(),
    930 }
    931 
    932 var vfexpSC = []float64{
    933 	Inf(-1),
    934 	-2000,
    935 	2000,
    936 	Inf(1),
    937 	NaN(),
    938 }
    939 var expSC = []float64{
    940 	0,
    941 	0,
    942 	Inf(1),
    943 	Inf(1),
    944 	NaN(),
    945 }
    946 
    947 var vfexpm1SC = []float64{
    948 	Inf(-1),
    949 	-710,
    950 	Copysign(0, -1),
    951 	0,
    952 	710,
    953 	Inf(1),
    954 	NaN(),
    955 }
    956 var expm1SC = []float64{
    957 	-1,
    958 	-1,
    959 	Copysign(0, -1),
    960 	0,
    961 	Inf(1),
    962 	Inf(1),
    963 	NaN(),
    964 }
    965 
    966 var vffabsSC = []float64{
    967 	Inf(-1),
    968 	Copysign(0, -1),
    969 	0,
    970 	Inf(1),
    971 	NaN(),
    972 }
    973 var fabsSC = []float64{
    974 	Inf(1),
    975 	0,
    976 	0,
    977 	Inf(1),
    978 	NaN(),
    979 }
    980 
    981 var vffdimSC = [][2]float64{
    982 	{Inf(-1), Inf(-1)},
    983 	{Inf(-1), Inf(1)},
    984 	{Inf(-1), NaN()},
    985 	{Copysign(0, -1), Copysign(0, -1)},
    986 	{Copysign(0, -1), 0},
    987 	{0, Copysign(0, -1)},
    988 	{0, 0},
    989 	{Inf(1), Inf(-1)},
    990 	{Inf(1), Inf(1)},
    991 	{Inf(1), NaN()},
    992 	{NaN(), Inf(-1)},
    993 	{NaN(), Copysign(0, -1)},
    994 	{NaN(), 0},
    995 	{NaN(), Inf(1)},
    996 	{NaN(), NaN()},
    997 }
    998 var nan = Float64frombits(0xFFF8000000000000) // SSE2 DIVSD 0/0
    999 var vffdim2SC = [][2]float64{
   1000 	{Inf(-1), Inf(-1)},
   1001 	{Inf(-1), Inf(1)},
   1002 	{Inf(-1), nan},
   1003 	{Copysign(0, -1), Copysign(0, -1)},
   1004 	{Copysign(0, -1), 0},
   1005 	{0, Copysign(0, -1)},
   1006 	{0, 0},
   1007 	{Inf(1), Inf(-1)},
   1008 	{Inf(1), Inf(1)},
   1009 	{Inf(1), nan},
   1010 	{nan, Inf(-1)},
   1011 	{nan, Copysign(0, -1)},
   1012 	{nan, 0},
   1013 	{nan, Inf(1)},
   1014 	{nan, nan},
   1015 }
   1016 var fdimSC = []float64{
   1017 	NaN(),
   1018 	0,
   1019 	NaN(),
   1020 	0,
   1021 	0,
   1022 	0,
   1023 	0,
   1024 	Inf(1),
   1025 	NaN(),
   1026 	NaN(),
   1027 	NaN(),
   1028 	NaN(),
   1029 	NaN(),
   1030 	NaN(),
   1031 	NaN(),
   1032 }
   1033 var fmaxSC = []float64{
   1034 	Inf(-1),
   1035 	Inf(1),
   1036 	NaN(),
   1037 	Copysign(0, -1),
   1038 	0,
   1039 	0,
   1040 	0,
   1041 	Inf(1),
   1042 	Inf(1),
   1043 	Inf(1),
   1044 	NaN(),
   1045 	NaN(),
   1046 	NaN(),
   1047 	Inf(1),
   1048 	NaN(),
   1049 }
   1050 var fminSC = []float64{
   1051 	Inf(-1),
   1052 	Inf(-1),
   1053 	Inf(-1),
   1054 	Copysign(0, -1),
   1055 	Copysign(0, -1),
   1056 	Copysign(0, -1),
   1057 	0,
   1058 	Inf(-1),
   1059 	Inf(1),
   1060 	NaN(),
   1061 	Inf(-1),
   1062 	NaN(),
   1063 	NaN(),
   1064 	NaN(),
   1065 	NaN(),
   1066 }
   1067 
   1068 var vffmodSC = [][2]float64{
   1069 	{Inf(-1), Inf(-1)},
   1070 	{Inf(-1), -Pi},
   1071 	{Inf(-1), 0},
   1072 	{Inf(-1), Pi},
   1073 	{Inf(-1), Inf(1)},
   1074 	{Inf(-1), NaN()},
   1075 	{-Pi, Inf(-1)},
   1076 	{-Pi, 0},
   1077 	{-Pi, Inf(1)},
   1078 	{-Pi, NaN()},
   1079 	{Copysign(0, -1), Inf(-1)},
   1080 	{Copysign(0, -1), 0},
   1081 	{Copysign(0, -1), Inf(1)},
   1082 	{Copysign(0, -1), NaN()},
   1083 	{0, Inf(-1)},
   1084 	{0, 0},
   1085 	{0, Inf(1)},
   1086 	{0, NaN()},
   1087 	{Pi, Inf(-1)},
   1088 	{Pi, 0},
   1089 	{Pi, Inf(1)},
   1090 	{Pi, NaN()},
   1091 	{Inf(1), Inf(-1)},
   1092 	{Inf(1), -Pi},
   1093 	{Inf(1), 0},
   1094 	{Inf(1), Pi},
   1095 	{Inf(1), Inf(1)},
   1096 	{Inf(1), NaN()},
   1097 	{NaN(), Inf(-1)},
   1098 	{NaN(), -Pi},
   1099 	{NaN(), 0},
   1100 	{NaN(), Pi},
   1101 	{NaN(), Inf(1)},
   1102 	{NaN(), NaN()},
   1103 }
   1104 var fmodSC = []float64{
   1105 	NaN(),           // fmod(-Inf, -Inf)
   1106 	NaN(),           // fmod(-Inf, -Pi)
   1107 	NaN(),           // fmod(-Inf, 0)
   1108 	NaN(),           // fmod(-Inf, Pi)
   1109 	NaN(),           // fmod(-Inf, +Inf)
   1110 	NaN(),           // fmod(-Inf, NaN)
   1111 	-Pi,             // fmod(-Pi, -Inf)
   1112 	NaN(),           // fmod(-Pi, 0)
   1113 	-Pi,             // fmod(-Pi, +Inf)
   1114 	NaN(),           // fmod(-Pi, NaN)
   1115 	Copysign(0, -1), // fmod(-0, -Inf)
   1116 	NaN(),           // fmod(-0, 0)
   1117 	Copysign(0, -1), // fmod(-0, Inf)
   1118 	NaN(),           // fmod(-0, NaN)
   1119 	0,               // fmod(0, -Inf)
   1120 	NaN(),           // fmod(0, 0)
   1121 	0,               // fmod(0, +Inf)
   1122 	NaN(),           // fmod(0, NaN)
   1123 	Pi,              // fmod(Pi, -Inf)
   1124 	NaN(),           // fmod(Pi, 0)
   1125 	Pi,              // fmod(Pi, +Inf)
   1126 	NaN(),           // fmod(Pi, NaN)
   1127 	NaN(),           // fmod(+Inf, -Inf)
   1128 	NaN(),           // fmod(+Inf, -Pi)
   1129 	NaN(),           // fmod(+Inf, 0)
   1130 	NaN(),           // fmod(+Inf, Pi)
   1131 	NaN(),           // fmod(+Inf, +Inf)
   1132 	NaN(),           // fmod(+Inf, NaN)
   1133 	NaN(),           // fmod(NaN, -Inf)
   1134 	NaN(),           // fmod(NaN, -Pi)
   1135 	NaN(),           // fmod(NaN, 0)
   1136 	NaN(),           // fmod(NaN, Pi)
   1137 	NaN(),           // fmod(NaN, +Inf)
   1138 	NaN(),           // fmod(NaN, NaN)
   1139 }
   1140 
   1141 var vffrexpSC = []float64{
   1142 	Inf(-1),
   1143 	Copysign(0, -1),
   1144 	0,
   1145 	Inf(1),
   1146 	NaN(),
   1147 }
   1148 var frexpSC = []fi{
   1149 	{Inf(-1), 0},
   1150 	{Copysign(0, -1), 0},
   1151 	{0, 0},
   1152 	{Inf(1), 0},
   1153 	{NaN(), 0},
   1154 }
   1155 
   1156 var vfgammaSC = []float64{
   1157 	Inf(-1),
   1158 	-3,
   1159 	Copysign(0, -1),
   1160 	0,
   1161 	Inf(1),
   1162 	NaN(),
   1163 }
   1164 var gammaSC = []float64{
   1165 	NaN(),
   1166 	NaN(),
   1167 	Inf(-1),
   1168 	Inf(1),
   1169 	Inf(1),
   1170 	NaN(),
   1171 }
   1172 
   1173 var vfhypotSC = [][2]float64{
   1174 	{Inf(-1), Inf(-1)},
   1175 	{Inf(-1), 0},
   1176 	{Inf(-1), Inf(1)},
   1177 	{Inf(-1), NaN()},
   1178 	{Copysign(0, -1), Copysign(0, -1)},
   1179 	{Copysign(0, -1), 0},
   1180 	{0, Copysign(0, -1)},
   1181 	{0, 0}, // +0, +0
   1182 	{0, Inf(-1)},
   1183 	{0, Inf(1)},
   1184 	{0, NaN()},
   1185 	{Inf(1), Inf(-1)},
   1186 	{Inf(1), 0},
   1187 	{Inf(1), Inf(1)},
   1188 	{Inf(1), NaN()},
   1189 	{NaN(), Inf(-1)},
   1190 	{NaN(), 0},
   1191 	{NaN(), Inf(1)},
   1192 	{NaN(), NaN()},
   1193 }
   1194 var hypotSC = []float64{
   1195 	Inf(1),
   1196 	Inf(1),
   1197 	Inf(1),
   1198 	Inf(1),
   1199 	0,
   1200 	0,
   1201 	0,
   1202 	0,
   1203 	Inf(1),
   1204 	Inf(1),
   1205 	NaN(),
   1206 	Inf(1),
   1207 	Inf(1),
   1208 	Inf(1),
   1209 	Inf(1),
   1210 	Inf(1),
   1211 	NaN(),
   1212 	Inf(1),
   1213 	NaN(),
   1214 }
   1215 
   1216 var vfilogbSC = []float64{
   1217 	Inf(-1),
   1218 	0,
   1219 	Inf(1),
   1220 	NaN(),
   1221 }
   1222 var ilogbSC = []int{
   1223 	MaxInt32,
   1224 	MinInt32,
   1225 	MaxInt32,
   1226 	MaxInt32,
   1227 }
   1228 
   1229 var vfj0SC = []float64{
   1230 	Inf(-1),
   1231 	0,
   1232 	Inf(1),
   1233 	NaN(),
   1234 }
   1235 var j0SC = []float64{
   1236 	0,
   1237 	1,
   1238 	0,
   1239 	NaN(),
   1240 }
   1241 var j1SC = []float64{
   1242 	0,
   1243 	0,
   1244 	0,
   1245 	NaN(),
   1246 }
   1247 var j2SC = []float64{
   1248 	0,
   1249 	0,
   1250 	0,
   1251 	NaN(),
   1252 }
   1253 var jM3SC = []float64{
   1254 	0,
   1255 	0,
   1256 	0,
   1257 	NaN(),
   1258 }
   1259 
   1260 var vfldexpSC = []fi{
   1261 	{0, 0},
   1262 	{0, -1075},
   1263 	{0, 1024},
   1264 	{Copysign(0, -1), 0},
   1265 	{Copysign(0, -1), -1075},
   1266 	{Copysign(0, -1), 1024},
   1267 	{Inf(1), 0},
   1268 	{Inf(1), -1024},
   1269 	{Inf(-1), 0},
   1270 	{Inf(-1), -1024},
   1271 	{NaN(), -1024},
   1272 }
   1273 var ldexpSC = []float64{
   1274 	0,
   1275 	0,
   1276 	0,
   1277 	Copysign(0, -1),
   1278 	Copysign(0, -1),
   1279 	Copysign(0, -1),
   1280 	Inf(1),
   1281 	Inf(1),
   1282 	Inf(-1),
   1283 	Inf(-1),
   1284 	NaN(),
   1285 }
   1286 
   1287 var vflgammaSC = []float64{
   1288 	Inf(-1),
   1289 	-3,
   1290 	0,
   1291 	1,
   1292 	2,
   1293 	Inf(1),
   1294 	NaN(),
   1295 }
   1296 var lgammaSC = []fi{
   1297 	{Inf(-1), 1},
   1298 	{Inf(1), 1},
   1299 	{Inf(1), 1},
   1300 	{0, 1},
   1301 	{0, 1},
   1302 	{Inf(1), 1},
   1303 	{NaN(), 1},
   1304 }
   1305 
   1306 var vflogSC = []float64{
   1307 	Inf(-1),
   1308 	-Pi,
   1309 	Copysign(0, -1),
   1310 	0,
   1311 	1,
   1312 	Inf(1),
   1313 	NaN(),
   1314 }
   1315 var logSC = []float64{
   1316 	NaN(),
   1317 	NaN(),
   1318 	Inf(-1),
   1319 	Inf(-1),
   1320 	0,
   1321 	Inf(1),
   1322 	NaN(),
   1323 }
   1324 
   1325 var vflogbSC = []float64{
   1326 	Inf(-1),
   1327 	0,
   1328 	Inf(1),
   1329 	NaN(),
   1330 }
   1331 var logbSC = []float64{
   1332 	Inf(1),
   1333 	Inf(-1),
   1334 	Inf(1),
   1335 	NaN(),
   1336 }
   1337 
   1338 var vflog1pSC = []float64{
   1339 	Inf(-1),
   1340 	-Pi,
   1341 	-1,
   1342 	Copysign(0, -1),
   1343 	0,
   1344 	Inf(1),
   1345 	NaN(),
   1346 }
   1347 var log1pSC = []float64{
   1348 	NaN(),
   1349 	NaN(),
   1350 	Inf(-1),
   1351 	Copysign(0, -1),
   1352 	0,
   1353 	Inf(1),
   1354 	NaN(),
   1355 }
   1356 
   1357 var vfmodfSC = []float64{
   1358 	Inf(-1),
   1359 	Inf(1),
   1360 	NaN(),
   1361 }
   1362 var modfSC = [][2]float64{
   1363 	{Inf(-1), NaN()}, // [2]float64{Copysign(0, -1), Inf(-1)},
   1364 	{Inf(1), NaN()},  // [2]float64{0, Inf(1)},
   1365 	{NaN(), NaN()},
   1366 }
   1367 
   1368 var vfnextafter32SC = [][2]float32{
   1369 	{0, 0},
   1370 	{0, float32(Copysign(0, -1))},
   1371 	{0, -1},
   1372 	{0, float32(NaN())},
   1373 	{float32(Copysign(0, -1)), 1},
   1374 	{float32(Copysign(0, -1)), 0},
   1375 	{float32(Copysign(0, -1)), float32(Copysign(0, -1))},
   1376 	{float32(Copysign(0, -1)), -1},
   1377 	{float32(NaN()), 0},
   1378 	{float32(NaN()), float32(NaN())},
   1379 }
   1380 var nextafter32SC = []float32{
   1381 	0,
   1382 	0,
   1383 	-1.401298464e-45, // Float32frombits(0x80000001)
   1384 	float32(NaN()),
   1385 	1.401298464e-45, // Float32frombits(0x00000001)
   1386 	float32(Copysign(0, -1)),
   1387 	float32(Copysign(0, -1)),
   1388 	-1.401298464e-45, // Float32frombits(0x80000001)
   1389 	float32(NaN()),
   1390 	float32(NaN()),
   1391 }
   1392 
   1393 var vfnextafter64SC = [][2]float64{
   1394 	{0, 0},
   1395 	{0, Copysign(0, -1)},
   1396 	{0, -1},
   1397 	{0, NaN()},
   1398 	{Copysign(0, -1), 1},
   1399 	{Copysign(0, -1), 0},
   1400 	{Copysign(0, -1), Copysign(0, -1)},
   1401 	{Copysign(0, -1), -1},
   1402 	{NaN(), 0},
   1403 	{NaN(), NaN()},
   1404 }
   1405 var nextafter64SC = []float64{
   1406 	0,
   1407 	0,
   1408 	-4.9406564584124654418e-324, // Float64frombits(0x8000000000000001)
   1409 	NaN(),
   1410 	4.9406564584124654418e-324, // Float64frombits(0x0000000000000001)
   1411 	Copysign(0, -1),
   1412 	Copysign(0, -1),
   1413 	-4.9406564584124654418e-324, // Float64frombits(0x8000000000000001)
   1414 	NaN(),
   1415 	NaN(),
   1416 }
   1417 
   1418 var vfpowSC = [][2]float64{
   1419 	{Inf(-1), -Pi},
   1420 	{Inf(-1), -3},
   1421 	{Inf(-1), Copysign(0, -1)},
   1422 	{Inf(-1), 0},
   1423 	{Inf(-1), 1},
   1424 	{Inf(-1), 3},
   1425 	{Inf(-1), Pi},
   1426 	{Inf(-1), NaN()},
   1427 
   1428 	{-Pi, Inf(-1)},
   1429 	{-Pi, -Pi},
   1430 	{-Pi, Copysign(0, -1)},
   1431 	{-Pi, 0},
   1432 	{-Pi, 1},
   1433 	{-Pi, Pi},
   1434 	{-Pi, Inf(1)},
   1435 	{-Pi, NaN()},
   1436 
   1437 	{-1, Inf(-1)},
   1438 	{-1, Inf(1)},
   1439 	{-1, NaN()},
   1440 	{-1 / 2, Inf(-1)},
   1441 	{-1 / 2, Inf(1)},
   1442 	{Copysign(0, -1), Inf(-1)},
   1443 	{Copysign(0, -1), -Pi},
   1444 	{Copysign(0, -1), -3},
   1445 	{Copysign(0, -1), 3},
   1446 	{Copysign(0, -1), Pi},
   1447 	{Copysign(0, -1), Inf(1)},
   1448 
   1449 	{0, Inf(-1)},
   1450 	{0, -Pi},
   1451 	{0, -3},
   1452 	{0, Copysign(0, -1)},
   1453 	{0, 0},
   1454 	{0, 3},
   1455 	{0, Pi},
   1456 	{0, Inf(1)},
   1457 	{0, NaN()},
   1458 
   1459 	{1 / 2, Inf(-1)},
   1460 	{1 / 2, Inf(1)},
   1461 	{1, Inf(-1)},
   1462 	{1, Inf(1)},
   1463 	{1, NaN()},
   1464 
   1465 	{Pi, Inf(-1)},
   1466 	{Pi, Copysign(0, -1)},
   1467 	{Pi, 0},
   1468 	{Pi, 1},
   1469 	{Pi, Inf(1)},
   1470 	{Pi, NaN()},
   1471 	{Inf(1), -Pi},
   1472 	{Inf(1), Copysign(0, -1)},
   1473 	{Inf(1), 0},
   1474 	{Inf(1), 1},
   1475 	{Inf(1), Pi},
   1476 	{Inf(1), NaN()},
   1477 	{NaN(), -Pi},
   1478 	{NaN(), Copysign(0, -1)},
   1479 	{NaN(), 0},
   1480 	{NaN(), 1},
   1481 	{NaN(), Pi},
   1482 	{NaN(), NaN()},
   1483 }
   1484 var powSC = []float64{
   1485 	0,               // pow(-Inf, -Pi)
   1486 	Copysign(0, -1), // pow(-Inf, -3)
   1487 	1,               // pow(-Inf, -0)
   1488 	1,               // pow(-Inf, +0)
   1489 	Inf(-1),         // pow(-Inf, 1)
   1490 	Inf(-1),         // pow(-Inf, 3)
   1491 	Inf(1),          // pow(-Inf, Pi)
   1492 	NaN(),           // pow(-Inf, NaN)
   1493 	0,               // pow(-Pi, -Inf)
   1494 	NaN(),           // pow(-Pi, -Pi)
   1495 	1,               // pow(-Pi, -0)
   1496 	1,               // pow(-Pi, +0)
   1497 	-Pi,             // pow(-Pi, 1)
   1498 	NaN(),           // pow(-Pi, Pi)
   1499 	Inf(1),          // pow(-Pi, +Inf)
   1500 	NaN(),           // pow(-Pi, NaN)
   1501 	1,               // pow(-1, -Inf) IEEE 754-2008
   1502 	1,               // pow(-1, +Inf) IEEE 754-2008
   1503 	NaN(),           // pow(-1, NaN)
   1504 	Inf(1),          // pow(-1/2, -Inf)
   1505 	0,               // pow(-1/2, +Inf)
   1506 	Inf(1),          // pow(-0, -Inf)
   1507 	Inf(1),          // pow(-0, -Pi)
   1508 	Inf(-1),         // pow(-0, -3) IEEE 754-2008
   1509 	Copysign(0, -1), // pow(-0, 3) IEEE 754-2008
   1510 	0,               // pow(-0, +Pi)
   1511 	0,               // pow(-0, +Inf)
   1512 	Inf(1),          // pow(+0, -Inf)
   1513 	Inf(1),          // pow(+0, -Pi)
   1514 	Inf(1),          // pow(+0, -3)
   1515 	1,               // pow(+0, -0)
   1516 	1,               // pow(+0, +0)
   1517 	0,               // pow(+0, 3)
   1518 	0,               // pow(+0, +Pi)
   1519 	0,               // pow(+0, +Inf)
   1520 	NaN(),           // pow(+0, NaN)
   1521 	Inf(1),          // pow(1/2, -Inf)
   1522 	0,               // pow(1/2, +Inf)
   1523 	1,               // pow(1, -Inf) IEEE 754-2008
   1524 	1,               // pow(1, +Inf) IEEE 754-2008
   1525 	1,               // pow(1, NaN) IEEE 754-2008
   1526 	0,               // pow(+Pi, -Inf)
   1527 	1,               // pow(+Pi, -0)
   1528 	1,               // pow(+Pi, +0)
   1529 	Pi,              // pow(+Pi, 1)
   1530 	Inf(1),          // pow(+Pi, +Inf)
   1531 	NaN(),           // pow(+Pi, NaN)
   1532 	0,               // pow(+Inf, -Pi)
   1533 	1,               // pow(+Inf, -0)
   1534 	1,               // pow(+Inf, +0)
   1535 	Inf(1),          // pow(+Inf, 1)
   1536 	Inf(1),          // pow(+Inf, Pi)
   1537 	NaN(),           // pow(+Inf, NaN)
   1538 	NaN(),           // pow(NaN, -Pi)
   1539 	1,               // pow(NaN, -0)
   1540 	1,               // pow(NaN, +0)
   1541 	NaN(),           // pow(NaN, 1)
   1542 	NaN(),           // pow(NaN, +Pi)
   1543 	NaN(),           // pow(NaN, NaN)
   1544 }
   1545 
   1546 var vfpow10SC = []int{
   1547 	MinInt32,
   1548 	MaxInt32,
   1549 	-325,
   1550 	309,
   1551 }
   1552 
   1553 var pow10SC = []float64{
   1554 	0,      // pow10(MinInt32)
   1555 	Inf(1), // pow10(MaxInt32)
   1556 	0,      // pow10(-325)
   1557 	Inf(1), // pow10(309)
   1558 }
   1559 
   1560 var vfsignbitSC = []float64{
   1561 	Inf(-1),
   1562 	Copysign(0, -1),
   1563 	0,
   1564 	Inf(1),
   1565 	NaN(),
   1566 }
   1567 var signbitSC = []bool{
   1568 	true,
   1569 	true,
   1570 	false,
   1571 	false,
   1572 	false,
   1573 }
   1574 
   1575 var vfsinSC = []float64{
   1576 	Inf(-1),
   1577 	Copysign(0, -1),
   1578 	0,
   1579 	Inf(1),
   1580 	NaN(),
   1581 }
   1582 var sinSC = []float64{
   1583 	NaN(),
   1584 	Copysign(0, -1),
   1585 	0,
   1586 	NaN(),
   1587 	NaN(),
   1588 }
   1589 
   1590 var vfsinhSC = []float64{
   1591 	Inf(-1),
   1592 	Copysign(0, -1),
   1593 	0,
   1594 	Inf(1),
   1595 	NaN(),
   1596 }
   1597 var sinhSC = []float64{
   1598 	Inf(-1),
   1599 	Copysign(0, -1),
   1600 	0,
   1601 	Inf(1),
   1602 	NaN(),
   1603 }
   1604 
   1605 var vfsqrtSC = []float64{
   1606 	Inf(-1),
   1607 	-Pi,
   1608 	Copysign(0, -1),
   1609 	0,
   1610 	Inf(1),
   1611 	NaN(),
   1612 }
   1613 var sqrtSC = []float64{
   1614 	NaN(),
   1615 	NaN(),
   1616 	Copysign(0, -1),
   1617 	0,
   1618 	Inf(1),
   1619 	NaN(),
   1620 }
   1621 
   1622 var vftanhSC = []float64{
   1623 	Inf(-1),
   1624 	Copysign(0, -1),
   1625 	0,
   1626 	Inf(1),
   1627 	NaN(),
   1628 }
   1629 var tanhSC = []float64{
   1630 	-1,
   1631 	Copysign(0, -1),
   1632 	0,
   1633 	1,
   1634 	NaN(),
   1635 }
   1636 
   1637 var vfy0SC = []float64{
   1638 	Inf(-1),
   1639 	0,
   1640 	Inf(1),
   1641 	NaN(),
   1642 }
   1643 var y0SC = []float64{
   1644 	NaN(),
   1645 	Inf(-1),
   1646 	0,
   1647 	NaN(),
   1648 }
   1649 var y1SC = []float64{
   1650 	NaN(),
   1651 	Inf(-1),
   1652 	0,
   1653 	NaN(),
   1654 }
   1655 var y2SC = []float64{
   1656 	NaN(),
   1657 	Inf(-1),
   1658 	0,
   1659 	NaN(),
   1660 }
   1661 var yM3SC = []float64{
   1662 	NaN(),
   1663 	Inf(1),
   1664 	0,
   1665 	NaN(),
   1666 }
   1667 
   1668 // arguments and expected results for boundary cases
   1669 const (
   1670 	SmallestNormalFloat64   = 2.2250738585072014e-308 // 2**-1022
   1671 	LargestSubnormalFloat64 = SmallestNormalFloat64 - SmallestNonzeroFloat64
   1672 )
   1673 
   1674 var vffrexpBC = []float64{
   1675 	SmallestNormalFloat64,
   1676 	LargestSubnormalFloat64,
   1677 	SmallestNonzeroFloat64,
   1678 	MaxFloat64,
   1679 	-SmallestNormalFloat64,
   1680 	-LargestSubnormalFloat64,
   1681 	-SmallestNonzeroFloat64,
   1682 	-MaxFloat64,
   1683 }
   1684 var frexpBC = []fi{
   1685 	{0.5, -1021},
   1686 	{0.99999999999999978, -1022},
   1687 	{0.5, -1073},
   1688 	{0.99999999999999989, 1024},
   1689 	{-0.5, -1021},
   1690 	{-0.99999999999999978, -1022},
   1691 	{-0.5, -1073},
   1692 	{-0.99999999999999989, 1024},
   1693 }
   1694 
   1695 var vfldexpBC = []fi{
   1696 	{SmallestNormalFloat64, -52},
   1697 	{LargestSubnormalFloat64, -51},
   1698 	{SmallestNonzeroFloat64, 1074},
   1699 	{MaxFloat64, -(1023 + 1074)},
   1700 	{1, -1075},
   1701 	{-1, -1075},
   1702 	{1, 1024},
   1703 	{-1, 1024},
   1704 }
   1705 var ldexpBC = []float64{
   1706 	SmallestNonzeroFloat64,
   1707 	1e-323, // 2**-1073
   1708 	1,
   1709 	1e-323, // 2**-1073
   1710 	0,
   1711 	Copysign(0, -1),
   1712 	Inf(1),
   1713 	Inf(-1),
   1714 }
   1715 
   1716 var logbBC = []float64{
   1717 	-1022,
   1718 	-1023,
   1719 	-1074,
   1720 	1023,
   1721 	-1022,
   1722 	-1023,
   1723 	-1074,
   1724 	1023,
   1725 }
   1726 
   1727 func tolerance(a, b, e float64) bool {
   1728 	d := a - b
   1729 	if d < 0 {
   1730 		d = -d
   1731 	}
   1732 
   1733 	// note: b is correct (expected) value, a is actual value.
   1734 	// make error tolerance a fraction of b, not a.
   1735 	if b != 0 {
   1736 		e = e * b
   1737 		if e < 0 {
   1738 			e = -e
   1739 		}
   1740 	}
   1741 	return d < e
   1742 }
   1743 func kindaclose(a, b float64) bool { return tolerance(a, b, 1e-8) }
   1744 func close(a, b float64) bool      { return tolerance(a, b, 1e-14) }
   1745 func veryclose(a, b float64) bool  { return tolerance(a, b, 4e-16) }
   1746 func soclose(a, b, e float64) bool { return tolerance(a, b, e) }
   1747 func alike(a, b float64) bool {
   1748 	switch {
   1749 	case IsNaN(a) && IsNaN(b):
   1750 		return true
   1751 	case a == b:
   1752 		return Signbit(a) == Signbit(b)
   1753 	}
   1754 	return false
   1755 }
   1756 
   1757 func TestNaN(t *testing.T) {
   1758 	f64 := NaN()
   1759 	if f64 == f64 {
   1760 		t.Fatalf("NaN() returns %g, expected NaN", f64)
   1761 	}
   1762 	f32 := float32(f64)
   1763 	if f32 == f32 {
   1764 		t.Fatalf("float32(NaN()) is %g, expected NaN", f32)
   1765 	}
   1766 }
   1767 
   1768 func TestAcos(t *testing.T) {
   1769 	for i := 0; i < len(vf); i++ {
   1770 		a := vf[i] / 10
   1771 		if f := Acos(a); !close(acos[i], f) {
   1772 			t.Errorf("Acos(%g) = %g, want %g", a, f, acos[i])
   1773 		}
   1774 	}
   1775 	for i := 0; i < len(vfacosSC); i++ {
   1776 		if f := Acos(vfacosSC[i]); !alike(acosSC[i], f) {
   1777 			t.Errorf("Acos(%g) = %g, want %g", vfacosSC[i], f, acosSC[i])
   1778 		}
   1779 	}
   1780 }
   1781 
   1782 func TestAcosh(t *testing.T) {
   1783 	for i := 0; i < len(vf); i++ {
   1784 		a := 1 + Abs(vf[i])
   1785 		if f := Acosh(a); !veryclose(acosh[i], f) {
   1786 			t.Errorf("Acosh(%g) = %g, want %g", a, f, acosh[i])
   1787 		}
   1788 	}
   1789 	for i := 0; i < len(vfacoshSC); i++ {
   1790 		if f := Acosh(vfacoshSC[i]); !alike(acoshSC[i], f) {
   1791 			t.Errorf("Acosh(%g) = %g, want %g", vfacoshSC[i], f, acoshSC[i])
   1792 		}
   1793 	}
   1794 }
   1795 
   1796 func TestAsin(t *testing.T) {
   1797 	for i := 0; i < len(vf); i++ {
   1798 		a := vf[i] / 10
   1799 		if f := Asin(a); !veryclose(asin[i], f) {
   1800 			t.Errorf("Asin(%g) = %g, want %g", a, f, asin[i])
   1801 		}
   1802 	}
   1803 	for i := 0; i < len(vfasinSC); i++ {
   1804 		if f := Asin(vfasinSC[i]); !alike(asinSC[i], f) {
   1805 			t.Errorf("Asin(%g) = %g, want %g", vfasinSC[i], f, asinSC[i])
   1806 		}
   1807 	}
   1808 }
   1809 
   1810 func TestAsinh(t *testing.T) {
   1811 	for i := 0; i < len(vf); i++ {
   1812 		if f := Asinh(vf[i]); !veryclose(asinh[i], f) {
   1813 			t.Errorf("Asinh(%g) = %g, want %g", vf[i], f, asinh[i])
   1814 		}
   1815 	}
   1816 	for i := 0; i < len(vfasinhSC); i++ {
   1817 		if f := Asinh(vfasinhSC[i]); !alike(asinhSC[i], f) {
   1818 			t.Errorf("Asinh(%g) = %g, want %g", vfasinhSC[i], f, asinhSC[i])
   1819 		}
   1820 	}
   1821 }
   1822 
   1823 func TestAtan(t *testing.T) {
   1824 	for i := 0; i < len(vf); i++ {
   1825 		if f := Atan(vf[i]); !veryclose(atan[i], f) {
   1826 			t.Errorf("Atan(%g) = %g, want %g", vf[i], f, atan[i])
   1827 		}
   1828 	}
   1829 	for i := 0; i < len(vfatanSC); i++ {
   1830 		if f := Atan(vfatanSC[i]); !alike(atanSC[i], f) {
   1831 			t.Errorf("Atan(%g) = %g, want %g", vfatanSC[i], f, atanSC[i])
   1832 		}
   1833 	}
   1834 }
   1835 
   1836 func TestAtanh(t *testing.T) {
   1837 	for i := 0; i < len(vf); i++ {
   1838 		a := vf[i] / 10
   1839 		if f := Atanh(a); !veryclose(atanh[i], f) {
   1840 			t.Errorf("Atanh(%g) = %g, want %g", a, f, atanh[i])
   1841 		}
   1842 	}
   1843 	for i := 0; i < len(vfatanhSC); i++ {
   1844 		if f := Atanh(vfatanhSC[i]); !alike(atanhSC[i], f) {
   1845 			t.Errorf("Atanh(%g) = %g, want %g", vfatanhSC[i], f, atanhSC[i])
   1846 		}
   1847 	}
   1848 }
   1849 
   1850 func TestAtan2(t *testing.T) {
   1851 	for i := 0; i < len(vf); i++ {
   1852 		if f := Atan2(10, vf[i]); !veryclose(atan2[i], f) {
   1853 			t.Errorf("Atan2(10, %g) = %g, want %g", vf[i], f, atan2[i])
   1854 		}
   1855 	}
   1856 	for i := 0; i < len(vfatan2SC); i++ {
   1857 		if f := Atan2(vfatan2SC[i][0], vfatan2SC[i][1]); !alike(atan2SC[i], f) {
   1858 			t.Errorf("Atan2(%g, %g) = %g, want %g", vfatan2SC[i][0], vfatan2SC[i][1], f, atan2SC[i])
   1859 		}
   1860 	}
   1861 }
   1862 
   1863 func TestCbrt(t *testing.T) {
   1864 	for i := 0; i < len(vf); i++ {
   1865 		if f := Cbrt(vf[i]); !veryclose(cbrt[i], f) {
   1866 			t.Errorf("Cbrt(%g) = %g, want %g", vf[i], f, cbrt[i])
   1867 		}
   1868 	}
   1869 	for i := 0; i < len(vfcbrtSC); i++ {
   1870 		if f := Cbrt(vfcbrtSC[i]); !alike(cbrtSC[i], f) {
   1871 			t.Errorf("Cbrt(%g) = %g, want %g", vfcbrtSC[i], f, cbrtSC[i])
   1872 		}
   1873 	}
   1874 }
   1875 
   1876 func TestCeil(t *testing.T) {
   1877 	for i := 0; i < len(vf); i++ {
   1878 		if f := Ceil(vf[i]); ceil[i] != f {
   1879 			t.Errorf("Ceil(%g) = %g, want %g", vf[i], f, ceil[i])
   1880 		}
   1881 	}
   1882 	for i := 0; i < len(vfceilSC); i++ {
   1883 		if f := Ceil(vfceilSC[i]); !alike(ceilSC[i], f) {
   1884 			t.Errorf("Ceil(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
   1885 		}
   1886 	}
   1887 }
   1888 
   1889 func TestCopysign(t *testing.T) {
   1890 	for i := 0; i < len(vf); i++ {
   1891 		if f := Copysign(vf[i], -1); copysign[i] != f {
   1892 			t.Errorf("Copysign(%g, -1) = %g, want %g", vf[i], f, copysign[i])
   1893 		}
   1894 	}
   1895 	for i := 0; i < len(vf); i++ {
   1896 		if f := Copysign(vf[i], 1); -copysign[i] != f {
   1897 			t.Errorf("Copysign(%g, 1) = %g, want %g", vf[i], f, -copysign[i])
   1898 		}
   1899 	}
   1900 	for i := 0; i < len(vfcopysignSC); i++ {
   1901 		if f := Copysign(vfcopysignSC[i], -1); !alike(copysignSC[i], f) {
   1902 			t.Errorf("Copysign(%g, -1) = %g, want %g", vfcopysignSC[i], f, copysignSC[i])
   1903 		}
   1904 	}
   1905 }
   1906 
   1907 func TestCos(t *testing.T) {
   1908 	for i := 0; i < len(vf); i++ {
   1909 		if f := Cos(vf[i]); !veryclose(cos[i], f) {
   1910 			t.Errorf("Cos(%g) = %g, want %g", vf[i], f, cos[i])
   1911 		}
   1912 	}
   1913 	for i := 0; i < len(vfcosSC); i++ {
   1914 		if f := Cos(vfcosSC[i]); !alike(cosSC[i], f) {
   1915 			t.Errorf("Cos(%g) = %g, want %g", vfcosSC[i], f, cosSC[i])
   1916 		}
   1917 	}
   1918 }
   1919 
   1920 func TestCosh(t *testing.T) {
   1921 	for i := 0; i < len(vf); i++ {
   1922 		if f := Cosh(vf[i]); !close(cosh[i], f) {
   1923 			t.Errorf("Cosh(%g) = %g, want %g", vf[i], f, cosh[i])
   1924 		}
   1925 	}
   1926 	for i := 0; i < len(vfcoshSC); i++ {
   1927 		if f := Cosh(vfcoshSC[i]); !alike(coshSC[i], f) {
   1928 			t.Errorf("Cosh(%g) = %g, want %g", vfcoshSC[i], f, coshSC[i])
   1929 		}
   1930 	}
   1931 }
   1932 
   1933 func TestErf(t *testing.T) {
   1934 	for i := 0; i < len(vf); i++ {
   1935 		a := vf[i] / 10
   1936 		if f := Erf(a); !veryclose(erf[i], f) {
   1937 			t.Errorf("Erf(%g) = %g, want %g", a, f, erf[i])
   1938 		}
   1939 	}
   1940 	for i := 0; i < len(vferfSC); i++ {
   1941 		if f := Erf(vferfSC[i]); !alike(erfSC[i], f) {
   1942 			t.Errorf("Erf(%g) = %g, want %g", vferfSC[i], f, erfSC[i])
   1943 		}
   1944 	}
   1945 }
   1946 
   1947 func TestErfc(t *testing.T) {
   1948 	for i := 0; i < len(vf); i++ {
   1949 		a := vf[i] / 10
   1950 		if f := Erfc(a); !veryclose(erfc[i], f) {
   1951 			t.Errorf("Erfc(%g) = %g, want %g", a, f, erfc[i])
   1952 		}
   1953 	}
   1954 	for i := 0; i < len(vferfcSC); i++ {
   1955 		if f := Erfc(vferfcSC[i]); !alike(erfcSC[i], f) {
   1956 			t.Errorf("Erfc(%g) = %g, want %g", vferfcSC[i], f, erfcSC[i])
   1957 		}
   1958 	}
   1959 }
   1960 
   1961 func TestExp(t *testing.T) {
   1962 	testExp(t, Exp, "Exp")
   1963 	testExp(t, ExpGo, "ExpGo")
   1964 }
   1965 
   1966 func testExp(t *testing.T, Exp func(float64) float64, name string) {
   1967 	for i := 0; i < len(vf); i++ {
   1968 		if f := Exp(vf[i]); !close(exp[i], f) {
   1969 			t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp[i])
   1970 		}
   1971 	}
   1972 	for i := 0; i < len(vfexpSC); i++ {
   1973 		if f := Exp(vfexpSC[i]); !alike(expSC[i], f) {
   1974 			t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
   1975 		}
   1976 	}
   1977 }
   1978 
   1979 func TestExpm1(t *testing.T) {
   1980 	for i := 0; i < len(vf); i++ {
   1981 		a := vf[i] / 100
   1982 		if f := Expm1(a); !veryclose(expm1[i], f) {
   1983 			t.Errorf("Expm1(%g) = %g, want %g", a, f, expm1[i])
   1984 		}
   1985 	}
   1986 	for i := 0; i < len(vfexpm1SC); i++ {
   1987 		if f := Expm1(vfexpm1SC[i]); !alike(expm1SC[i], f) {
   1988 			t.Errorf("Expm1(%g) = %g, want %g", vfexpm1SC[i], f, expm1SC[i])
   1989 		}
   1990 	}
   1991 }
   1992 
   1993 func TestExp2(t *testing.T) {
   1994 	testExp2(t, Exp2, "Exp2")
   1995 	testExp2(t, Exp2Go, "Exp2Go")
   1996 }
   1997 
   1998 func testExp2(t *testing.T, Exp2 func(float64) float64, name string) {
   1999 	for i := 0; i < len(vf); i++ {
   2000 		if f := Exp2(vf[i]); !close(exp2[i], f) {
   2001 			t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp2[i])
   2002 		}
   2003 	}
   2004 	for i := 0; i < len(vfexpSC); i++ {
   2005 		if f := Exp2(vfexpSC[i]); !alike(expSC[i], f) {
   2006 			t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
   2007 		}
   2008 	}
   2009 	for n := -1074; n < 1024; n++ {
   2010 		f := Exp2(float64(n))
   2011 		vf := Ldexp(1, n)
   2012 		if f != vf {
   2013 			t.Errorf("%s(%d) = %g, want %g", name, n, f, vf)
   2014 		}
   2015 	}
   2016 }
   2017 
   2018 func TestAbs(t *testing.T) {
   2019 	for i := 0; i < len(vf); i++ {
   2020 		if f := Abs(vf[i]); fabs[i] != f {
   2021 			t.Errorf("Abs(%g) = %g, want %g", vf[i], f, fabs[i])
   2022 		}
   2023 	}
   2024 	for i := 0; i < len(vffabsSC); i++ {
   2025 		if f := Abs(vffabsSC[i]); !alike(fabsSC[i], f) {
   2026 			t.Errorf("Abs(%g) = %g, want %g", vffabsSC[i], f, fabsSC[i])
   2027 		}
   2028 	}
   2029 }
   2030 
   2031 func TestDim(t *testing.T) {
   2032 	for i := 0; i < len(vf); i++ {
   2033 		if f := Dim(vf[i], 0); fdim[i] != f {
   2034 			t.Errorf("Dim(%g, %g) = %g, want %g", vf[i], 0.0, f, fdim[i])
   2035 		}
   2036 	}
   2037 	for i := 0; i < len(vffdimSC); i++ {
   2038 		if f := Dim(vffdimSC[i][0], vffdimSC[i][1]); !alike(fdimSC[i], f) {
   2039 			t.Errorf("Dim(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fdimSC[i])
   2040 		}
   2041 	}
   2042 	for i := 0; i < len(vffdim2SC); i++ {
   2043 		if f := Dim(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fdimSC[i], f) {
   2044 			t.Errorf("Dim(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fdimSC[i])
   2045 		}
   2046 	}
   2047 }
   2048 
   2049 func TestFloor(t *testing.T) {
   2050 	for i := 0; i < len(vf); i++ {
   2051 		if f := Floor(vf[i]); floor[i] != f {
   2052 			t.Errorf("Floor(%g) = %g, want %g", vf[i], f, floor[i])
   2053 		}
   2054 	}
   2055 	for i := 0; i < len(vfceilSC); i++ {
   2056 		if f := Floor(vfceilSC[i]); !alike(ceilSC[i], f) {
   2057 			t.Errorf("Floor(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
   2058 		}
   2059 	}
   2060 }
   2061 
   2062 func TestMax(t *testing.T) {
   2063 	for i := 0; i < len(vf); i++ {
   2064 		if f := Max(vf[i], ceil[i]); ceil[i] != f {
   2065 			t.Errorf("Max(%g, %g) = %g, want %g", vf[i], ceil[i], f, ceil[i])
   2066 		}
   2067 	}
   2068 	for i := 0; i < len(vffdimSC); i++ {
   2069 		if f := Max(vffdimSC[i][0], vffdimSC[i][1]); !alike(fmaxSC[i], f) {
   2070 			t.Errorf("Max(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fmaxSC[i])
   2071 		}
   2072 	}
   2073 	for i := 0; i < len(vffdim2SC); i++ {
   2074 		if f := Max(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fmaxSC[i], f) {
   2075 			t.Errorf("Max(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fmaxSC[i])
   2076 		}
   2077 	}
   2078 }
   2079 
   2080 func TestMin(t *testing.T) {
   2081 	for i := 0; i < len(vf); i++ {
   2082 		if f := Min(vf[i], floor[i]); floor[i] != f {
   2083 			t.Errorf("Min(%g, %g) = %g, want %g", vf[i], floor[i], f, floor[i])
   2084 		}
   2085 	}
   2086 	for i := 0; i < len(vffdimSC); i++ {
   2087 		if f := Min(vffdimSC[i][0], vffdimSC[i][1]); !alike(fminSC[i], f) {
   2088 			t.Errorf("Min(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fminSC[i])
   2089 		}
   2090 	}
   2091 	for i := 0; i < len(vffdim2SC); i++ {
   2092 		if f := Min(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fminSC[i], f) {
   2093 			t.Errorf("Min(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fminSC[i])
   2094 		}
   2095 	}
   2096 }
   2097 
   2098 func TestMod(t *testing.T) {
   2099 	for i := 0; i < len(vf); i++ {
   2100 		if f := Mod(10, vf[i]); fmod[i] != f {
   2101 			t.Errorf("Mod(10, %g) = %g, want %g", vf[i], f, fmod[i])
   2102 		}
   2103 	}
   2104 	for i := 0; i < len(vffmodSC); i++ {
   2105 		if f := Mod(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
   2106 			t.Errorf("Mod(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
   2107 		}
   2108 	}
   2109 }
   2110 
   2111 func TestFrexp(t *testing.T) {
   2112 	for i := 0; i < len(vf); i++ {
   2113 		if f, j := Frexp(vf[i]); !veryclose(frexp[i].f, f) || frexp[i].i != j {
   2114 			t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vf[i], f, j, frexp[i].f, frexp[i].i)
   2115 		}
   2116 	}
   2117 	for i := 0; i < len(vffrexpSC); i++ {
   2118 		if f, j := Frexp(vffrexpSC[i]); !alike(frexpSC[i].f, f) || frexpSC[i].i != j {
   2119 			t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpSC[i], f, j, frexpSC[i].f, frexpSC[i].i)
   2120 		}
   2121 	}
   2122 	for i := 0; i < len(vffrexpBC); i++ {
   2123 		if f, j := Frexp(vffrexpBC[i]); !alike(frexpBC[i].f, f) || frexpBC[i].i != j {
   2124 			t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpBC[i], f, j, frexpBC[i].f, frexpBC[i].i)
   2125 		}
   2126 	}
   2127 }
   2128 
   2129 func TestGamma(t *testing.T) {
   2130 	for i := 0; i < len(vf); i++ {
   2131 		if f := Gamma(vf[i]); !close(gamma[i], f) {
   2132 			t.Errorf("Gamma(%g) = %g, want %g", vf[i], f, gamma[i])
   2133 		}
   2134 	}
   2135 	for i := 0; i < len(vfgammaSC); i++ {
   2136 		if f := Gamma(vfgammaSC[i]); !alike(gammaSC[i], f) {
   2137 			t.Errorf("Gamma(%g) = %g, want %g", vfgammaSC[i], f, gammaSC[i])
   2138 		}
   2139 	}
   2140 }
   2141 
   2142 func TestHypot(t *testing.T) {
   2143 	for i := 0; i < len(vf); i++ {
   2144 		a := Abs(1e200 * tanh[i] * Sqrt(2))
   2145 		if f := Hypot(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
   2146 			t.Errorf("Hypot(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
   2147 		}
   2148 	}
   2149 	for i := 0; i < len(vfhypotSC); i++ {
   2150 		if f := Hypot(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
   2151 			t.Errorf("Hypot(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
   2152 		}
   2153 	}
   2154 }
   2155 
   2156 func TestHypotGo(t *testing.T) {
   2157 	for i := 0; i < len(vf); i++ {
   2158 		a := Abs(1e200 * tanh[i] * Sqrt(2))
   2159 		if f := HypotGo(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
   2160 			t.Errorf("HypotGo(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
   2161 		}
   2162 	}
   2163 	for i := 0; i < len(vfhypotSC); i++ {
   2164 		if f := HypotGo(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
   2165 			t.Errorf("HypotGo(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
   2166 		}
   2167 	}
   2168 }
   2169 
   2170 func TestIlogb(t *testing.T) {
   2171 	for i := 0; i < len(vf); i++ {
   2172 		a := frexp[i].i - 1 // adjust because fr in the interval [, 1)
   2173 		if e := Ilogb(vf[i]); a != e {
   2174 			t.Errorf("Ilogb(%g) = %d, want %d", vf[i], e, a)
   2175 		}
   2176 	}
   2177 	for i := 0; i < len(vflogbSC); i++ {
   2178 		if e := Ilogb(vflogbSC[i]); ilogbSC[i] != e {
   2179 			t.Errorf("Ilogb(%g) = %d, want %d", vflogbSC[i], e, ilogbSC[i])
   2180 		}
   2181 	}
   2182 	for i := 0; i < len(vffrexpBC); i++ {
   2183 		if e := Ilogb(vffrexpBC[i]); int(logbBC[i]) != e {
   2184 			t.Errorf("Ilogb(%g) = %d, want %d", vffrexpBC[i], e, int(logbBC[i]))
   2185 		}
   2186 	}
   2187 }
   2188 
   2189 func TestJ0(t *testing.T) {
   2190 	for i := 0; i < len(vf); i++ {
   2191 		if f := J0(vf[i]); !soclose(j0[i], f, 4e-14) {
   2192 			t.Errorf("J0(%g) = %g, want %g", vf[i], f, j0[i])
   2193 		}
   2194 	}
   2195 	for i := 0; i < len(vfj0SC); i++ {
   2196 		if f := J0(vfj0SC[i]); !alike(j0SC[i], f) {
   2197 			t.Errorf("J0(%g) = %g, want %g", vfj0SC[i], f, j0SC[i])
   2198 		}
   2199 	}
   2200 }
   2201 
   2202 func TestJ1(t *testing.T) {
   2203 	for i := 0; i < len(vf); i++ {
   2204 		if f := J1(vf[i]); !close(j1[i], f) {
   2205 			t.Errorf("J1(%g) = %g, want %g", vf[i], f, j1[i])
   2206 		}
   2207 	}
   2208 	for i := 0; i < len(vfj0SC); i++ {
   2209 		if f := J1(vfj0SC[i]); !alike(j1SC[i], f) {
   2210 			t.Errorf("J1(%g) = %g, want %g", vfj0SC[i], f, j1SC[i])
   2211 		}
   2212 	}
   2213 }
   2214 
   2215 func TestJn(t *testing.T) {
   2216 	for i := 0; i < len(vf); i++ {
   2217 		if f := Jn(2, vf[i]); !close(j2[i], f) {
   2218 			t.Errorf("Jn(2, %g) = %g, want %g", vf[i], f, j2[i])
   2219 		}
   2220 		if f := Jn(-3, vf[i]); !close(jM3[i], f) {
   2221 			t.Errorf("Jn(-3, %g) = %g, want %g", vf[i], f, jM3[i])
   2222 		}
   2223 	}
   2224 	for i := 0; i < len(vfj0SC); i++ {
   2225 		if f := Jn(2, vfj0SC[i]); !alike(j2SC[i], f) {
   2226 			t.Errorf("Jn(2, %g) = %g, want %g", vfj0SC[i], f, j2SC[i])
   2227 		}
   2228 		if f := Jn(-3, vfj0SC[i]); !alike(jM3SC[i], f) {
   2229 			t.Errorf("Jn(-3, %g) = %g, want %g", vfj0SC[i], f, jM3SC[i])
   2230 		}
   2231 	}
   2232 }
   2233 
   2234 func TestLdexp(t *testing.T) {
   2235 	for i := 0; i < len(vf); i++ {
   2236 		if f := Ldexp(frexp[i].f, frexp[i].i); !veryclose(vf[i], f) {
   2237 			t.Errorf("Ldexp(%g, %d) = %g, want %g", frexp[i].f, frexp[i].i, f, vf[i])
   2238 		}
   2239 	}
   2240 	for i := 0; i < len(vffrexpSC); i++ {
   2241 		if f := Ldexp(frexpSC[i].f, frexpSC[i].i); !alike(vffrexpSC[i], f) {
   2242 			t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpSC[i].f, frexpSC[i].i, f, vffrexpSC[i])
   2243 		}
   2244 	}
   2245 	for i := 0; i < len(vfldexpSC); i++ {
   2246 		if f := Ldexp(vfldexpSC[i].f, vfldexpSC[i].i); !alike(ldexpSC[i], f) {
   2247 			t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpSC[i].f, vfldexpSC[i].i, f, ldexpSC[i])
   2248 		}
   2249 	}
   2250 	for i := 0; i < len(vffrexpBC); i++ {
   2251 		if f := Ldexp(frexpBC[i].f, frexpBC[i].i); !alike(vffrexpBC[i], f) {
   2252 			t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpBC[i].f, frexpBC[i].i, f, vffrexpBC[i])
   2253 		}
   2254 	}
   2255 	for i := 0; i < len(vfldexpBC); i++ {
   2256 		if f := Ldexp(vfldexpBC[i].f, vfldexpBC[i].i); !alike(ldexpBC[i], f) {
   2257 			t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpBC[i].f, vfldexpBC[i].i, f, ldexpBC[i])
   2258 		}
   2259 	}
   2260 }
   2261 
   2262 func TestLgamma(t *testing.T) {
   2263 	for i := 0; i < len(vf); i++ {
   2264 		if f, s := Lgamma(vf[i]); !close(lgamma[i].f, f) || lgamma[i].i != s {
   2265 			t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vf[i], f, s, lgamma[i].f, lgamma[i].i)
   2266 		}
   2267 	}
   2268 	for i := 0; i < len(vflgammaSC); i++ {
   2269 		if f, s := Lgamma(vflgammaSC[i]); !alike(lgammaSC[i].f, f) || lgammaSC[i].i != s {
   2270 			t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vflgammaSC[i], f, s, lgammaSC[i].f, lgammaSC[i].i)
   2271 		}
   2272 	}
   2273 }
   2274 
   2275 func TestLog(t *testing.T) {
   2276 	for i := 0; i < len(vf); i++ {
   2277 		a := Abs(vf[i])
   2278 		if f := Log(a); log[i] != f {
   2279 			t.Errorf("Log(%g) = %g, want %g", a, f, log[i])
   2280 		}
   2281 	}
   2282 	if f := Log(10); f != Ln10 {
   2283 		t.Errorf("Log(%g) = %g, want %g", 10.0, f, Ln10)
   2284 	}
   2285 	for i := 0; i < len(vflogSC); i++ {
   2286 		if f := Log(vflogSC[i]); !alike(logSC[i], f) {
   2287 			t.Errorf("Log(%g) = %g, want %g", vflogSC[i], f, logSC[i])
   2288 		}
   2289 	}
   2290 }
   2291 
   2292 func TestLogb(t *testing.T) {
   2293 	for i := 0; i < len(vf); i++ {
   2294 		if f := Logb(vf[i]); logb[i] != f {
   2295 			t.Errorf("Logb(%g) = %g, want %g", vf[i], f, logb[i])
   2296 		}
   2297 	}
   2298 	for i := 0; i < len(vflogbSC); i++ {
   2299 		if f := Logb(vflogbSC[i]); !alike(logbSC[i], f) {
   2300 			t.Errorf("Logb(%g) = %g, want %g", vflogbSC[i], f, logbSC[i])
   2301 		}
   2302 	}
   2303 	for i := 0; i < len(vffrexpBC); i++ {
   2304 		if f := Logb(vffrexpBC[i]); !alike(logbBC[i], f) {
   2305 			t.Errorf("Logb(%g) = %g, want %g", vffrexpBC[i], f, logbBC[i])
   2306 		}
   2307 	}
   2308 }
   2309 
   2310 func TestLog10(t *testing.T) {
   2311 	for i := 0; i < len(vf); i++ {
   2312 		a := Abs(vf[i])
   2313 		if f := Log10(a); !veryclose(log10[i], f) {
   2314 			t.Errorf("Log10(%g) = %g, want %g", a, f, log10[i])
   2315 		}
   2316 	}
   2317 	if f := Log10(E); f != Log10E {
   2318 		t.Errorf("Log10(%g) = %g, want %g", E, f, Log10E)
   2319 	}
   2320 	for i := 0; i < len(vflogSC); i++ {
   2321 		if f := Log10(vflogSC[i]); !alike(logSC[i], f) {
   2322 			t.Errorf("Log10(%g) = %g, want %g", vflogSC[i], f, logSC[i])
   2323 		}
   2324 	}
   2325 }
   2326 
   2327 func TestLog1p(t *testing.T) {
   2328 	for i := 0; i < len(vf); i++ {
   2329 		a := vf[i] / 100
   2330 		if f := Log1p(a); !veryclose(log1p[i], f) {
   2331 			t.Errorf("Log1p(%g) = %g, want %g", a, f, log1p[i])
   2332 		}
   2333 	}
   2334 	a := 9.0
   2335 	if f := Log1p(a); f != Ln10 {
   2336 		t.Errorf("Log1p(%g) = %g, want %g", a, f, Ln10)
   2337 	}
   2338 	for i := 0; i < len(vflogSC); i++ {
   2339 		if f := Log1p(vflog1pSC[i]); !alike(log1pSC[i], f) {
   2340 			t.Errorf("Log1p(%g) = %g, want %g", vflog1pSC[i], f, log1pSC[i])
   2341 		}
   2342 	}
   2343 }
   2344 
   2345 func TestLog2(t *testing.T) {
   2346 	for i := 0; i < len(vf); i++ {
   2347 		a := Abs(vf[i])
   2348 		if f := Log2(a); !veryclose(log2[i], f) {
   2349 			t.Errorf("Log2(%g) = %g, want %g", a, f, log2[i])
   2350 		}
   2351 	}
   2352 	if f := Log2(E); f != Log2E {
   2353 		t.Errorf("Log2(%g) = %g, want %g", E, f, Log2E)
   2354 	}
   2355 	for i := 0; i < len(vflogSC); i++ {
   2356 		if f := Log2(vflogSC[i]); !alike(logSC[i], f) {
   2357 			t.Errorf("Log2(%g) = %g, want %g", vflogSC[i], f, logSC[i])
   2358 		}
   2359 	}
   2360 	for i := -1074; i <= 1023; i++ {
   2361 		f := Ldexp(1, i)
   2362 		l := Log2(f)
   2363 		if l != float64(i) {
   2364 			t.Errorf("Log2(2**%d) = %g, want %d", i, l, i)
   2365 		}
   2366 	}
   2367 }
   2368 
   2369 func TestModf(t *testing.T) {
   2370 	for i := 0; i < len(vf); i++ {
   2371 		if f, g := Modf(vf[i]); !veryclose(modf[i][0], f) || !veryclose(modf[i][1], g) {
   2372 			t.Errorf("Modf(%g) = %g, %g, want %g, %g", vf[i], f, g, modf[i][0], modf[i][1])
   2373 		}
   2374 	}
   2375 	for i := 0; i < len(vfmodfSC); i++ {
   2376 		if f, g := Modf(vfmodfSC[i]); !alike(modfSC[i][0], f) || !alike(modfSC[i][1], g) {
   2377 			t.Errorf("Modf(%g) = %g, %g, want %g, %g", vfmodfSC[i], f, g, modfSC[i][0], modfSC[i][1])
   2378 		}
   2379 	}
   2380 }
   2381 
   2382 func TestNextafter32(t *testing.T) {
   2383 	for i := 0; i < len(vf); i++ {
   2384 		vfi := float32(vf[i])
   2385 		if f := Nextafter32(vfi, 10); nextafter32[i] != f {
   2386 			t.Errorf("Nextafter32(%g, %g) = %g want %g", vfi, 10.0, f, nextafter32[i])
   2387 		}
   2388 	}
   2389 	for i := 0; i < len(vfnextafter32SC); i++ {
   2390 		if f := Nextafter32(vfnextafter32SC[i][0], vfnextafter32SC[i][1]); !alike(float64(nextafter32SC[i]), float64(f)) {
   2391 			t.Errorf("Nextafter32(%g, %g) = %g want %g", vfnextafter32SC[i][0], vfnextafter32SC[i][1], f, nextafter32SC[i])
   2392 		}
   2393 	}
   2394 }
   2395 
   2396 func TestNextafter64(t *testing.T) {
   2397 	for i := 0; i < len(vf); i++ {
   2398 		if f := Nextafter(vf[i], 10); nextafter64[i] != f {
   2399 			t.Errorf("Nextafter64(%g, %g) = %g want %g", vf[i], 10.0, f, nextafter64[i])
   2400 		}
   2401 	}
   2402 	for i := 0; i < len(vfnextafter64SC); i++ {
   2403 		if f := Nextafter(vfnextafter64SC[i][0], vfnextafter64SC[i][1]); !alike(nextafter64SC[i], f) {
   2404 			t.Errorf("Nextafter64(%g, %g) = %g want %g", vfnextafter64SC[i][0], vfnextafter64SC[i][1], f, nextafter64SC[i])
   2405 		}
   2406 	}
   2407 }
   2408 
   2409 func TestPow(t *testing.T) {
   2410 	for i := 0; i < len(vf); i++ {
   2411 		if f := Pow(10, vf[i]); !close(pow[i], f) {
   2412 			t.Errorf("Pow(10, %g) = %g, want %g", vf[i], f, pow[i])
   2413 		}
   2414 	}
   2415 	for i := 0; i < len(vfpowSC); i++ {
   2416 		if f := Pow(vfpowSC[i][0], vfpowSC[i][1]); !alike(powSC[i], f) {
   2417 			t.Errorf("Pow(%g, %g) = %g, want %g", vfpowSC[i][0], vfpowSC[i][1], f, powSC[i])
   2418 		}
   2419 	}
   2420 }
   2421 
   2422 func TestPow10(t *testing.T) {
   2423 	for i := 0; i < len(vfpow10SC); i++ {
   2424 		if f := Pow10(vfpow10SC[i]); !alike(pow10SC[i], f) {
   2425 			t.Errorf("Pow10(%d) = %g, want %g", vfpow10SC[i], f, pow10SC[i])
   2426 		}
   2427 	}
   2428 }
   2429 
   2430 func TestRemainder(t *testing.T) {
   2431 	for i := 0; i < len(vf); i++ {
   2432 		if f := Remainder(10, vf[i]); remainder[i] != f {
   2433 			t.Errorf("Remainder(10, %g) = %g, want %g", vf[i], f, remainder[i])
   2434 		}
   2435 	}
   2436 	for i := 0; i < len(vffmodSC); i++ {
   2437 		if f := Remainder(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
   2438 			t.Errorf("Remainder(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
   2439 		}
   2440 	}
   2441 }
   2442 
   2443 func TestSignbit(t *testing.T) {
   2444 	for i := 0; i < len(vf); i++ {
   2445 		if f := Signbit(vf[i]); signbit[i] != f {
   2446 			t.Errorf("Signbit(%g) = %t, want %t", vf[i], f, signbit[i])
   2447 		}
   2448 	}
   2449 	for i := 0; i < len(vfsignbitSC); i++ {
   2450 		if f := Signbit(vfsignbitSC[i]); signbitSC[i] != f {
   2451 			t.Errorf("Signbit(%g) = %t, want %t", vfsignbitSC[i], f, signbitSC[i])
   2452 		}
   2453 	}
   2454 }
   2455 func TestSin(t *testing.T) {
   2456 	for i := 0; i < len(vf); i++ {
   2457 		if f := Sin(vf[i]); !veryclose(sin[i], f) {
   2458 			t.Errorf("Sin(%g) = %g, want %g", vf[i], f, sin[i])
   2459 		}
   2460 	}
   2461 	for i := 0; i < len(vfsinSC); i++ {
   2462 		if f := Sin(vfsinSC[i]); !alike(sinSC[i], f) {
   2463 			t.Errorf("Sin(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
   2464 		}
   2465 	}
   2466 }
   2467 
   2468 func TestSincos(t *testing.T) {
   2469 	for i := 0; i < len(vf); i++ {
   2470 		if s, c := Sincos(vf[i]); !veryclose(sin[i], s) || !veryclose(cos[i], c) {
   2471 			t.Errorf("Sincos(%g) = %g, %g want %g, %g", vf[i], s, c, sin[i], cos[i])
   2472 		}
   2473 	}
   2474 }
   2475 
   2476 func TestSinh(t *testing.T) {
   2477 	for i := 0; i < len(vf); i++ {
   2478 		if f := Sinh(vf[i]); !close(sinh[i], f) {
   2479 			t.Errorf("Sinh(%g) = %g, want %g", vf[i], f, sinh[i])
   2480 		}
   2481 	}
   2482 	for i := 0; i < len(vfsinhSC); i++ {
   2483 		if f := Sinh(vfsinhSC[i]); !alike(sinhSC[i], f) {
   2484 			t.Errorf("Sinh(%g) = %g, want %g", vfsinhSC[i], f, sinhSC[i])
   2485 		}
   2486 	}
   2487 }
   2488 
   2489 func TestSqrt(t *testing.T) {
   2490 	for i := 0; i < len(vf); i++ {
   2491 		a := Abs(vf[i])
   2492 		if f := SqrtGo(a); sqrt[i] != f {
   2493 			t.Errorf("SqrtGo(%g) = %g, want %g", a, f, sqrt[i])
   2494 		}
   2495 		a = Abs(vf[i])
   2496 		if f := Sqrt(a); sqrt[i] != f {
   2497 			t.Errorf("Sqrt(%g) = %g, want %g", a, f, sqrt[i])
   2498 		}
   2499 	}
   2500 	for i := 0; i < len(vfsqrtSC); i++ {
   2501 		if f := SqrtGo(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
   2502 			t.Errorf("SqrtGo(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
   2503 		}
   2504 		if f := Sqrt(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
   2505 			t.Errorf("Sqrt(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
   2506 		}
   2507 	}
   2508 }
   2509 
   2510 func TestTan(t *testing.T) {
   2511 	for i := 0; i < len(vf); i++ {
   2512 		if f := Tan(vf[i]); !veryclose(tan[i], f) {
   2513 			t.Errorf("Tan(%g) = %g, want %g", vf[i], f, tan[i])
   2514 		}
   2515 	}
   2516 	// same special cases as Sin
   2517 	for i := 0; i < len(vfsinSC); i++ {
   2518 		if f := Tan(vfsinSC[i]); !alike(sinSC[i], f) {
   2519 			t.Errorf("Tan(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
   2520 		}
   2521 	}
   2522 }
   2523 
   2524 func TestTanh(t *testing.T) {
   2525 	for i := 0; i < len(vf); i++ {
   2526 		if f := Tanh(vf[i]); !veryclose(tanh[i], f) {
   2527 			t.Errorf("Tanh(%g) = %g, want %g", vf[i], f, tanh[i])
   2528 		}
   2529 	}
   2530 	for i := 0; i < len(vftanhSC); i++ {
   2531 		if f := Tanh(vftanhSC[i]); !alike(tanhSC[i], f) {
   2532 			t.Errorf("Tanh(%g) = %g, want %g", vftanhSC[i], f, tanhSC[i])
   2533 		}
   2534 	}
   2535 }
   2536 
   2537 func TestTrunc(t *testing.T) {
   2538 	for i := 0; i < len(vf); i++ {
   2539 		if f := Trunc(vf[i]); trunc[i] != f {
   2540 			t.Errorf("Trunc(%g) = %g, want %g", vf[i], f, trunc[i])
   2541 		}
   2542 	}
   2543 	for i := 0; i < len(vfceilSC); i++ {
   2544 		if f := Trunc(vfceilSC[i]); !alike(ceilSC[i], f) {
   2545 			t.Errorf("Trunc(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
   2546 		}
   2547 	}
   2548 }
   2549 
   2550 func TestY0(t *testing.T) {
   2551 	for i := 0; i < len(vf); i++ {
   2552 		a := Abs(vf[i])
   2553 		if f := Y0(a); !close(y0[i], f) {
   2554 			t.Errorf("Y0(%g) = %g, want %g", a, f, y0[i])
   2555 		}
   2556 	}
   2557 	for i := 0; i < len(vfy0SC); i++ {
   2558 		if f := Y0(vfy0SC[i]); !alike(y0SC[i], f) {
   2559 			t.Errorf("Y0(%g) = %g, want %g", vfy0SC[i], f, y0SC[i])
   2560 		}
   2561 	}
   2562 }
   2563 
   2564 func TestY1(t *testing.T) {
   2565 	for i := 0; i < len(vf); i++ {
   2566 		a := Abs(vf[i])
   2567 		if f := Y1(a); !soclose(y1[i], f, 2e-14) {
   2568 			t.Errorf("Y1(%g) = %g, want %g", a, f, y1[i])
   2569 		}
   2570 	}
   2571 	for i := 0; i < len(vfy0SC); i++ {
   2572 		if f := Y1(vfy0SC[i]); !alike(y1SC[i], f) {
   2573 			t.Errorf("Y1(%g) = %g, want %g", vfy0SC[i], f, y1SC[i])
   2574 		}
   2575 	}
   2576 }
   2577 
   2578 func TestYn(t *testing.T) {
   2579 	for i := 0; i < len(vf); i++ {
   2580 		a := Abs(vf[i])
   2581 		if f := Yn(2, a); !close(y2[i], f) {
   2582 			t.Errorf("Yn(2, %g) = %g, want %g", a, f, y2[i])
   2583 		}
   2584 		if f := Yn(-3, a); !close(yM3[i], f) {
   2585 			t.Errorf("Yn(-3, %g) = %g, want %g", a, f, yM3[i])
   2586 		}
   2587 	}
   2588 	for i := 0; i < len(vfy0SC); i++ {
   2589 		if f := Yn(2, vfy0SC[i]); !alike(y2SC[i], f) {
   2590 			t.Errorf("Yn(2, %g) = %g, want %g", vfy0SC[i], f, y2SC[i])
   2591 		}
   2592 		if f := Yn(-3, vfy0SC[i]); !alike(yM3SC[i], f) {
   2593 			t.Errorf("Yn(-3, %g) = %g, want %g", vfy0SC[i], f, yM3SC[i])
   2594 		}
   2595 	}
   2596 }
   2597 
   2598 // Check that math functions of high angle values
   2599 // return accurate results. [Since (vf[i] + large) - large != vf[i],
   2600 // testing for Trig(vf[i] + large) == Trig(vf[i]), where large is
   2601 // a multiple of 2*Pi, is misleading.]
   2602 func TestLargeCos(t *testing.T) {
   2603 	large := float64(100000 * Pi)
   2604 	for i := 0; i < len(vf); i++ {
   2605 		f1 := cosLarge[i]
   2606 		f2 := Cos(vf[i] + large)
   2607 		if !close(f1, f2) {
   2608 			t.Errorf("Cos(%g) = %g, want %g", vf[i]+large, f2, f1)
   2609 		}
   2610 	}
   2611 }
   2612 
   2613 func TestLargeSin(t *testing.T) {
   2614 	large := float64(100000 * Pi)
   2615 	for i := 0; i < len(vf); i++ {
   2616 		f1 := sinLarge[i]
   2617 		f2 := Sin(vf[i] + large)
   2618 		if !close(f1, f2) {
   2619 			t.Errorf("Sin(%g) = %g, want %g", vf[i]+large, f2, f1)
   2620 		}
   2621 	}
   2622 }
   2623 
   2624 func TestLargeSincos(t *testing.T) {
   2625 	large := float64(100000 * Pi)
   2626 	for i := 0; i < len(vf); i++ {
   2627 		f1, g1 := sinLarge[i], cosLarge[i]
   2628 		f2, g2 := Sincos(vf[i] + large)
   2629 		if !close(f1, f2) || !close(g1, g2) {
   2630 			t.Errorf("Sincos(%g) = %g, %g, want %g, %g", vf[i]+large, f2, g2, f1, g1)
   2631 		}
   2632 	}
   2633 }
   2634 
   2635 func TestLargeTan(t *testing.T) {
   2636 	large := float64(100000 * Pi)
   2637 	for i := 0; i < len(vf); i++ {
   2638 		f1 := tanLarge[i]
   2639 		f2 := Tan(vf[i] + large)
   2640 		if !close(f1, f2) {
   2641 			t.Errorf("Tan(%g) = %g, want %g", vf[i]+large, f2, f1)
   2642 		}
   2643 	}
   2644 }
   2645 
   2646 // Check that math constants are accepted by compiler
   2647 // and have right value (assumes strconv.ParseFloat works).
   2648 // https://golang.org/issue/201
   2649 
   2650 type floatTest struct {
   2651 	val  interface{}
   2652 	name string
   2653 	str  string
   2654 }
   2655 
   2656 var floatTests = []floatTest{
   2657 	{float64(MaxFloat64), "MaxFloat64", "1.7976931348623157e+308"},
   2658 	{float64(SmallestNonzeroFloat64), "SmallestNonzeroFloat64", "5e-324"},
   2659 	{float32(MaxFloat32), "MaxFloat32", "3.4028235e+38"},
   2660 	{float32(SmallestNonzeroFloat32), "SmallestNonzeroFloat32", "1e-45"},
   2661 }
   2662 
   2663 func TestFloatMinMax(t *testing.T) {
   2664 	for _, tt := range floatTests {
   2665 		s := fmt.Sprint(tt.val)
   2666 		if s != tt.str {
   2667 			t.Errorf("Sprint(%v) = %s, want %s", tt.name, s, tt.str)
   2668 		}
   2669 	}
   2670 }
   2671 
   2672 // Benchmarks
   2673 
   2674 func BenchmarkAcos(b *testing.B) {
   2675 	for i := 0; i < b.N; i++ {
   2676 		Acos(.5)
   2677 	}
   2678 }
   2679 
   2680 func BenchmarkAcosh(b *testing.B) {
   2681 	for i := 0; i < b.N; i++ {
   2682 		Acosh(1.5)
   2683 	}
   2684 }
   2685 
   2686 func BenchmarkAsin(b *testing.B) {
   2687 	for i := 0; i < b.N; i++ {
   2688 		Asin(.5)
   2689 	}
   2690 }
   2691 
   2692 func BenchmarkAsinh(b *testing.B) {
   2693 	for i := 0; i < b.N; i++ {
   2694 		Asinh(.5)
   2695 	}
   2696 }
   2697 
   2698 func BenchmarkAtan(b *testing.B) {
   2699 	for i := 0; i < b.N; i++ {
   2700 		Atan(.5)
   2701 	}
   2702 }
   2703 
   2704 func BenchmarkAtanh(b *testing.B) {
   2705 	for i := 0; i < b.N; i++ {
   2706 		Atanh(.5)
   2707 	}
   2708 }
   2709 
   2710 func BenchmarkAtan2(b *testing.B) {
   2711 	for i := 0; i < b.N; i++ {
   2712 		Atan2(.5, 1)
   2713 	}
   2714 }
   2715 
   2716 func BenchmarkCbrt(b *testing.B) {
   2717 	for i := 0; i < b.N; i++ {
   2718 		Cbrt(10)
   2719 	}
   2720 }
   2721 
   2722 func BenchmarkCeil(b *testing.B) {
   2723 	for i := 0; i < b.N; i++ {
   2724 		Ceil(.5)
   2725 	}
   2726 }
   2727 
   2728 func BenchmarkCopysign(b *testing.B) {
   2729 	for i := 0; i < b.N; i++ {
   2730 		Copysign(.5, -1)
   2731 	}
   2732 }
   2733 
   2734 func BenchmarkCos(b *testing.B) {
   2735 	for i := 0; i < b.N; i++ {
   2736 		Cos(.5)
   2737 	}
   2738 }
   2739 
   2740 func BenchmarkCosh(b *testing.B) {
   2741 	for i := 0; i < b.N; i++ {
   2742 		Cosh(2.5)
   2743 	}
   2744 }
   2745 
   2746 func BenchmarkErf(b *testing.B) {
   2747 	for i := 0; i < b.N; i++ {
   2748 		Erf(.5)
   2749 	}
   2750 }
   2751 
   2752 func BenchmarkErfc(b *testing.B) {
   2753 	for i := 0; i < b.N; i++ {
   2754 		Erfc(.5)
   2755 	}
   2756 }
   2757 
   2758 func BenchmarkExp(b *testing.B) {
   2759 	for i := 0; i < b.N; i++ {
   2760 		Exp(.5)
   2761 	}
   2762 }
   2763 
   2764 func BenchmarkExpGo(b *testing.B) {
   2765 	for i := 0; i < b.N; i++ {
   2766 		ExpGo(.5)
   2767 	}
   2768 }
   2769 
   2770 func BenchmarkExpm1(b *testing.B) {
   2771 	for i := 0; i < b.N; i++ {
   2772 		Expm1(.5)
   2773 	}
   2774 }
   2775 
   2776 func BenchmarkExp2(b *testing.B) {
   2777 	for i := 0; i < b.N; i++ {
   2778 		Exp2(.5)
   2779 	}
   2780 }
   2781 
   2782 func BenchmarkExp2Go(b *testing.B) {
   2783 	for i := 0; i < b.N; i++ {
   2784 		Exp2Go(.5)
   2785 	}
   2786 }
   2787 
   2788 func BenchmarkAbs(b *testing.B) {
   2789 	for i := 0; i < b.N; i++ {
   2790 		Abs(.5)
   2791 	}
   2792 }
   2793 
   2794 func BenchmarkDim(b *testing.B) {
   2795 	for i := 0; i < b.N; i++ {
   2796 		Dim(10, 3)
   2797 	}
   2798 }
   2799 
   2800 func BenchmarkFloor(b *testing.B) {
   2801 	for i := 0; i < b.N; i++ {
   2802 		Floor(.5)
   2803 	}
   2804 }
   2805 
   2806 func BenchmarkMax(b *testing.B) {
   2807 	for i := 0; i < b.N; i++ {
   2808 		Max(10, 3)
   2809 	}
   2810 }
   2811 
   2812 func BenchmarkMin(b *testing.B) {
   2813 	for i := 0; i < b.N; i++ {
   2814 		Min(10, 3)
   2815 	}
   2816 }
   2817 
   2818 func BenchmarkMod(b *testing.B) {
   2819 	for i := 0; i < b.N; i++ {
   2820 		Mod(10, 3)
   2821 	}
   2822 }
   2823 
   2824 func BenchmarkFrexp(b *testing.B) {
   2825 	for i := 0; i < b.N; i++ {
   2826 		Frexp(8)
   2827 	}
   2828 }
   2829 
   2830 func BenchmarkGamma(b *testing.B) {
   2831 	for i := 0; i < b.N; i++ {
   2832 		Gamma(2.5)
   2833 	}
   2834 }
   2835 
   2836 func BenchmarkHypot(b *testing.B) {
   2837 	for i := 0; i < b.N; i++ {
   2838 		Hypot(3, 4)
   2839 	}
   2840 }
   2841 
   2842 func BenchmarkHypotGo(b *testing.B) {
   2843 	for i := 0; i < b.N; i++ {
   2844 		HypotGo(3, 4)
   2845 	}
   2846 }
   2847 
   2848 func BenchmarkIlogb(b *testing.B) {
   2849 	for i := 0; i < b.N; i++ {
   2850 		Ilogb(.5)
   2851 	}
   2852 }
   2853 
   2854 func BenchmarkJ0(b *testing.B) {
   2855 	for i := 0; i < b.N; i++ {
   2856 		J0(2.5)
   2857 	}
   2858 }
   2859 
   2860 func BenchmarkJ1(b *testing.B) {
   2861 	for i := 0; i < b.N; i++ {
   2862 		J1(2.5)
   2863 	}
   2864 }
   2865 
   2866 func BenchmarkJn(b *testing.B) {
   2867 	for i := 0; i < b.N; i++ {
   2868 		Jn(2, 2.5)
   2869 	}
   2870 }
   2871 
   2872 func BenchmarkLdexp(b *testing.B) {
   2873 	for i := 0; i < b.N; i++ {
   2874 		Ldexp(.5, 2)
   2875 	}
   2876 }
   2877 
   2878 func BenchmarkLgamma(b *testing.B) {
   2879 	for i := 0; i < b.N; i++ {
   2880 		Lgamma(2.5)
   2881 	}
   2882 }
   2883 
   2884 func BenchmarkLog(b *testing.B) {
   2885 	for i := 0; i < b.N; i++ {
   2886 		Log(.5)
   2887 	}
   2888 }
   2889 
   2890 func BenchmarkLogb(b *testing.B) {
   2891 	for i := 0; i < b.N; i++ {
   2892 		Logb(.5)
   2893 	}
   2894 }
   2895 
   2896 func BenchmarkLog1p(b *testing.B) {
   2897 	for i := 0; i < b.N; i++ {
   2898 		Log1p(.5)
   2899 	}
   2900 }
   2901 
   2902 func BenchmarkLog10(b *testing.B) {
   2903 	for i := 0; i < b.N; i++ {
   2904 		Log10(.5)
   2905 	}
   2906 }
   2907 
   2908 func BenchmarkLog2(b *testing.B) {
   2909 	for i := 0; i < b.N; i++ {
   2910 		Log2(.5)
   2911 	}
   2912 }
   2913 
   2914 func BenchmarkModf(b *testing.B) {
   2915 	for i := 0; i < b.N; i++ {
   2916 		Modf(1.5)
   2917 	}
   2918 }
   2919 
   2920 func BenchmarkNextafter32(b *testing.B) {
   2921 	for i := 0; i < b.N; i++ {
   2922 		Nextafter32(.5, 1)
   2923 	}
   2924 }
   2925 
   2926 func BenchmarkNextafter64(b *testing.B) {
   2927 	for i := 0; i < b.N; i++ {
   2928 		Nextafter(.5, 1)
   2929 	}
   2930 }
   2931 
   2932 func BenchmarkPowInt(b *testing.B) {
   2933 	for i := 0; i < b.N; i++ {
   2934 		Pow(2, 2)
   2935 	}
   2936 }
   2937 
   2938 func BenchmarkPowFrac(b *testing.B) {
   2939 	for i := 0; i < b.N; i++ {
   2940 		Pow(2.5, 1.5)
   2941 	}
   2942 }
   2943 
   2944 func BenchmarkPow10Pos(b *testing.B) {
   2945 	for i := 0; i < b.N; i++ {
   2946 		Pow10(300)
   2947 	}
   2948 }
   2949 
   2950 func BenchmarkPow10Neg(b *testing.B) {
   2951 	for i := 0; i < b.N; i++ {
   2952 		Pow10(-300)
   2953 	}
   2954 }
   2955 
   2956 func BenchmarkRemainder(b *testing.B) {
   2957 	for i := 0; i < b.N; i++ {
   2958 		Remainder(10, 3)
   2959 	}
   2960 }
   2961 
   2962 func BenchmarkSignbit(b *testing.B) {
   2963 	for i := 0; i < b.N; i++ {
   2964 		Signbit(2.5)
   2965 	}
   2966 }
   2967 
   2968 func BenchmarkSin(b *testing.B) {
   2969 	for i := 0; i < b.N; i++ {
   2970 		Sin(.5)
   2971 	}
   2972 }
   2973 
   2974 func BenchmarkSincos(b *testing.B) {
   2975 	for i := 0; i < b.N; i++ {
   2976 		Sincos(.5)
   2977 	}
   2978 }
   2979 
   2980 func BenchmarkSinh(b *testing.B) {
   2981 	for i := 0; i < b.N; i++ {
   2982 		Sinh(2.5)
   2983 	}
   2984 }
   2985 
   2986 var Global float64
   2987 
   2988 func BenchmarkSqrt(b *testing.B) {
   2989 	x, y := 0.0, 10.0
   2990 	for i := 0; i < b.N; i++ {
   2991 		x += Sqrt(y)
   2992 	}
   2993 	Global = x
   2994 }
   2995 
   2996 func BenchmarkSqrtIndirect(b *testing.B) {
   2997 	x, y := 0.0, 10.0
   2998 	f := Sqrt
   2999 	for i := 0; i < b.N; i++ {
   3000 		x += f(y)
   3001 	}
   3002 	Global = x
   3003 }
   3004 
   3005 func BenchmarkSqrtGo(b *testing.B) {
   3006 	x, y := 0.0, 10.0
   3007 	for i := 0; i < b.N; i++ {
   3008 		x += SqrtGo(y)
   3009 	}
   3010 	Global = x
   3011 }
   3012 
   3013 func isPrime(i int) bool {
   3014 	// Yes, this is a dumb way to write this code,
   3015 	// but calling Sqrt repeatedly in this way demonstrates
   3016 	// the benefit of using a direct SQRT instruction on systems
   3017 	// that have one, whereas the obvious loop seems not to
   3018 	// demonstrate such a benefit.
   3019 	for j := 2; float64(j) <= Sqrt(float64(i)); j++ {
   3020 		if i%j == 0 {
   3021 			return false
   3022 		}
   3023 	}
   3024 	return true
   3025 }
   3026 
   3027 func BenchmarkSqrtPrime(b *testing.B) {
   3028 	any := false
   3029 	for i := 0; i < b.N; i++ {
   3030 		if isPrime(100003) {
   3031 			any = true
   3032 		}
   3033 	}
   3034 	if any {
   3035 		Global = 1
   3036 	}
   3037 }
   3038 
   3039 func BenchmarkTan(b *testing.B) {
   3040 	for i := 0; i < b.N; i++ {
   3041 		Tan(.5)
   3042 	}
   3043 }
   3044 
   3045 func BenchmarkTanh(b *testing.B) {
   3046 	for i := 0; i < b.N; i++ {
   3047 		Tanh(2.5)
   3048 	}
   3049 }
   3050 func BenchmarkTrunc(b *testing.B) {
   3051 	for i := 0; i < b.N; i++ {
   3052 		Trunc(.5)
   3053 	}
   3054 }
   3055 
   3056 func BenchmarkY0(b *testing.B) {
   3057 	for i := 0; i < b.N; i++ {
   3058 		Y0(2.5)
   3059 	}
   3060 }
   3061 
   3062 func BenchmarkY1(b *testing.B) {
   3063 	for i := 0; i < b.N; i++ {
   3064 		Y1(2.5)
   3065 	}
   3066 }
   3067 
   3068 func BenchmarkYn(b *testing.B) {
   3069 	for i := 0; i < b.N; i++ {
   3070 		Yn(2, 2.5)
   3071 	}
   3072 }
   3073