golang.org/toolchain@v0.0.1-go1.9rc2.windows-amd64/src/math/all_test.go (about)

     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 expm1Large = []float64{
   238  	4.2031418113550844e+21,
   239  	4.0690789717473863e+33,
   240  	-0.9372627915981363e+00,
   241  	-1.0,
   242  	7.077694784145933e+41,
   243  	5.117936223839153e+12,
   244  	5.124137759001189e+22,
   245  	7.03546003972584e+11,
   246  	8.456921800389698e+07,
   247  	-1.0,
   248  }
   249  var exp2 = []float64{
   250  	3.1537839463286288034313104e+01,
   251  	2.1361549283756232296144849e+02,
   252  	8.2537402562185562902577219e-01,
   253  	3.1021158628740294833424229e-02,
   254  	7.9581744110252191462569661e+02,
   255  	7.6019905892596359262696423e+00,
   256  	3.7506882048388096973183084e+01,
   257  	6.6250893439173561733216375e+00,
   258  	3.5438267900243941544605339e+00,
   259  	2.4281533133513300984289196e-03,
   260  }
   261  var fabs = []float64{
   262  	4.9790119248836735e+00,
   263  	7.7388724745781045e+00,
   264  	2.7688005719200159e-01,
   265  	5.0106036182710749e+00,
   266  	9.6362937071984173e+00,
   267  	2.9263772392439646e+00,
   268  	5.2290834314593066e+00,
   269  	2.7279399104360102e+00,
   270  	1.8253080916808550e+00,
   271  	8.6859247685756013e+00,
   272  }
   273  var fdim = []float64{
   274  	4.9790119248836735e+00,
   275  	7.7388724745781045e+00,
   276  	0.0000000000000000e+00,
   277  	0.0000000000000000e+00,
   278  	9.6362937071984173e+00,
   279  	2.9263772392439646e+00,
   280  	5.2290834314593066e+00,
   281  	2.7279399104360102e+00,
   282  	1.8253080916808550e+00,
   283  	0.0000000000000000e+00,
   284  }
   285  var floor = []float64{
   286  	4.0000000000000000e+00,
   287  	7.0000000000000000e+00,
   288  	-1.0000000000000000e+00,
   289  	-6.0000000000000000e+00,
   290  	9.0000000000000000e+00,
   291  	2.0000000000000000e+00,
   292  	5.0000000000000000e+00,
   293  	2.0000000000000000e+00,
   294  	1.0000000000000000e+00,
   295  	-9.0000000000000000e+00,
   296  }
   297  var fmod = []float64{
   298  	4.197615023265299782906368e-02,
   299  	2.261127525421895434476482e+00,
   300  	3.231794108794261433104108e-02,
   301  	4.989396381728925078391512e+00,
   302  	3.637062928015826201999516e-01,
   303  	1.220868282268106064236690e+00,
   304  	4.770916568540693347699744e+00,
   305  	1.816180268691969246219742e+00,
   306  	8.734595415957246977711748e-01,
   307  	1.314075231424398637614104e+00,
   308  }
   309  
   310  type fi struct {
   311  	f float64
   312  	i int
   313  }
   314  
   315  var frexp = []fi{
   316  	{6.2237649061045918750e-01, 3},
   317  	{9.6735905932226306250e-01, 3},
   318  	{-5.5376011438400318000e-01, -1},
   319  	{-6.2632545228388436250e-01, 3},
   320  	{6.02268356699901081250e-01, 4},
   321  	{7.3159430981099115000e-01, 2},
   322  	{6.5363542893241332500e-01, 3},
   323  	{6.8198497760900255000e-01, 2},
   324  	{9.1265404584042750000e-01, 1},
   325  	{-5.4287029803597508250e-01, 4},
   326  }
   327  var gamma = []float64{
   328  	2.3254348370739963835386613898e+01,
   329  	2.991153837155317076427529816e+03,
   330  	-4.561154336726758060575129109e+00,
   331  	7.719403468842639065959210984e-01,
   332  	1.6111876618855418534325755566e+05,
   333  	1.8706575145216421164173224946e+00,
   334  	3.4082787447257502836734201635e+01,
   335  	1.579733951448952054898583387e+00,
   336  	9.3834586598354592860187267089e-01,
   337  	-2.093995902923148389186189429e-05,
   338  }
   339  var j0 = []float64{
   340  	-1.8444682230601672018219338e-01,
   341  	2.27353668906331975435892e-01,
   342  	9.809259936157051116270273e-01,
   343  	-1.741170131426226587841181e-01,
   344  	-2.1389448451144143352039069e-01,
   345  	-2.340905848928038763337414e-01,
   346  	-1.0029099691890912094586326e-01,
   347  	-1.5466726714884328135358907e-01,
   348  	3.252650187653420388714693e-01,
   349  	-8.72218484409407250005360235e-03,
   350  }
   351  var j1 = []float64{
   352  	-3.251526395295203422162967e-01,
   353  	1.893581711430515718062564e-01,
   354  	-1.3711761352467242914491514e-01,
   355  	3.287486536269617297529617e-01,
   356  	1.3133899188830978473849215e-01,
   357  	3.660243417832986825301766e-01,
   358  	-3.4436769271848174665420672e-01,
   359  	4.329481396640773768835036e-01,
   360  	5.8181350531954794639333955e-01,
   361  	-2.7030574577733036112996607e-01,
   362  }
   363  var j2 = []float64{
   364  	5.3837518920137802565192769e-02,
   365  	-1.7841678003393207281244667e-01,
   366  	9.521746934916464142495821e-03,
   367  	4.28958355470987397983072e-02,
   368  	2.4115371837854494725492872e-01,
   369  	4.842458532394520316844449e-01,
   370  	-3.142145220618633390125946e-02,
   371  	4.720849184745124761189957e-01,
   372  	3.122312022520957042957497e-01,
   373  	7.096213118930231185707277e-02,
   374  }
   375  var jM3 = []float64{
   376  	-3.684042080996403091021151e-01,
   377  	2.8157665936340887268092661e-01,
   378  	4.401005480841948348343589e-04,
   379  	3.629926999056814081597135e-01,
   380  	3.123672198825455192489266e-02,
   381  	-2.958805510589623607540455e-01,
   382  	-3.2033177696533233403289416e-01,
   383  	-2.592737332129663376736604e-01,
   384  	-1.0241334641061485092351251e-01,
   385  	-2.3762660886100206491674503e-01,
   386  }
   387  var lgamma = []fi{
   388  	{3.146492141244545774319734e+00, 1},
   389  	{8.003414490659126375852113e+00, 1},
   390  	{1.517575735509779707488106e+00, -1},
   391  	{-2.588480028182145853558748e-01, 1},
   392  	{1.1989897050205555002007985e+01, 1},
   393  	{6.262899811091257519386906e-01, 1},
   394  	{3.5287924899091566764846037e+00, 1},
   395  	{4.5725644770161182299423372e-01, 1},
   396  	{-6.363667087767961257654854e-02, 1},
   397  	{-1.077385130910300066425564e+01, -1},
   398  }
   399  var log = []float64{
   400  	1.605231462693062999102599e+00,
   401  	2.0462560018708770653153909e+00,
   402  	-1.2841708730962657801275038e+00,
   403  	1.6115563905281545116286206e+00,
   404  	2.2655365644872016636317461e+00,
   405  	1.0737652208918379856272735e+00,
   406  	1.6542360106073546632707956e+00,
   407  	1.0035467127723465801264487e+00,
   408  	6.0174879014578057187016475e-01,
   409  	2.161703872847352815363655e+00,
   410  }
   411  var logb = []float64{
   412  	2.0000000000000000e+00,
   413  	2.0000000000000000e+00,
   414  	-2.0000000000000000e+00,
   415  	2.0000000000000000e+00,
   416  	3.0000000000000000e+00,
   417  	1.0000000000000000e+00,
   418  	2.0000000000000000e+00,
   419  	1.0000000000000000e+00,
   420  	0.0000000000000000e+00,
   421  	3.0000000000000000e+00,
   422  }
   423  var log10 = []float64{
   424  	6.9714316642508290997617083e-01,
   425  	8.886776901739320576279124e-01,
   426  	-5.5770832400658929815908236e-01,
   427  	6.998900476822994346229723e-01,
   428  	9.8391002850684232013281033e-01,
   429  	4.6633031029295153334285302e-01,
   430  	7.1842557117242328821552533e-01,
   431  	4.3583479968917773161304553e-01,
   432  	2.6133617905227038228626834e-01,
   433  	9.3881606348649405716214241e-01,
   434  }
   435  var log1p = []float64{
   436  	4.8590257759797794104158205e-02,
   437  	7.4540265965225865330849141e-02,
   438  	-2.7726407903942672823234024e-03,
   439  	-5.1404917651627649094953380e-02,
   440  	9.1998280672258624681335010e-02,
   441  	2.8843762576593352865894824e-02,
   442  	5.0969534581863707268992645e-02,
   443  	2.6913947602193238458458594e-02,
   444  	1.8088493239630770262045333e-02,
   445  	-9.0865245631588989681559268e-02,
   446  }
   447  var log2 = []float64{
   448  	2.3158594707062190618898251e+00,
   449  	2.9521233862883917703341018e+00,
   450  	-1.8526669502700329984917062e+00,
   451  	2.3249844127278861543568029e+00,
   452  	3.268478366538305087466309e+00,
   453  	1.5491157592596970278166492e+00,
   454  	2.3865580889631732407886495e+00,
   455  	1.447811865817085365540347e+00,
   456  	8.6813999540425116282815557e-01,
   457  	3.118679457227342224364709e+00,
   458  }
   459  var modf = [][2]float64{
   460  	{4.0000000000000000e+00, 9.7901192488367350108546816e-01},
   461  	{7.0000000000000000e+00, 7.3887247457810456552351752e-01},
   462  	{Copysign(0, -1), -2.7688005719200159404635997e-01},
   463  	{-5.0000000000000000e+00, -1.060361827107492160848778e-02},
   464  	{9.0000000000000000e+00, 6.3629370719841737980004837e-01},
   465  	{2.0000000000000000e+00, 9.2637723924396464525443662e-01},
   466  	{5.0000000000000000e+00, 2.2908343145930665230025625e-01},
   467  	{2.0000000000000000e+00, 7.2793991043601025126008608e-01},
   468  	{1.0000000000000000e+00, 8.2530809168085506044576505e-01},
   469  	{-8.0000000000000000e+00, -6.8592476857560136238589621e-01},
   470  }
   471  var nextafter32 = []float32{
   472  	4.979012489318848e+00,
   473  	7.738873004913330e+00,
   474  	-2.768800258636475e-01,
   475  	-5.010602951049805e+00,
   476  	9.636294364929199e+00,
   477  	2.926377534866333e+00,
   478  	5.229084014892578e+00,
   479  	2.727940082550049e+00,
   480  	1.825308203697205e+00,
   481  	-8.685923576354980e+00,
   482  }
   483  var nextafter64 = []float64{
   484  	4.97901192488367438926388786e+00,
   485  	7.73887247457810545370193722e+00,
   486  	-2.7688005719200153853520874e-01,
   487  	-5.01060361827107403343006808e+00,
   488  	9.63629370719841915615688777e+00,
   489  	2.92637723924396508934364647e+00,
   490  	5.22908343145930754047867595e+00,
   491  	2.72793991043601069534929593e+00,
   492  	1.82530809168085528249036997e+00,
   493  	-8.68592476857559958602905681e+00,
   494  }
   495  var pow = []float64{
   496  	9.5282232631648411840742957e+04,
   497  	5.4811599352999901232411871e+07,
   498  	5.2859121715894396531132279e-01,
   499  	9.7587991957286474464259698e-06,
   500  	4.328064329346044846740467e+09,
   501  	8.4406761805034547437659092e+02,
   502  	1.6946633276191194947742146e+05,
   503  	5.3449040147551939075312879e+02,
   504  	6.688182138451414936380374e+01,
   505  	2.0609869004248742886827439e-09,
   506  }
   507  var remainder = []float64{
   508  	4.197615023265299782906368e-02,
   509  	2.261127525421895434476482e+00,
   510  	3.231794108794261433104108e-02,
   511  	-2.120723654214984321697556e-02,
   512  	3.637062928015826201999516e-01,
   513  	1.220868282268106064236690e+00,
   514  	-4.581668629186133046005125e-01,
   515  	-9.117596417440410050403443e-01,
   516  	8.734595415957246977711748e-01,
   517  	1.314075231424398637614104e+00,
   518  }
   519  var signbit = []bool{
   520  	false,
   521  	false,
   522  	true,
   523  	true,
   524  	false,
   525  	false,
   526  	false,
   527  	false,
   528  	false,
   529  	true,
   530  }
   531  var sin = []float64{
   532  	-9.6466616586009283766724726e-01,
   533  	9.9338225271646545763467022e-01,
   534  	-2.7335587039794393342449301e-01,
   535  	9.5586257685042792878173752e-01,
   536  	-2.099421066779969164496634e-01,
   537  	2.135578780799860532750616e-01,
   538  	-8.694568971167362743327708e-01,
   539  	4.019566681155577786649878e-01,
   540  	9.6778633541687993721617774e-01,
   541  	-6.734405869050344734943028e-01,
   542  }
   543  
   544  // Results for 100000 * Pi + vf[i]
   545  var sinLarge = []float64{
   546  	-9.646661658548936063912e-01,
   547  	9.933822527198506903752e-01,
   548  	-2.7335587036246899796e-01,
   549  	9.55862576853689321268e-01,
   550  	-2.099421066862688873691e-01,
   551  	2.13557878070308981163e-01,
   552  	-8.694568970959221300497e-01,
   553  	4.01956668098863248917e-01,
   554  	9.67786335404528727927e-01,
   555  	-6.7344058693131973066e-01,
   556  }
   557  var sinh = []float64{
   558  	7.2661916084208532301448439e+01,
   559  	1.1479409110035194500526446e+03,
   560  	-2.8043136512812518927312641e-01,
   561  	-7.499429091181587232835164e+01,
   562  	7.6552466042906758523925934e+03,
   563  	9.3031583421672014313789064e+00,
   564  	9.330815755828109072810322e+01,
   565  	7.6179893137269146407361477e+00,
   566  	3.021769180549615819524392e+00,
   567  	-2.95950575724449499189888e+03,
   568  }
   569  var sqrt = []float64{
   570  	2.2313699659365484748756904e+00,
   571  	2.7818829009464263511285458e+00,
   572  	5.2619393496314796848143251e-01,
   573  	2.2384377628763938724244104e+00,
   574  	3.1042380236055381099288487e+00,
   575  	1.7106657298385224403917771e+00,
   576  	2.286718922705479046148059e+00,
   577  	1.6516476350711159636222979e+00,
   578  	1.3510396336454586262419247e+00,
   579  	2.9471892997524949215723329e+00,
   580  }
   581  var tan = []float64{
   582  	-3.661316565040227801781974e+00,
   583  	8.64900232648597589369854e+00,
   584  	-2.8417941955033612725238097e-01,
   585  	3.253290185974728640827156e+00,
   586  	2.147275640380293804770778e-01,
   587  	-2.18600910711067004921551e-01,
   588  	-1.760002817872367935518928e+00,
   589  	-4.389808914752818126249079e-01,
   590  	-3.843885560201130679995041e+00,
   591  	9.10988793377685105753416e-01,
   592  }
   593  
   594  // Results for 100000 * Pi + vf[i]
   595  var tanLarge = []float64{
   596  	-3.66131656475596512705e+00,
   597  	8.6490023287202547927e+00,
   598  	-2.841794195104782406e-01,
   599  	3.2532901861033120983e+00,
   600  	2.14727564046880001365e-01,
   601  	-2.18600910700688062874e-01,
   602  	-1.760002817699722747043e+00,
   603  	-4.38980891453536115952e-01,
   604  	-3.84388555942723509071e+00,
   605  	9.1098879344275101051e-01,
   606  }
   607  var tanh = []float64{
   608  	9.9990531206936338549262119e-01,
   609  	9.9999962057085294197613294e-01,
   610  	-2.7001505097318677233756845e-01,
   611  	-9.9991110943061718603541401e-01,
   612  	9.9999999146798465745022007e-01,
   613  	9.9427249436125236705001048e-01,
   614  	9.9994257600983138572705076e-01,
   615  	9.9149409509772875982054701e-01,
   616  	9.4936501296239685514466577e-01,
   617  	-9.9999994291374030946055701e-01,
   618  }
   619  var trunc = []float64{
   620  	4.0000000000000000e+00,
   621  	7.0000000000000000e+00,
   622  	-0.0000000000000000e+00,
   623  	-5.0000000000000000e+00,
   624  	9.0000000000000000e+00,
   625  	2.0000000000000000e+00,
   626  	5.0000000000000000e+00,
   627  	2.0000000000000000e+00,
   628  	1.0000000000000000e+00,
   629  	-8.0000000000000000e+00,
   630  }
   631  var y0 = []float64{
   632  	-3.053399153780788357534855e-01,
   633  	1.7437227649515231515503649e-01,
   634  	-8.6221781263678836910392572e-01,
   635  	-3.100664880987498407872839e-01,
   636  	1.422200649300982280645377e-01,
   637  	4.000004067997901144239363e-01,
   638  	-3.3340749753099352392332536e-01,
   639  	4.5399790746668954555205502e-01,
   640  	4.8290004112497761007536522e-01,
   641  	2.7036697826604756229601611e-01,
   642  }
   643  var y1 = []float64{
   644  	0.15494213737457922210218611,
   645  	-0.2165955142081145245075746,
   646  	-2.4644949631241895201032829,
   647  	0.1442740489541836405154505,
   648  	0.2215379960518984777080163,
   649  	0.3038800915160754150565448,
   650  	0.0691107642452362383808547,
   651  	0.2380116417809914424860165,
   652  	-0.20849492979459761009678934,
   653  	0.0242503179793232308250804,
   654  }
   655  var y2 = []float64{
   656  	0.3675780219390303613394936,
   657  	-0.23034826393250119879267257,
   658  	-16.939677983817727205631397,
   659  	0.367653980523052152867791,
   660  	-0.0962401471767804440353136,
   661  	-0.1923169356184851105200523,
   662  	0.35984072054267882391843766,
   663  	-0.2794987252299739821654982,
   664  	-0.7113490692587462579757954,
   665  	-0.2647831587821263302087457,
   666  }
   667  var yM3 = []float64{
   668  	-0.14035984421094849100895341,
   669  	-0.097535139617792072703973,
   670  	242.25775994555580176377379,
   671  	-0.1492267014802818619511046,
   672  	0.26148702629155918694500469,
   673  	0.56675383593895176530394248,
   674  	-0.206150264009006981070575,
   675  	0.64784284687568332737963658,
   676  	1.3503631555901938037008443,
   677  	0.1461869756579956803341844,
   678  }
   679  
   680  // arguments and expected results for special cases
   681  var vfacosSC = []float64{
   682  	-Pi,
   683  	1,
   684  	Pi,
   685  	NaN(),
   686  }
   687  var acosSC = []float64{
   688  	NaN(),
   689  	0,
   690  	NaN(),
   691  	NaN(),
   692  }
   693  
   694  var vfacoshSC = []float64{
   695  	Inf(-1),
   696  	0.5,
   697  	1,
   698  	Inf(1),
   699  	NaN(),
   700  }
   701  var acoshSC = []float64{
   702  	NaN(),
   703  	NaN(),
   704  	0,
   705  	Inf(1),
   706  	NaN(),
   707  }
   708  
   709  var vfasinSC = []float64{
   710  	-Pi,
   711  	Copysign(0, -1),
   712  	0,
   713  	Pi,
   714  	NaN(),
   715  }
   716  var asinSC = []float64{
   717  	NaN(),
   718  	Copysign(0, -1),
   719  	0,
   720  	NaN(),
   721  	NaN(),
   722  }
   723  
   724  var vfasinhSC = []float64{
   725  	Inf(-1),
   726  	Copysign(0, -1),
   727  	0,
   728  	Inf(1),
   729  	NaN(),
   730  }
   731  var asinhSC = []float64{
   732  	Inf(-1),
   733  	Copysign(0, -1),
   734  	0,
   735  	Inf(1),
   736  	NaN(),
   737  }
   738  
   739  var vfatanSC = []float64{
   740  	Inf(-1),
   741  	Copysign(0, -1),
   742  	0,
   743  	Inf(1),
   744  	NaN(),
   745  }
   746  var atanSC = []float64{
   747  	-Pi / 2,
   748  	Copysign(0, -1),
   749  	0,
   750  	Pi / 2,
   751  	NaN(),
   752  }
   753  
   754  var vfatanhSC = []float64{
   755  	Inf(-1),
   756  	-Pi,
   757  	-1,
   758  	Copysign(0, -1),
   759  	0,
   760  	1,
   761  	Pi,
   762  	Inf(1),
   763  	NaN(),
   764  }
   765  var atanhSC = []float64{
   766  	NaN(),
   767  	NaN(),
   768  	Inf(-1),
   769  	Copysign(0, -1),
   770  	0,
   771  	Inf(1),
   772  	NaN(),
   773  	NaN(),
   774  	NaN(),
   775  }
   776  var vfatan2SC = [][2]float64{
   777  	{Inf(-1), Inf(-1)},
   778  	{Inf(-1), -Pi},
   779  	{Inf(-1), 0},
   780  	{Inf(-1), +Pi},
   781  	{Inf(-1), Inf(1)},
   782  	{Inf(-1), NaN()},
   783  	{-Pi, Inf(-1)},
   784  	{-Pi, 0},
   785  	{-Pi, Inf(1)},
   786  	{-Pi, NaN()},
   787  	{Copysign(0, -1), Inf(-1)},
   788  	{Copysign(0, -1), -Pi},
   789  	{Copysign(0, -1), Copysign(0, -1)},
   790  	{Copysign(0, -1), 0},
   791  	{Copysign(0, -1), +Pi},
   792  	{Copysign(0, -1), Inf(1)},
   793  	{Copysign(0, -1), NaN()},
   794  	{0, Inf(-1)},
   795  	{0, -Pi},
   796  	{0, Copysign(0, -1)},
   797  	{0, 0},
   798  	{0, +Pi},
   799  	{0, Inf(1)},
   800  	{0, NaN()},
   801  	{+Pi, Inf(-1)},
   802  	{+Pi, 0},
   803  	{+Pi, Inf(1)},
   804  	{+Pi, NaN()},
   805  	{Inf(1), Inf(-1)},
   806  	{Inf(1), -Pi},
   807  	{Inf(1), 0},
   808  	{Inf(1), +Pi},
   809  	{Inf(1), Inf(1)},
   810  	{Inf(1), NaN()},
   811  	{NaN(), NaN()},
   812  }
   813  var atan2SC = []float64{
   814  	-3 * Pi / 4,     // atan2(-Inf, -Inf)
   815  	-Pi / 2,         // atan2(-Inf, -Pi)
   816  	-Pi / 2,         // atan2(-Inf, +0)
   817  	-Pi / 2,         // atan2(-Inf, +Pi)
   818  	-Pi / 4,         // atan2(-Inf, +Inf)
   819  	NaN(),           // atan2(-Inf, NaN)
   820  	-Pi,             // atan2(-Pi, -Inf)
   821  	-Pi / 2,         // atan2(-Pi, +0)
   822  	Copysign(0, -1), // atan2(-Pi, Inf)
   823  	NaN(),           // atan2(-Pi, NaN)
   824  	-Pi,             // atan2(-0, -Inf)
   825  	-Pi,             // atan2(-0, -Pi)
   826  	-Pi,             // atan2(-0, -0)
   827  	Copysign(0, -1), // atan2(-0, +0)
   828  	Copysign(0, -1), // atan2(-0, +Pi)
   829  	Copysign(0, -1), // atan2(-0, +Inf)
   830  	NaN(),           // atan2(-0, NaN)
   831  	Pi,              // atan2(+0, -Inf)
   832  	Pi,              // atan2(+0, -Pi)
   833  	Pi,              // atan2(+0, -0)
   834  	0,               // atan2(+0, +0)
   835  	0,               // atan2(+0, +Pi)
   836  	0,               // atan2(+0, +Inf)
   837  	NaN(),           // atan2(+0, NaN)
   838  	Pi,              // atan2(+Pi, -Inf)
   839  	Pi / 2,          // atan2(+Pi, +0)
   840  	0,               // atan2(+Pi, +Inf)
   841  	NaN(),           // atan2(+Pi, NaN)
   842  	3 * Pi / 4,      // atan2(+Inf, -Inf)
   843  	Pi / 2,          // atan2(+Inf, -Pi)
   844  	Pi / 2,          // atan2(+Inf, +0)
   845  	Pi / 2,          // atan2(+Inf, +Pi)
   846  	Pi / 4,          // atan2(+Inf, +Inf)
   847  	NaN(),           // atan2(+Inf, NaN)
   848  	NaN(),           // atan2(NaN, NaN)
   849  }
   850  
   851  var vfcbrtSC = []float64{
   852  	Inf(-1),
   853  	Copysign(0, -1),
   854  	0,
   855  	Inf(1),
   856  	NaN(),
   857  }
   858  var cbrtSC = []float64{
   859  	Inf(-1),
   860  	Copysign(0, -1),
   861  	0,
   862  	Inf(1),
   863  	NaN(),
   864  }
   865  
   866  var vfceilSC = []float64{
   867  	Inf(-1),
   868  	Copysign(0, -1),
   869  	0,
   870  	Inf(1),
   871  	NaN(),
   872  }
   873  var ceilSC = []float64{
   874  	Inf(-1),
   875  	Copysign(0, -1),
   876  	0,
   877  	Inf(1),
   878  	NaN(),
   879  }
   880  
   881  var vfcopysignSC = []float64{
   882  	Inf(-1),
   883  	Inf(1),
   884  	NaN(),
   885  }
   886  var copysignSC = []float64{
   887  	Inf(-1),
   888  	Inf(-1),
   889  	NaN(),
   890  }
   891  
   892  var vfcosSC = []float64{
   893  	Inf(-1),
   894  	Inf(1),
   895  	NaN(),
   896  }
   897  var cosSC = []float64{
   898  	NaN(),
   899  	NaN(),
   900  	NaN(),
   901  }
   902  
   903  var vfcoshSC = []float64{
   904  	Inf(-1),
   905  	Copysign(0, -1),
   906  	0,
   907  	Inf(1),
   908  	NaN(),
   909  }
   910  var coshSC = []float64{
   911  	Inf(1),
   912  	1,
   913  	1,
   914  	Inf(1),
   915  	NaN(),
   916  }
   917  
   918  var vferfSC = []float64{
   919  	Inf(-1),
   920  	Copysign(0, -1),
   921  	0,
   922  	Inf(1),
   923  	NaN(),
   924  }
   925  var erfSC = []float64{
   926  	-1,
   927  	Copysign(0, -1),
   928  	0,
   929  	1,
   930  	NaN(),
   931  }
   932  
   933  var vferfcSC = []float64{
   934  	Inf(-1),
   935  	Inf(1),
   936  	NaN(),
   937  }
   938  var erfcSC = []float64{
   939  	2,
   940  	0,
   941  	NaN(),
   942  }
   943  
   944  var vfexpSC = []float64{
   945  	Inf(-1),
   946  	-2000,
   947  	2000,
   948  	Inf(1),
   949  	NaN(),
   950  	// smallest float64 that overflows Exp(x)
   951  	7.097827128933841e+02,
   952  	// Issue 18912
   953  	1.48852223e+09,
   954  	1.4885222e+09,
   955  }
   956  var expSC = []float64{
   957  	0,
   958  	0,
   959  	Inf(1),
   960  	Inf(1),
   961  	NaN(),
   962  	Inf(1),
   963  	Inf(1),
   964  	Inf(1),
   965  }
   966  
   967  var vfexp2SC = []float64{
   968  	Inf(-1),
   969  	-2000,
   970  	2000,
   971  	Inf(1),
   972  	NaN(),
   973  	// smallest float64 that overflows Exp2(x)
   974  	1024,
   975  }
   976  var exp2SC = []float64{
   977  	0,
   978  	0,
   979  	Inf(1),
   980  	Inf(1),
   981  	NaN(),
   982  	Inf(1),
   983  }
   984  
   985  var vfexpm1SC = []float64{
   986  	Inf(-1),
   987  	-710,
   988  	Copysign(0, -1),
   989  	0,
   990  	710,
   991  	Inf(1),
   992  	NaN(),
   993  }
   994  var expm1SC = []float64{
   995  	-1,
   996  	-1,
   997  	Copysign(0, -1),
   998  	0,
   999  	Inf(1),
  1000  	Inf(1),
  1001  	NaN(),
  1002  }
  1003  
  1004  var vffabsSC = []float64{
  1005  	Inf(-1),
  1006  	Copysign(0, -1),
  1007  	0,
  1008  	Inf(1),
  1009  	NaN(),
  1010  }
  1011  var fabsSC = []float64{
  1012  	Inf(1),
  1013  	0,
  1014  	0,
  1015  	Inf(1),
  1016  	NaN(),
  1017  }
  1018  
  1019  var vffdimSC = [][2]float64{
  1020  	{Inf(-1), Inf(-1)},
  1021  	{Inf(-1), Inf(1)},
  1022  	{Inf(-1), NaN()},
  1023  	{Copysign(0, -1), Copysign(0, -1)},
  1024  	{Copysign(0, -1), 0},
  1025  	{0, Copysign(0, -1)},
  1026  	{0, 0},
  1027  	{Inf(1), Inf(-1)},
  1028  	{Inf(1), Inf(1)},
  1029  	{Inf(1), NaN()},
  1030  	{NaN(), Inf(-1)},
  1031  	{NaN(), Copysign(0, -1)},
  1032  	{NaN(), 0},
  1033  	{NaN(), Inf(1)},
  1034  	{NaN(), NaN()},
  1035  }
  1036  var nan = Float64frombits(0xFFF8000000000000) // SSE2 DIVSD 0/0
  1037  var vffdim2SC = [][2]float64{
  1038  	{Inf(-1), Inf(-1)},
  1039  	{Inf(-1), Inf(1)},
  1040  	{Inf(-1), nan},
  1041  	{Copysign(0, -1), Copysign(0, -1)},
  1042  	{Copysign(0, -1), 0},
  1043  	{0, Copysign(0, -1)},
  1044  	{0, 0},
  1045  	{Inf(1), Inf(-1)},
  1046  	{Inf(1), Inf(1)},
  1047  	{Inf(1), nan},
  1048  	{nan, Inf(-1)},
  1049  	{nan, Copysign(0, -1)},
  1050  	{nan, 0},
  1051  	{nan, Inf(1)},
  1052  	{nan, nan},
  1053  }
  1054  var fdimSC = []float64{
  1055  	NaN(),
  1056  	0,
  1057  	NaN(),
  1058  	0,
  1059  	0,
  1060  	0,
  1061  	0,
  1062  	Inf(1),
  1063  	NaN(),
  1064  	NaN(),
  1065  	NaN(),
  1066  	NaN(),
  1067  	NaN(),
  1068  	NaN(),
  1069  	NaN(),
  1070  }
  1071  var fmaxSC = []float64{
  1072  	Inf(-1),
  1073  	Inf(1),
  1074  	NaN(),
  1075  	Copysign(0, -1),
  1076  	0,
  1077  	0,
  1078  	0,
  1079  	Inf(1),
  1080  	Inf(1),
  1081  	Inf(1),
  1082  	NaN(),
  1083  	NaN(),
  1084  	NaN(),
  1085  	Inf(1),
  1086  	NaN(),
  1087  }
  1088  var fminSC = []float64{
  1089  	Inf(-1),
  1090  	Inf(-1),
  1091  	Inf(-1),
  1092  	Copysign(0, -1),
  1093  	Copysign(0, -1),
  1094  	Copysign(0, -1),
  1095  	0,
  1096  	Inf(-1),
  1097  	Inf(1),
  1098  	NaN(),
  1099  	Inf(-1),
  1100  	NaN(),
  1101  	NaN(),
  1102  	NaN(),
  1103  	NaN(),
  1104  }
  1105  
  1106  var vffmodSC = [][2]float64{
  1107  	{Inf(-1), Inf(-1)},
  1108  	{Inf(-1), -Pi},
  1109  	{Inf(-1), 0},
  1110  	{Inf(-1), Pi},
  1111  	{Inf(-1), Inf(1)},
  1112  	{Inf(-1), NaN()},
  1113  	{-Pi, Inf(-1)},
  1114  	{-Pi, 0},
  1115  	{-Pi, Inf(1)},
  1116  	{-Pi, NaN()},
  1117  	{Copysign(0, -1), Inf(-1)},
  1118  	{Copysign(0, -1), 0},
  1119  	{Copysign(0, -1), Inf(1)},
  1120  	{Copysign(0, -1), NaN()},
  1121  	{0, Inf(-1)},
  1122  	{0, 0},
  1123  	{0, Inf(1)},
  1124  	{0, NaN()},
  1125  	{Pi, Inf(-1)},
  1126  	{Pi, 0},
  1127  	{Pi, Inf(1)},
  1128  	{Pi, NaN()},
  1129  	{Inf(1), Inf(-1)},
  1130  	{Inf(1), -Pi},
  1131  	{Inf(1), 0},
  1132  	{Inf(1), Pi},
  1133  	{Inf(1), Inf(1)},
  1134  	{Inf(1), NaN()},
  1135  	{NaN(), Inf(-1)},
  1136  	{NaN(), -Pi},
  1137  	{NaN(), 0},
  1138  	{NaN(), Pi},
  1139  	{NaN(), Inf(1)},
  1140  	{NaN(), NaN()},
  1141  }
  1142  var fmodSC = []float64{
  1143  	NaN(),           // fmod(-Inf, -Inf)
  1144  	NaN(),           // fmod(-Inf, -Pi)
  1145  	NaN(),           // fmod(-Inf, 0)
  1146  	NaN(),           // fmod(-Inf, Pi)
  1147  	NaN(),           // fmod(-Inf, +Inf)
  1148  	NaN(),           // fmod(-Inf, NaN)
  1149  	-Pi,             // fmod(-Pi, -Inf)
  1150  	NaN(),           // fmod(-Pi, 0)
  1151  	-Pi,             // fmod(-Pi, +Inf)
  1152  	NaN(),           // fmod(-Pi, NaN)
  1153  	Copysign(0, -1), // fmod(-0, -Inf)
  1154  	NaN(),           // fmod(-0, 0)
  1155  	Copysign(0, -1), // fmod(-0, Inf)
  1156  	NaN(),           // fmod(-0, NaN)
  1157  	0,               // fmod(0, -Inf)
  1158  	NaN(),           // fmod(0, 0)
  1159  	0,               // fmod(0, +Inf)
  1160  	NaN(),           // fmod(0, NaN)
  1161  	Pi,              // fmod(Pi, -Inf)
  1162  	NaN(),           // fmod(Pi, 0)
  1163  	Pi,              // fmod(Pi, +Inf)
  1164  	NaN(),           // fmod(Pi, NaN)
  1165  	NaN(),           // fmod(+Inf, -Inf)
  1166  	NaN(),           // fmod(+Inf, -Pi)
  1167  	NaN(),           // fmod(+Inf, 0)
  1168  	NaN(),           // fmod(+Inf, Pi)
  1169  	NaN(),           // fmod(+Inf, +Inf)
  1170  	NaN(),           // fmod(+Inf, NaN)
  1171  	NaN(),           // fmod(NaN, -Inf)
  1172  	NaN(),           // fmod(NaN, -Pi)
  1173  	NaN(),           // fmod(NaN, 0)
  1174  	NaN(),           // fmod(NaN, Pi)
  1175  	NaN(),           // fmod(NaN, +Inf)
  1176  	NaN(),           // fmod(NaN, NaN)
  1177  }
  1178  
  1179  var vffrexpSC = []float64{
  1180  	Inf(-1),
  1181  	Copysign(0, -1),
  1182  	0,
  1183  	Inf(1),
  1184  	NaN(),
  1185  }
  1186  var frexpSC = []fi{
  1187  	{Inf(-1), 0},
  1188  	{Copysign(0, -1), 0},
  1189  	{0, 0},
  1190  	{Inf(1), 0},
  1191  	{NaN(), 0},
  1192  }
  1193  
  1194  var vfgamma = [][2]float64{
  1195  	{Inf(1), Inf(1)},
  1196  	{Inf(-1), NaN()},
  1197  	{0, Inf(1)},
  1198  	{Copysign(0, -1), Inf(-1)},
  1199  	{NaN(), NaN()},
  1200  	{-1, NaN()},
  1201  	{-2, NaN()},
  1202  	{-3, NaN()},
  1203  	{-1e16, NaN()},
  1204  	{-1e300, NaN()},
  1205  	{1.7e308, Inf(1)},
  1206  
  1207  	// Test inputs inspired by Python test suite.
  1208  	// Outputs computed at high precision by PARI/GP.
  1209  	// If recomputing table entries, be careful to use
  1210  	// high-precision (%.1000g) formatting of the float64 inputs.
  1211  	// For example, -2.0000000000000004 is the float64 with exact value
  1212  	// -2.00000000000000044408920985626161695, and
  1213  	// gamma(-2.0000000000000004) = -1249999999999999.5386078562728167651513, while
  1214  	// gamma(-2.00000000000000044408920985626161695) = -1125899906826907.2044875028130093136826.
  1215  	// Thus the table lists -1.1258999068426235e+15 as the answer.
  1216  	{0.5, 1.772453850905516},
  1217  	{1.5, 0.886226925452758},
  1218  	{2.5, 1.329340388179137},
  1219  	{3.5, 3.3233509704478426},
  1220  	{-0.5, -3.544907701811032},
  1221  	{-1.5, 2.363271801207355},
  1222  	{-2.5, -0.9453087204829419},
  1223  	{-3.5, 0.2700882058522691},
  1224  	{0.1, 9.51350769866873},
  1225  	{0.01, 99.4325851191506},
  1226  	{1e-08, 9.999999942278434e+07},
  1227  	{1e-16, 1e+16},
  1228  	{0.001, 999.4237724845955},
  1229  	{1e-16, 1e+16},
  1230  	{1e-308, 1e+308},
  1231  	{5.6e-309, 1.7857142857142864e+308},
  1232  	{5.5e-309, Inf(1)},
  1233  	{1e-309, Inf(1)},
  1234  	{1e-323, Inf(1)},
  1235  	{5e-324, Inf(1)},
  1236  	{-0.1, -10.686287021193193},
  1237  	{-0.01, -100.58719796441078},
  1238  	{-1e-08, -1.0000000057721567e+08},
  1239  	{-1e-16, -1e+16},
  1240  	{-0.001, -1000.5782056293586},
  1241  	{-1e-16, -1e+16},
  1242  	{-1e-308, -1e+308},
  1243  	{-5.6e-309, -1.7857142857142864e+308},
  1244  	{-5.5e-309, Inf(-1)},
  1245  	{-1e-309, Inf(-1)},
  1246  	{-1e-323, Inf(-1)},
  1247  	{-5e-324, Inf(-1)},
  1248  	{-0.9999999999999999, -9.007199254740992e+15},
  1249  	{-1.0000000000000002, 4.5035996273704955e+15},
  1250  	{-1.9999999999999998, 2.2517998136852485e+15},
  1251  	{-2.0000000000000004, -1.1258999068426235e+15},
  1252  	{-100.00000000000001, -7.540083334883109e-145},
  1253  	{-99.99999999999999, 7.540083334884096e-145},
  1254  	{17, 2.0922789888e+13},
  1255  	{171, 7.257415615307999e+306},
  1256  	{171.6, 1.5858969096672565e+308},
  1257  	{171.624, 1.7942117599248104e+308},
  1258  	{171.625, Inf(1)},
  1259  	{172, Inf(1)},
  1260  	{2000, Inf(1)},
  1261  	{-100.5, -3.3536908198076787e-159},
  1262  	{-160.5, -5.255546447007829e-286},
  1263  	{-170.5, -3.3127395215386074e-308},
  1264  	{-171.5, 1.9316265431712e-310},
  1265  	{-176.5, -1.196e-321},
  1266  	{-177.5, 5e-324},
  1267  	{-178.5, Copysign(0, -1)},
  1268  	{-179.5, 0},
  1269  	{-201.0001, 0},
  1270  	{-202.9999, Copysign(0, -1)},
  1271  	{-1000.5, Copysign(0, -1)},
  1272  	{-1.0000000003e+09, Copysign(0, -1)},
  1273  	{-4.5035996273704955e+15, 0},
  1274  	{-63.349078729022985, 4.177797167776188e-88},
  1275  	{-127.45117632943295, 1.183111089623681e-214},
  1276  }
  1277  
  1278  var vfhypotSC = [][2]float64{
  1279  	{Inf(-1), Inf(-1)},
  1280  	{Inf(-1), 0},
  1281  	{Inf(-1), Inf(1)},
  1282  	{Inf(-1), NaN()},
  1283  	{Copysign(0, -1), Copysign(0, -1)},
  1284  	{Copysign(0, -1), 0},
  1285  	{0, Copysign(0, -1)},
  1286  	{0, 0}, // +0, +0
  1287  	{0, Inf(-1)},
  1288  	{0, Inf(1)},
  1289  	{0, NaN()},
  1290  	{Inf(1), Inf(-1)},
  1291  	{Inf(1), 0},
  1292  	{Inf(1), Inf(1)},
  1293  	{Inf(1), NaN()},
  1294  	{NaN(), Inf(-1)},
  1295  	{NaN(), 0},
  1296  	{NaN(), Inf(1)},
  1297  	{NaN(), NaN()},
  1298  }
  1299  var hypotSC = []float64{
  1300  	Inf(1),
  1301  	Inf(1),
  1302  	Inf(1),
  1303  	Inf(1),
  1304  	0,
  1305  	0,
  1306  	0,
  1307  	0,
  1308  	Inf(1),
  1309  	Inf(1),
  1310  	NaN(),
  1311  	Inf(1),
  1312  	Inf(1),
  1313  	Inf(1),
  1314  	Inf(1),
  1315  	Inf(1),
  1316  	NaN(),
  1317  	Inf(1),
  1318  	NaN(),
  1319  }
  1320  
  1321  var ilogbSC = []int{
  1322  	MaxInt32,
  1323  	MinInt32,
  1324  	MaxInt32,
  1325  	MaxInt32,
  1326  }
  1327  
  1328  var vfj0SC = []float64{
  1329  	Inf(-1),
  1330  	0,
  1331  	Inf(1),
  1332  	NaN(),
  1333  }
  1334  var j0SC = []float64{
  1335  	0,
  1336  	1,
  1337  	0,
  1338  	NaN(),
  1339  }
  1340  var j1SC = []float64{
  1341  	0,
  1342  	0,
  1343  	0,
  1344  	NaN(),
  1345  }
  1346  var j2SC = []float64{
  1347  	0,
  1348  	0,
  1349  	0,
  1350  	NaN(),
  1351  }
  1352  var jM3SC = []float64{
  1353  	0,
  1354  	0,
  1355  	0,
  1356  	NaN(),
  1357  }
  1358  
  1359  var vfldexpSC = []fi{
  1360  	{0, 0},
  1361  	{0, -1075},
  1362  	{0, 1024},
  1363  	{Copysign(0, -1), 0},
  1364  	{Copysign(0, -1), -1075},
  1365  	{Copysign(0, -1), 1024},
  1366  	{Inf(1), 0},
  1367  	{Inf(1), -1024},
  1368  	{Inf(-1), 0},
  1369  	{Inf(-1), -1024},
  1370  	{NaN(), -1024},
  1371  }
  1372  var ldexpSC = []float64{
  1373  	0,
  1374  	0,
  1375  	0,
  1376  	Copysign(0, -1),
  1377  	Copysign(0, -1),
  1378  	Copysign(0, -1),
  1379  	Inf(1),
  1380  	Inf(1),
  1381  	Inf(-1),
  1382  	Inf(-1),
  1383  	NaN(),
  1384  }
  1385  
  1386  var vflgammaSC = []float64{
  1387  	Inf(-1),
  1388  	-3,
  1389  	0,
  1390  	1,
  1391  	2,
  1392  	Inf(1),
  1393  	NaN(),
  1394  }
  1395  var lgammaSC = []fi{
  1396  	{Inf(-1), 1},
  1397  	{Inf(1), 1},
  1398  	{Inf(1), 1},
  1399  	{0, 1},
  1400  	{0, 1},
  1401  	{Inf(1), 1},
  1402  	{NaN(), 1},
  1403  }
  1404  
  1405  var vflogSC = []float64{
  1406  	Inf(-1),
  1407  	-Pi,
  1408  	Copysign(0, -1),
  1409  	0,
  1410  	1,
  1411  	Inf(1),
  1412  	NaN(),
  1413  }
  1414  var logSC = []float64{
  1415  	NaN(),
  1416  	NaN(),
  1417  	Inf(-1),
  1418  	Inf(-1),
  1419  	0,
  1420  	Inf(1),
  1421  	NaN(),
  1422  }
  1423  
  1424  var vflogbSC = []float64{
  1425  	Inf(-1),
  1426  	0,
  1427  	Inf(1),
  1428  	NaN(),
  1429  }
  1430  var logbSC = []float64{
  1431  	Inf(1),
  1432  	Inf(-1),
  1433  	Inf(1),
  1434  	NaN(),
  1435  }
  1436  
  1437  var vflog1pSC = []float64{
  1438  	Inf(-1),
  1439  	-Pi,
  1440  	-1,
  1441  	Copysign(0, -1),
  1442  	0,
  1443  	Inf(1),
  1444  	NaN(),
  1445  }
  1446  var log1pSC = []float64{
  1447  	NaN(),
  1448  	NaN(),
  1449  	Inf(-1),
  1450  	Copysign(0, -1),
  1451  	0,
  1452  	Inf(1),
  1453  	NaN(),
  1454  }
  1455  
  1456  var vfmodfSC = []float64{
  1457  	Inf(-1),
  1458  	Copysign(0, -1),
  1459  	Inf(1),
  1460  	NaN(),
  1461  }
  1462  var modfSC = [][2]float64{
  1463  	{Inf(-1), NaN()}, // [2]float64{Copysign(0, -1), Inf(-1)},
  1464  	{Copysign(0, -1), Copysign(0, -1)},
  1465  	{Inf(1), NaN()}, // [2]float64{0, Inf(1)},
  1466  	{NaN(), NaN()},
  1467  }
  1468  
  1469  var vfnextafter32SC = [][2]float32{
  1470  	{0, 0},
  1471  	{0, float32(Copysign(0, -1))},
  1472  	{0, -1},
  1473  	{0, float32(NaN())},
  1474  	{float32(Copysign(0, -1)), 1},
  1475  	{float32(Copysign(0, -1)), 0},
  1476  	{float32(Copysign(0, -1)), float32(Copysign(0, -1))},
  1477  	{float32(Copysign(0, -1)), -1},
  1478  	{float32(NaN()), 0},
  1479  	{float32(NaN()), float32(NaN())},
  1480  }
  1481  var nextafter32SC = []float32{
  1482  	0,
  1483  	0,
  1484  	-1.401298464e-45, // Float32frombits(0x80000001)
  1485  	float32(NaN()),
  1486  	1.401298464e-45, // Float32frombits(0x00000001)
  1487  	float32(Copysign(0, -1)),
  1488  	float32(Copysign(0, -1)),
  1489  	-1.401298464e-45, // Float32frombits(0x80000001)
  1490  	float32(NaN()),
  1491  	float32(NaN()),
  1492  }
  1493  
  1494  var vfnextafter64SC = [][2]float64{
  1495  	{0, 0},
  1496  	{0, Copysign(0, -1)},
  1497  	{0, -1},
  1498  	{0, NaN()},
  1499  	{Copysign(0, -1), 1},
  1500  	{Copysign(0, -1), 0},
  1501  	{Copysign(0, -1), Copysign(0, -1)},
  1502  	{Copysign(0, -1), -1},
  1503  	{NaN(), 0},
  1504  	{NaN(), NaN()},
  1505  }
  1506  var nextafter64SC = []float64{
  1507  	0,
  1508  	0,
  1509  	-4.9406564584124654418e-324, // Float64frombits(0x8000000000000001)
  1510  	NaN(),
  1511  	4.9406564584124654418e-324, // Float64frombits(0x0000000000000001)
  1512  	Copysign(0, -1),
  1513  	Copysign(0, -1),
  1514  	-4.9406564584124654418e-324, // Float64frombits(0x8000000000000001)
  1515  	NaN(),
  1516  	NaN(),
  1517  }
  1518  
  1519  var vfpowSC = [][2]float64{
  1520  	{Inf(-1), -Pi},
  1521  	{Inf(-1), -3},
  1522  	{Inf(-1), Copysign(0, -1)},
  1523  	{Inf(-1), 0},
  1524  	{Inf(-1), 1},
  1525  	{Inf(-1), 3},
  1526  	{Inf(-1), Pi},
  1527  	{Inf(-1), NaN()},
  1528  
  1529  	{-Pi, Inf(-1)},
  1530  	{-Pi, -Pi},
  1531  	{-Pi, Copysign(0, -1)},
  1532  	{-Pi, 0},
  1533  	{-Pi, 1},
  1534  	{-Pi, Pi},
  1535  	{-Pi, Inf(1)},
  1536  	{-Pi, NaN()},
  1537  
  1538  	{-1, Inf(-1)},
  1539  	{-1, Inf(1)},
  1540  	{-1, NaN()},
  1541  	{-1 / 2, Inf(-1)},
  1542  	{-1 / 2, Inf(1)},
  1543  	{Copysign(0, -1), Inf(-1)},
  1544  	{Copysign(0, -1), -Pi},
  1545  	{Copysign(0, -1), -3},
  1546  	{Copysign(0, -1), 3},
  1547  	{Copysign(0, -1), Pi},
  1548  	{Copysign(0, -1), Inf(1)},
  1549  
  1550  	{0, Inf(-1)},
  1551  	{0, -Pi},
  1552  	{0, -3},
  1553  	{0, Copysign(0, -1)},
  1554  	{0, 0},
  1555  	{0, 3},
  1556  	{0, Pi},
  1557  	{0, Inf(1)},
  1558  	{0, NaN()},
  1559  
  1560  	{1 / 2, Inf(-1)},
  1561  	{1 / 2, Inf(1)},
  1562  	{1, Inf(-1)},
  1563  	{1, Inf(1)},
  1564  	{1, NaN()},
  1565  
  1566  	{Pi, Inf(-1)},
  1567  	{Pi, Copysign(0, -1)},
  1568  	{Pi, 0},
  1569  	{Pi, 1},
  1570  	{Pi, Inf(1)},
  1571  	{Pi, NaN()},
  1572  	{Inf(1), -Pi},
  1573  	{Inf(1), Copysign(0, -1)},
  1574  	{Inf(1), 0},
  1575  	{Inf(1), 1},
  1576  	{Inf(1), Pi},
  1577  	{Inf(1), NaN()},
  1578  	{NaN(), -Pi},
  1579  	{NaN(), Copysign(0, -1)},
  1580  	{NaN(), 0},
  1581  	{NaN(), 1},
  1582  	{NaN(), Pi},
  1583  	{NaN(), NaN()},
  1584  }
  1585  var powSC = []float64{
  1586  	0,               // pow(-Inf, -Pi)
  1587  	Copysign(0, -1), // pow(-Inf, -3)
  1588  	1,               // pow(-Inf, -0)
  1589  	1,               // pow(-Inf, +0)
  1590  	Inf(-1),         // pow(-Inf, 1)
  1591  	Inf(-1),         // pow(-Inf, 3)
  1592  	Inf(1),          // pow(-Inf, Pi)
  1593  	NaN(),           // pow(-Inf, NaN)
  1594  	0,               // pow(-Pi, -Inf)
  1595  	NaN(),           // pow(-Pi, -Pi)
  1596  	1,               // pow(-Pi, -0)
  1597  	1,               // pow(-Pi, +0)
  1598  	-Pi,             // pow(-Pi, 1)
  1599  	NaN(),           // pow(-Pi, Pi)
  1600  	Inf(1),          // pow(-Pi, +Inf)
  1601  	NaN(),           // pow(-Pi, NaN)
  1602  	1,               // pow(-1, -Inf) IEEE 754-2008
  1603  	1,               // pow(-1, +Inf) IEEE 754-2008
  1604  	NaN(),           // pow(-1, NaN)
  1605  	Inf(1),          // pow(-1/2, -Inf)
  1606  	0,               // pow(-1/2, +Inf)
  1607  	Inf(1),          // pow(-0, -Inf)
  1608  	Inf(1),          // pow(-0, -Pi)
  1609  	Inf(-1),         // pow(-0, -3) IEEE 754-2008
  1610  	Copysign(0, -1), // pow(-0, 3) IEEE 754-2008
  1611  	0,               // pow(-0, +Pi)
  1612  	0,               // pow(-0, +Inf)
  1613  	Inf(1),          // pow(+0, -Inf)
  1614  	Inf(1),          // pow(+0, -Pi)
  1615  	Inf(1),          // pow(+0, -3)
  1616  	1,               // pow(+0, -0)
  1617  	1,               // pow(+0, +0)
  1618  	0,               // pow(+0, 3)
  1619  	0,               // pow(+0, +Pi)
  1620  	0,               // pow(+0, +Inf)
  1621  	NaN(),           // pow(+0, NaN)
  1622  	Inf(1),          // pow(1/2, -Inf)
  1623  	0,               // pow(1/2, +Inf)
  1624  	1,               // pow(1, -Inf) IEEE 754-2008
  1625  	1,               // pow(1, +Inf) IEEE 754-2008
  1626  	1,               // pow(1, NaN) IEEE 754-2008
  1627  	0,               // pow(+Pi, -Inf)
  1628  	1,               // pow(+Pi, -0)
  1629  	1,               // pow(+Pi, +0)
  1630  	Pi,              // pow(+Pi, 1)
  1631  	Inf(1),          // pow(+Pi, +Inf)
  1632  	NaN(),           // pow(+Pi, NaN)
  1633  	0,               // pow(+Inf, -Pi)
  1634  	1,               // pow(+Inf, -0)
  1635  	1,               // pow(+Inf, +0)
  1636  	Inf(1),          // pow(+Inf, 1)
  1637  	Inf(1),          // pow(+Inf, Pi)
  1638  	NaN(),           // pow(+Inf, NaN)
  1639  	NaN(),           // pow(NaN, -Pi)
  1640  	1,               // pow(NaN, -0)
  1641  	1,               // pow(NaN, +0)
  1642  	NaN(),           // pow(NaN, 1)
  1643  	NaN(),           // pow(NaN, +Pi)
  1644  	NaN(),           // pow(NaN, NaN)
  1645  }
  1646  
  1647  var vfpow10SC = []int{
  1648  	MinInt32,
  1649  	-324,
  1650  	-323,
  1651  	-50,
  1652  	-22,
  1653  	-1,
  1654  	0,
  1655  	1,
  1656  	22,
  1657  	50,
  1658  	100,
  1659  	200,
  1660  	308,
  1661  	309,
  1662  	MaxInt32,
  1663  }
  1664  
  1665  var pow10SC = []float64{
  1666  	0,        // pow10(MinInt32)
  1667  	0,        // pow10(-324)
  1668  	1.0e-323, // pow10(-323)
  1669  	1.0e-50,  // pow10(-50)
  1670  	1.0e-22,  // pow10(-22)
  1671  	1.0e-1,   // pow10(-1)
  1672  	1.0e0,    // pow10(0)
  1673  	1.0e1,    // pow10(1)
  1674  	1.0e22,   // pow10(22)
  1675  	1.0e50,   // pow10(50)
  1676  	1.0e100,  // pow10(100)
  1677  	1.0e200,  // pow10(200)
  1678  	1.0e308,  // pow10(308)
  1679  	Inf(1),   // pow10(309)
  1680  	Inf(1),   // pow10(MaxInt32)
  1681  }
  1682  
  1683  var vfsignbitSC = []float64{
  1684  	Inf(-1),
  1685  	Copysign(0, -1),
  1686  	0,
  1687  	Inf(1),
  1688  	NaN(),
  1689  }
  1690  var signbitSC = []bool{
  1691  	true,
  1692  	true,
  1693  	false,
  1694  	false,
  1695  	false,
  1696  }
  1697  
  1698  var vfsinSC = []float64{
  1699  	Inf(-1),
  1700  	Copysign(0, -1),
  1701  	0,
  1702  	Inf(1),
  1703  	NaN(),
  1704  }
  1705  var sinSC = []float64{
  1706  	NaN(),
  1707  	Copysign(0, -1),
  1708  	0,
  1709  	NaN(),
  1710  	NaN(),
  1711  }
  1712  
  1713  var vfsinhSC = []float64{
  1714  	Inf(-1),
  1715  	Copysign(0, -1),
  1716  	0,
  1717  	Inf(1),
  1718  	NaN(),
  1719  }
  1720  var sinhSC = []float64{
  1721  	Inf(-1),
  1722  	Copysign(0, -1),
  1723  	0,
  1724  	Inf(1),
  1725  	NaN(),
  1726  }
  1727  
  1728  var vfsqrtSC = []float64{
  1729  	Inf(-1),
  1730  	-Pi,
  1731  	Copysign(0, -1),
  1732  	0,
  1733  	Inf(1),
  1734  	NaN(),
  1735  	Float64frombits(2), // subnormal; see https://golang.org/issue/13013
  1736  }
  1737  var sqrtSC = []float64{
  1738  	NaN(),
  1739  	NaN(),
  1740  	Copysign(0, -1),
  1741  	0,
  1742  	Inf(1),
  1743  	NaN(),
  1744  	3.1434555694052576e-162,
  1745  }
  1746  
  1747  var vftanhSC = []float64{
  1748  	Inf(-1),
  1749  	Copysign(0, -1),
  1750  	0,
  1751  	Inf(1),
  1752  	NaN(),
  1753  }
  1754  var tanhSC = []float64{
  1755  	-1,
  1756  	Copysign(0, -1),
  1757  	0,
  1758  	1,
  1759  	NaN(),
  1760  }
  1761  
  1762  var vfy0SC = []float64{
  1763  	Inf(-1),
  1764  	0,
  1765  	Inf(1),
  1766  	NaN(),
  1767  	-1,
  1768  }
  1769  var y0SC = []float64{
  1770  	NaN(),
  1771  	Inf(-1),
  1772  	0,
  1773  	NaN(),
  1774  	NaN(),
  1775  }
  1776  var y1SC = []float64{
  1777  	NaN(),
  1778  	Inf(-1),
  1779  	0,
  1780  	NaN(),
  1781  	NaN(),
  1782  }
  1783  var y2SC = []float64{
  1784  	NaN(),
  1785  	Inf(-1),
  1786  	0,
  1787  	NaN(),
  1788  	NaN(),
  1789  }
  1790  var yM3SC = []float64{
  1791  	NaN(),
  1792  	Inf(1),
  1793  	0,
  1794  	NaN(),
  1795  	NaN(),
  1796  }
  1797  
  1798  // arguments and expected results for boundary cases
  1799  const (
  1800  	SmallestNormalFloat64   = 2.2250738585072014e-308 // 2**-1022
  1801  	LargestSubnormalFloat64 = SmallestNormalFloat64 - SmallestNonzeroFloat64
  1802  )
  1803  
  1804  var vffrexpBC = []float64{
  1805  	SmallestNormalFloat64,
  1806  	LargestSubnormalFloat64,
  1807  	SmallestNonzeroFloat64,
  1808  	MaxFloat64,
  1809  	-SmallestNormalFloat64,
  1810  	-LargestSubnormalFloat64,
  1811  	-SmallestNonzeroFloat64,
  1812  	-MaxFloat64,
  1813  }
  1814  var frexpBC = []fi{
  1815  	{0.5, -1021},
  1816  	{0.99999999999999978, -1022},
  1817  	{0.5, -1073},
  1818  	{0.99999999999999989, 1024},
  1819  	{-0.5, -1021},
  1820  	{-0.99999999999999978, -1022},
  1821  	{-0.5, -1073},
  1822  	{-0.99999999999999989, 1024},
  1823  }
  1824  
  1825  var vfldexpBC = []fi{
  1826  	{SmallestNormalFloat64, -52},
  1827  	{LargestSubnormalFloat64, -51},
  1828  	{SmallestNonzeroFloat64, 1074},
  1829  	{MaxFloat64, -(1023 + 1074)},
  1830  	{1, -1075},
  1831  	{-1, -1075},
  1832  	{1, 1024},
  1833  	{-1, 1024},
  1834  }
  1835  var ldexpBC = []float64{
  1836  	SmallestNonzeroFloat64,
  1837  	1e-323, // 2**-1073
  1838  	1,
  1839  	1e-323, // 2**-1073
  1840  	0,
  1841  	Copysign(0, -1),
  1842  	Inf(1),
  1843  	Inf(-1),
  1844  }
  1845  
  1846  var logbBC = []float64{
  1847  	-1022,
  1848  	-1023,
  1849  	-1074,
  1850  	1023,
  1851  	-1022,
  1852  	-1023,
  1853  	-1074,
  1854  	1023,
  1855  }
  1856  
  1857  func tolerance(a, b, e float64) bool {
  1858  	// Multiplying by e here can underflow denormal values to zero.
  1859  	// Check a==b so that at least if a and b are small and identical
  1860  	// we say they match.
  1861  	if a == b {
  1862  		return true
  1863  	}
  1864  	d := a - b
  1865  	if d < 0 {
  1866  		d = -d
  1867  	}
  1868  
  1869  	// note: b is correct (expected) value, a is actual value.
  1870  	// make error tolerance a fraction of b, not a.
  1871  	if b != 0 {
  1872  		e = e * b
  1873  		if e < 0 {
  1874  			e = -e
  1875  		}
  1876  	}
  1877  	return d < e
  1878  }
  1879  func close(a, b float64) bool      { return tolerance(a, b, 1e-14) }
  1880  func veryclose(a, b float64) bool  { return tolerance(a, b, 4e-16) }
  1881  func soclose(a, b, e float64) bool { return tolerance(a, b, e) }
  1882  func alike(a, b float64) bool {
  1883  	switch {
  1884  	case IsNaN(a) && IsNaN(b):
  1885  		return true
  1886  	case a == b:
  1887  		return Signbit(a) == Signbit(b)
  1888  	}
  1889  	return false
  1890  }
  1891  
  1892  func TestNaN(t *testing.T) {
  1893  	f64 := NaN()
  1894  	if f64 == f64 {
  1895  		t.Fatalf("NaN() returns %g, expected NaN", f64)
  1896  	}
  1897  	f32 := float32(f64)
  1898  	if f32 == f32 {
  1899  		t.Fatalf("float32(NaN()) is %g, expected NaN", f32)
  1900  	}
  1901  }
  1902  
  1903  func TestAcos(t *testing.T) {
  1904  	for i := 0; i < len(vf); i++ {
  1905  		a := vf[i] / 10
  1906  		if f := Acos(a); !close(acos[i], f) {
  1907  			t.Errorf("Acos(%g) = %g, want %g", a, f, acos[i])
  1908  		}
  1909  	}
  1910  	for i := 0; i < len(vfacosSC); i++ {
  1911  		if f := Acos(vfacosSC[i]); !alike(acosSC[i], f) {
  1912  			t.Errorf("Acos(%g) = %g, want %g", vfacosSC[i], f, acosSC[i])
  1913  		}
  1914  	}
  1915  }
  1916  
  1917  func TestAcosh(t *testing.T) {
  1918  	for i := 0; i < len(vf); i++ {
  1919  		a := 1 + Abs(vf[i])
  1920  		if f := Acosh(a); !veryclose(acosh[i], f) {
  1921  			t.Errorf("Acosh(%g) = %g, want %g", a, f, acosh[i])
  1922  		}
  1923  	}
  1924  	for i := 0; i < len(vfacoshSC); i++ {
  1925  		if f := Acosh(vfacoshSC[i]); !alike(acoshSC[i], f) {
  1926  			t.Errorf("Acosh(%g) = %g, want %g", vfacoshSC[i], f, acoshSC[i])
  1927  		}
  1928  	}
  1929  }
  1930  
  1931  func TestAsin(t *testing.T) {
  1932  	for i := 0; i < len(vf); i++ {
  1933  		a := vf[i] / 10
  1934  		if f := Asin(a); !veryclose(asin[i], f) {
  1935  			t.Errorf("Asin(%g) = %g, want %g", a, f, asin[i])
  1936  		}
  1937  	}
  1938  	for i := 0; i < len(vfasinSC); i++ {
  1939  		if f := Asin(vfasinSC[i]); !alike(asinSC[i], f) {
  1940  			t.Errorf("Asin(%g) = %g, want %g", vfasinSC[i], f, asinSC[i])
  1941  		}
  1942  	}
  1943  }
  1944  
  1945  func TestAsinh(t *testing.T) {
  1946  	for i := 0; i < len(vf); i++ {
  1947  		if f := Asinh(vf[i]); !veryclose(asinh[i], f) {
  1948  			t.Errorf("Asinh(%g) = %g, want %g", vf[i], f, asinh[i])
  1949  		}
  1950  	}
  1951  	for i := 0; i < len(vfasinhSC); i++ {
  1952  		if f := Asinh(vfasinhSC[i]); !alike(asinhSC[i], f) {
  1953  			t.Errorf("Asinh(%g) = %g, want %g", vfasinhSC[i], f, asinhSC[i])
  1954  		}
  1955  	}
  1956  }
  1957  
  1958  func TestAtan(t *testing.T) {
  1959  	for i := 0; i < len(vf); i++ {
  1960  		if f := Atan(vf[i]); !veryclose(atan[i], f) {
  1961  			t.Errorf("Atan(%g) = %g, want %g", vf[i], f, atan[i])
  1962  		}
  1963  	}
  1964  	for i := 0; i < len(vfatanSC); i++ {
  1965  		if f := Atan(vfatanSC[i]); !alike(atanSC[i], f) {
  1966  			t.Errorf("Atan(%g) = %g, want %g", vfatanSC[i], f, atanSC[i])
  1967  		}
  1968  	}
  1969  }
  1970  
  1971  func TestAtanh(t *testing.T) {
  1972  	for i := 0; i < len(vf); i++ {
  1973  		a := vf[i] / 10
  1974  		if f := Atanh(a); !veryclose(atanh[i], f) {
  1975  			t.Errorf("Atanh(%g) = %g, want %g", a, f, atanh[i])
  1976  		}
  1977  	}
  1978  	for i := 0; i < len(vfatanhSC); i++ {
  1979  		if f := Atanh(vfatanhSC[i]); !alike(atanhSC[i], f) {
  1980  			t.Errorf("Atanh(%g) = %g, want %g", vfatanhSC[i], f, atanhSC[i])
  1981  		}
  1982  	}
  1983  }
  1984  
  1985  func TestAtan2(t *testing.T) {
  1986  	for i := 0; i < len(vf); i++ {
  1987  		if f := Atan2(10, vf[i]); !veryclose(atan2[i], f) {
  1988  			t.Errorf("Atan2(10, %g) = %g, want %g", vf[i], f, atan2[i])
  1989  		}
  1990  	}
  1991  	for i := 0; i < len(vfatan2SC); i++ {
  1992  		if f := Atan2(vfatan2SC[i][0], vfatan2SC[i][1]); !alike(atan2SC[i], f) {
  1993  			t.Errorf("Atan2(%g, %g) = %g, want %g", vfatan2SC[i][0], vfatan2SC[i][1], f, atan2SC[i])
  1994  		}
  1995  	}
  1996  }
  1997  
  1998  func TestCbrt(t *testing.T) {
  1999  	for i := 0; i < len(vf); i++ {
  2000  		if f := Cbrt(vf[i]); !veryclose(cbrt[i], f) {
  2001  			t.Errorf("Cbrt(%g) = %g, want %g", vf[i], f, cbrt[i])
  2002  		}
  2003  	}
  2004  	for i := 0; i < len(vfcbrtSC); i++ {
  2005  		if f := Cbrt(vfcbrtSC[i]); !alike(cbrtSC[i], f) {
  2006  			t.Errorf("Cbrt(%g) = %g, want %g", vfcbrtSC[i], f, cbrtSC[i])
  2007  		}
  2008  	}
  2009  }
  2010  
  2011  func TestCeil(t *testing.T) {
  2012  	for i := 0; i < len(vf); i++ {
  2013  		if f := Ceil(vf[i]); ceil[i] != f {
  2014  			t.Errorf("Ceil(%g) = %g, want %g", vf[i], f, ceil[i])
  2015  		}
  2016  	}
  2017  	for i := 0; i < len(vfceilSC); i++ {
  2018  		if f := Ceil(vfceilSC[i]); !alike(ceilSC[i], f) {
  2019  			t.Errorf("Ceil(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
  2020  		}
  2021  	}
  2022  }
  2023  
  2024  func TestCopysign(t *testing.T) {
  2025  	for i := 0; i < len(vf); i++ {
  2026  		if f := Copysign(vf[i], -1); copysign[i] != f {
  2027  			t.Errorf("Copysign(%g, -1) = %g, want %g", vf[i], f, copysign[i])
  2028  		}
  2029  	}
  2030  	for i := 0; i < len(vf); i++ {
  2031  		if f := Copysign(vf[i], 1); -copysign[i] != f {
  2032  			t.Errorf("Copysign(%g, 1) = %g, want %g", vf[i], f, -copysign[i])
  2033  		}
  2034  	}
  2035  	for i := 0; i < len(vfcopysignSC); i++ {
  2036  		if f := Copysign(vfcopysignSC[i], -1); !alike(copysignSC[i], f) {
  2037  			t.Errorf("Copysign(%g, -1) = %g, want %g", vfcopysignSC[i], f, copysignSC[i])
  2038  		}
  2039  	}
  2040  }
  2041  
  2042  func TestCos(t *testing.T) {
  2043  	for i := 0; i < len(vf); i++ {
  2044  		if f := Cos(vf[i]); !veryclose(cos[i], f) {
  2045  			t.Errorf("Cos(%g) = %g, want %g", vf[i], f, cos[i])
  2046  		}
  2047  	}
  2048  	for i := 0; i < len(vfcosSC); i++ {
  2049  		if f := Cos(vfcosSC[i]); !alike(cosSC[i], f) {
  2050  			t.Errorf("Cos(%g) = %g, want %g", vfcosSC[i], f, cosSC[i])
  2051  		}
  2052  	}
  2053  }
  2054  
  2055  func TestCosh(t *testing.T) {
  2056  	for i := 0; i < len(vf); i++ {
  2057  		if f := Cosh(vf[i]); !close(cosh[i], f) {
  2058  			t.Errorf("Cosh(%g) = %g, want %g", vf[i], f, cosh[i])
  2059  		}
  2060  	}
  2061  	for i := 0; i < len(vfcoshSC); i++ {
  2062  		if f := Cosh(vfcoshSC[i]); !alike(coshSC[i], f) {
  2063  			t.Errorf("Cosh(%g) = %g, want %g", vfcoshSC[i], f, coshSC[i])
  2064  		}
  2065  	}
  2066  }
  2067  
  2068  func TestErf(t *testing.T) {
  2069  	for i := 0; i < len(vf); i++ {
  2070  		a := vf[i] / 10
  2071  		if f := Erf(a); !veryclose(erf[i], f) {
  2072  			t.Errorf("Erf(%g) = %g, want %g", a, f, erf[i])
  2073  		}
  2074  	}
  2075  	for i := 0; i < len(vferfSC); i++ {
  2076  		if f := Erf(vferfSC[i]); !alike(erfSC[i], f) {
  2077  			t.Errorf("Erf(%g) = %g, want %g", vferfSC[i], f, erfSC[i])
  2078  		}
  2079  	}
  2080  }
  2081  
  2082  func TestErfc(t *testing.T) {
  2083  	for i := 0; i < len(vf); i++ {
  2084  		a := vf[i] / 10
  2085  		if f := Erfc(a); !veryclose(erfc[i], f) {
  2086  			t.Errorf("Erfc(%g) = %g, want %g", a, f, erfc[i])
  2087  		}
  2088  	}
  2089  	for i := 0; i < len(vferfcSC); i++ {
  2090  		if f := Erfc(vferfcSC[i]); !alike(erfcSC[i], f) {
  2091  			t.Errorf("Erfc(%g) = %g, want %g", vferfcSC[i], f, erfcSC[i])
  2092  		}
  2093  	}
  2094  }
  2095  
  2096  func TestExp(t *testing.T) {
  2097  	testExp(t, Exp, "Exp")
  2098  	testExp(t, ExpGo, "ExpGo")
  2099  }
  2100  
  2101  func testExp(t *testing.T, Exp func(float64) float64, name string) {
  2102  	for i := 0; i < len(vf); i++ {
  2103  		if f := Exp(vf[i]); !veryclose(exp[i], f) {
  2104  			t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp[i])
  2105  		}
  2106  	}
  2107  	for i := 0; i < len(vfexpSC); i++ {
  2108  		if f := Exp(vfexpSC[i]); !alike(expSC[i], f) {
  2109  			t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
  2110  		}
  2111  	}
  2112  }
  2113  
  2114  func TestExpm1(t *testing.T) {
  2115  	for i := 0; i < len(vf); i++ {
  2116  		a := vf[i] / 100
  2117  		if f := Expm1(a); !veryclose(expm1[i], f) {
  2118  			t.Errorf("Expm1(%g) = %g, want %g", a, f, expm1[i])
  2119  		}
  2120  	}
  2121  	for i := 0; i < len(vf); i++ {
  2122  		a := vf[i] * 10
  2123  		if f := Expm1(a); !close(expm1Large[i], f) {
  2124  			t.Errorf("Expm1(%g) = %g, want %g", a, f, expm1Large[i])
  2125  		}
  2126  	}
  2127  	for i := 0; i < len(vfexpm1SC); i++ {
  2128  		if f := Expm1(vfexpm1SC[i]); !alike(expm1SC[i], f) {
  2129  			t.Errorf("Expm1(%g) = %g, want %g", vfexpm1SC[i], f, expm1SC[i])
  2130  		}
  2131  	}
  2132  }
  2133  
  2134  func TestExp2(t *testing.T) {
  2135  	testExp2(t, Exp2, "Exp2")
  2136  	testExp2(t, Exp2Go, "Exp2Go")
  2137  }
  2138  
  2139  func testExp2(t *testing.T, Exp2 func(float64) float64, name string) {
  2140  	for i := 0; i < len(vf); i++ {
  2141  		if f := Exp2(vf[i]); !close(exp2[i], f) {
  2142  			t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp2[i])
  2143  		}
  2144  	}
  2145  	for i := 0; i < len(vfexp2SC); i++ {
  2146  		if f := Exp2(vfexp2SC[i]); !alike(exp2SC[i], f) {
  2147  			t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
  2148  		}
  2149  	}
  2150  	for n := -1074; n < 1024; n++ {
  2151  		f := Exp2(float64(n))
  2152  		vf := Ldexp(1, n)
  2153  		if f != vf {
  2154  			t.Errorf("%s(%d) = %g, want %g", name, n, f, vf)
  2155  		}
  2156  	}
  2157  }
  2158  
  2159  func TestAbs(t *testing.T) {
  2160  	for i := 0; i < len(vf); i++ {
  2161  		if f := Abs(vf[i]); fabs[i] != f {
  2162  			t.Errorf("Abs(%g) = %g, want %g", vf[i], f, fabs[i])
  2163  		}
  2164  	}
  2165  	for i := 0; i < len(vffabsSC); i++ {
  2166  		if f := Abs(vffabsSC[i]); !alike(fabsSC[i], f) {
  2167  			t.Errorf("Abs(%g) = %g, want %g", vffabsSC[i], f, fabsSC[i])
  2168  		}
  2169  	}
  2170  }
  2171  
  2172  func TestDim(t *testing.T) {
  2173  	for i := 0; i < len(vf); i++ {
  2174  		if f := Dim(vf[i], 0); fdim[i] != f {
  2175  			t.Errorf("Dim(%g, %g) = %g, want %g", vf[i], 0.0, f, fdim[i])
  2176  		}
  2177  	}
  2178  	for i := 0; i < len(vffdimSC); i++ {
  2179  		if f := Dim(vffdimSC[i][0], vffdimSC[i][1]); !alike(fdimSC[i], f) {
  2180  			t.Errorf("Dim(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fdimSC[i])
  2181  		}
  2182  	}
  2183  	for i := 0; i < len(vffdim2SC); i++ {
  2184  		if f := Dim(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fdimSC[i], f) {
  2185  			t.Errorf("Dim(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fdimSC[i])
  2186  		}
  2187  	}
  2188  }
  2189  
  2190  func TestFloor(t *testing.T) {
  2191  	for i := 0; i < len(vf); i++ {
  2192  		if f := Floor(vf[i]); floor[i] != f {
  2193  			t.Errorf("Floor(%g) = %g, want %g", vf[i], f, floor[i])
  2194  		}
  2195  	}
  2196  	for i := 0; i < len(vfceilSC); i++ {
  2197  		if f := Floor(vfceilSC[i]); !alike(ceilSC[i], f) {
  2198  			t.Errorf("Floor(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
  2199  		}
  2200  	}
  2201  }
  2202  
  2203  func TestMax(t *testing.T) {
  2204  	for i := 0; i < len(vf); i++ {
  2205  		if f := Max(vf[i], ceil[i]); ceil[i] != f {
  2206  			t.Errorf("Max(%g, %g) = %g, want %g", vf[i], ceil[i], f, ceil[i])
  2207  		}
  2208  	}
  2209  	for i := 0; i < len(vffdimSC); i++ {
  2210  		if f := Max(vffdimSC[i][0], vffdimSC[i][1]); !alike(fmaxSC[i], f) {
  2211  			t.Errorf("Max(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fmaxSC[i])
  2212  		}
  2213  	}
  2214  	for i := 0; i < len(vffdim2SC); i++ {
  2215  		if f := Max(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fmaxSC[i], f) {
  2216  			t.Errorf("Max(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fmaxSC[i])
  2217  		}
  2218  	}
  2219  }
  2220  
  2221  func TestMin(t *testing.T) {
  2222  	for i := 0; i < len(vf); i++ {
  2223  		if f := Min(vf[i], floor[i]); floor[i] != f {
  2224  			t.Errorf("Min(%g, %g) = %g, want %g", vf[i], floor[i], f, floor[i])
  2225  		}
  2226  	}
  2227  	for i := 0; i < len(vffdimSC); i++ {
  2228  		if f := Min(vffdimSC[i][0], vffdimSC[i][1]); !alike(fminSC[i], f) {
  2229  			t.Errorf("Min(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fminSC[i])
  2230  		}
  2231  	}
  2232  	for i := 0; i < len(vffdim2SC); i++ {
  2233  		if f := Min(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fminSC[i], f) {
  2234  			t.Errorf("Min(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fminSC[i])
  2235  		}
  2236  	}
  2237  }
  2238  
  2239  func TestMod(t *testing.T) {
  2240  	for i := 0; i < len(vf); i++ {
  2241  		if f := Mod(10, vf[i]); fmod[i] != f {
  2242  			t.Errorf("Mod(10, %g) = %g, want %g", vf[i], f, fmod[i])
  2243  		}
  2244  	}
  2245  	for i := 0; i < len(vffmodSC); i++ {
  2246  		if f := Mod(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
  2247  			t.Errorf("Mod(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
  2248  		}
  2249  	}
  2250  }
  2251  
  2252  func TestFrexp(t *testing.T) {
  2253  	for i := 0; i < len(vf); i++ {
  2254  		if f, j := Frexp(vf[i]); !veryclose(frexp[i].f, f) || frexp[i].i != j {
  2255  			t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vf[i], f, j, frexp[i].f, frexp[i].i)
  2256  		}
  2257  	}
  2258  	for i := 0; i < len(vffrexpSC); i++ {
  2259  		if f, j := Frexp(vffrexpSC[i]); !alike(frexpSC[i].f, f) || frexpSC[i].i != j {
  2260  			t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpSC[i], f, j, frexpSC[i].f, frexpSC[i].i)
  2261  		}
  2262  	}
  2263  	for i := 0; i < len(vffrexpBC); i++ {
  2264  		if f, j := Frexp(vffrexpBC[i]); !alike(frexpBC[i].f, f) || frexpBC[i].i != j {
  2265  			t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpBC[i], f, j, frexpBC[i].f, frexpBC[i].i)
  2266  		}
  2267  	}
  2268  }
  2269  
  2270  func TestGamma(t *testing.T) {
  2271  	for i := 0; i < len(vf); i++ {
  2272  		if f := Gamma(vf[i]); !close(gamma[i], f) {
  2273  			t.Errorf("Gamma(%g) = %g, want %g", vf[i], f, gamma[i])
  2274  		}
  2275  	}
  2276  	for _, g := range vfgamma {
  2277  		f := Gamma(g[0])
  2278  		var ok bool
  2279  		if IsNaN(g[1]) || IsInf(g[1], 0) || g[1] == 0 || f == 0 {
  2280  			ok = alike(g[1], f)
  2281  		} else if g[0] > -50 && g[0] <= 171 {
  2282  			ok = veryclose(g[1], f)
  2283  		} else {
  2284  			ok = close(g[1], f)
  2285  		}
  2286  		if !ok {
  2287  			t.Errorf("Gamma(%g) = %g, want %g", g[0], f, g[1])
  2288  		}
  2289  	}
  2290  }
  2291  
  2292  func TestHypot(t *testing.T) {
  2293  	for i := 0; i < len(vf); i++ {
  2294  		a := Abs(1e200 * tanh[i] * Sqrt(2))
  2295  		if f := Hypot(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
  2296  			t.Errorf("Hypot(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
  2297  		}
  2298  	}
  2299  	for i := 0; i < len(vfhypotSC); i++ {
  2300  		if f := Hypot(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
  2301  			t.Errorf("Hypot(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
  2302  		}
  2303  	}
  2304  }
  2305  
  2306  func TestHypotGo(t *testing.T) {
  2307  	for i := 0; i < len(vf); i++ {
  2308  		a := Abs(1e200 * tanh[i] * Sqrt(2))
  2309  		if f := HypotGo(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
  2310  			t.Errorf("HypotGo(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
  2311  		}
  2312  	}
  2313  	for i := 0; i < len(vfhypotSC); i++ {
  2314  		if f := HypotGo(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
  2315  			t.Errorf("HypotGo(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
  2316  		}
  2317  	}
  2318  }
  2319  
  2320  func TestIlogb(t *testing.T) {
  2321  	for i := 0; i < len(vf); i++ {
  2322  		a := frexp[i].i - 1 // adjust because fr in the interval [½, 1)
  2323  		if e := Ilogb(vf[i]); a != e {
  2324  			t.Errorf("Ilogb(%g) = %d, want %d", vf[i], e, a)
  2325  		}
  2326  	}
  2327  	for i := 0; i < len(vflogbSC); i++ {
  2328  		if e := Ilogb(vflogbSC[i]); ilogbSC[i] != e {
  2329  			t.Errorf("Ilogb(%g) = %d, want %d", vflogbSC[i], e, ilogbSC[i])
  2330  		}
  2331  	}
  2332  	for i := 0; i < len(vffrexpBC); i++ {
  2333  		if e := Ilogb(vffrexpBC[i]); int(logbBC[i]) != e {
  2334  			t.Errorf("Ilogb(%g) = %d, want %d", vffrexpBC[i], e, int(logbBC[i]))
  2335  		}
  2336  	}
  2337  }
  2338  
  2339  func TestJ0(t *testing.T) {
  2340  	for i := 0; i < len(vf); i++ {
  2341  		if f := J0(vf[i]); !soclose(j0[i], f, 4e-14) {
  2342  			t.Errorf("J0(%g) = %g, want %g", vf[i], f, j0[i])
  2343  		}
  2344  	}
  2345  	for i := 0; i < len(vfj0SC); i++ {
  2346  		if f := J0(vfj0SC[i]); !alike(j0SC[i], f) {
  2347  			t.Errorf("J0(%g) = %g, want %g", vfj0SC[i], f, j0SC[i])
  2348  		}
  2349  	}
  2350  }
  2351  
  2352  func TestJ1(t *testing.T) {
  2353  	for i := 0; i < len(vf); i++ {
  2354  		if f := J1(vf[i]); !close(j1[i], f) {
  2355  			t.Errorf("J1(%g) = %g, want %g", vf[i], f, j1[i])
  2356  		}
  2357  	}
  2358  	for i := 0; i < len(vfj0SC); i++ {
  2359  		if f := J1(vfj0SC[i]); !alike(j1SC[i], f) {
  2360  			t.Errorf("J1(%g) = %g, want %g", vfj0SC[i], f, j1SC[i])
  2361  		}
  2362  	}
  2363  }
  2364  
  2365  func TestJn(t *testing.T) {
  2366  	for i := 0; i < len(vf); i++ {
  2367  		if f := Jn(2, vf[i]); !close(j2[i], f) {
  2368  			t.Errorf("Jn(2, %g) = %g, want %g", vf[i], f, j2[i])
  2369  		}
  2370  		if f := Jn(-3, vf[i]); !close(jM3[i], f) {
  2371  			t.Errorf("Jn(-3, %g) = %g, want %g", vf[i], f, jM3[i])
  2372  		}
  2373  	}
  2374  	for i := 0; i < len(vfj0SC); i++ {
  2375  		if f := Jn(2, vfj0SC[i]); !alike(j2SC[i], f) {
  2376  			t.Errorf("Jn(2, %g) = %g, want %g", vfj0SC[i], f, j2SC[i])
  2377  		}
  2378  		if f := Jn(-3, vfj0SC[i]); !alike(jM3SC[i], f) {
  2379  			t.Errorf("Jn(-3, %g) = %g, want %g", vfj0SC[i], f, jM3SC[i])
  2380  		}
  2381  	}
  2382  }
  2383  
  2384  func TestLdexp(t *testing.T) {
  2385  	for i := 0; i < len(vf); i++ {
  2386  		if f := Ldexp(frexp[i].f, frexp[i].i); !veryclose(vf[i], f) {
  2387  			t.Errorf("Ldexp(%g, %d) = %g, want %g", frexp[i].f, frexp[i].i, f, vf[i])
  2388  		}
  2389  	}
  2390  	for i := 0; i < len(vffrexpSC); i++ {
  2391  		if f := Ldexp(frexpSC[i].f, frexpSC[i].i); !alike(vffrexpSC[i], f) {
  2392  			t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpSC[i].f, frexpSC[i].i, f, vffrexpSC[i])
  2393  		}
  2394  	}
  2395  	for i := 0; i < len(vfldexpSC); i++ {
  2396  		if f := Ldexp(vfldexpSC[i].f, vfldexpSC[i].i); !alike(ldexpSC[i], f) {
  2397  			t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpSC[i].f, vfldexpSC[i].i, f, ldexpSC[i])
  2398  		}
  2399  	}
  2400  	for i := 0; i < len(vffrexpBC); i++ {
  2401  		if f := Ldexp(frexpBC[i].f, frexpBC[i].i); !alike(vffrexpBC[i], f) {
  2402  			t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpBC[i].f, frexpBC[i].i, f, vffrexpBC[i])
  2403  		}
  2404  	}
  2405  	for i := 0; i < len(vfldexpBC); i++ {
  2406  		if f := Ldexp(vfldexpBC[i].f, vfldexpBC[i].i); !alike(ldexpBC[i], f) {
  2407  			t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpBC[i].f, vfldexpBC[i].i, f, ldexpBC[i])
  2408  		}
  2409  	}
  2410  }
  2411  
  2412  func TestLgamma(t *testing.T) {
  2413  	for i := 0; i < len(vf); i++ {
  2414  		if f, s := Lgamma(vf[i]); !close(lgamma[i].f, f) || lgamma[i].i != s {
  2415  			t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vf[i], f, s, lgamma[i].f, lgamma[i].i)
  2416  		}
  2417  	}
  2418  	for i := 0; i < len(vflgammaSC); i++ {
  2419  		if f, s := Lgamma(vflgammaSC[i]); !alike(lgammaSC[i].f, f) || lgammaSC[i].i != s {
  2420  			t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vflgammaSC[i], f, s, lgammaSC[i].f, lgammaSC[i].i)
  2421  		}
  2422  	}
  2423  }
  2424  
  2425  func TestLog(t *testing.T) {
  2426  	for i := 0; i < len(vf); i++ {
  2427  		a := Abs(vf[i])
  2428  		if f := Log(a); log[i] != f {
  2429  			t.Errorf("Log(%g) = %g, want %g", a, f, log[i])
  2430  		}
  2431  	}
  2432  	if f := Log(10); f != Ln10 {
  2433  		t.Errorf("Log(%g) = %g, want %g", 10.0, f, Ln10)
  2434  	}
  2435  	for i := 0; i < len(vflogSC); i++ {
  2436  		if f := Log(vflogSC[i]); !alike(logSC[i], f) {
  2437  			t.Errorf("Log(%g) = %g, want %g", vflogSC[i], f, logSC[i])
  2438  		}
  2439  	}
  2440  }
  2441  
  2442  func TestLogb(t *testing.T) {
  2443  	for i := 0; i < len(vf); i++ {
  2444  		if f := Logb(vf[i]); logb[i] != f {
  2445  			t.Errorf("Logb(%g) = %g, want %g", vf[i], f, logb[i])
  2446  		}
  2447  	}
  2448  	for i := 0; i < len(vflogbSC); i++ {
  2449  		if f := Logb(vflogbSC[i]); !alike(logbSC[i], f) {
  2450  			t.Errorf("Logb(%g) = %g, want %g", vflogbSC[i], f, logbSC[i])
  2451  		}
  2452  	}
  2453  	for i := 0; i < len(vffrexpBC); i++ {
  2454  		if f := Logb(vffrexpBC[i]); !alike(logbBC[i], f) {
  2455  			t.Errorf("Logb(%g) = %g, want %g", vffrexpBC[i], f, logbBC[i])
  2456  		}
  2457  	}
  2458  }
  2459  
  2460  func TestLog10(t *testing.T) {
  2461  	for i := 0; i < len(vf); i++ {
  2462  		a := Abs(vf[i])
  2463  		if f := Log10(a); !veryclose(log10[i], f) {
  2464  			t.Errorf("Log10(%g) = %g, want %g", a, f, log10[i])
  2465  		}
  2466  	}
  2467  	if f := Log10(E); f != Log10E {
  2468  		t.Errorf("Log10(%g) = %g, want %g", E, f, Log10E)
  2469  	}
  2470  	for i := 0; i < len(vflogSC); i++ {
  2471  		if f := Log10(vflogSC[i]); !alike(logSC[i], f) {
  2472  			t.Errorf("Log10(%g) = %g, want %g", vflogSC[i], f, logSC[i])
  2473  		}
  2474  	}
  2475  }
  2476  
  2477  func TestLog1p(t *testing.T) {
  2478  	for i := 0; i < len(vf); i++ {
  2479  		a := vf[i] / 100
  2480  		if f := Log1p(a); !veryclose(log1p[i], f) {
  2481  			t.Errorf("Log1p(%g) = %g, want %g", a, f, log1p[i])
  2482  		}
  2483  	}
  2484  	a := 9.0
  2485  	if f := Log1p(a); f != Ln10 {
  2486  		t.Errorf("Log1p(%g) = %g, want %g", a, f, Ln10)
  2487  	}
  2488  	for i := 0; i < len(vflogSC); i++ {
  2489  		if f := Log1p(vflog1pSC[i]); !alike(log1pSC[i], f) {
  2490  			t.Errorf("Log1p(%g) = %g, want %g", vflog1pSC[i], f, log1pSC[i])
  2491  		}
  2492  	}
  2493  }
  2494  
  2495  func TestLog2(t *testing.T) {
  2496  	for i := 0; i < len(vf); i++ {
  2497  		a := Abs(vf[i])
  2498  		if f := Log2(a); !veryclose(log2[i], f) {
  2499  			t.Errorf("Log2(%g) = %g, want %g", a, f, log2[i])
  2500  		}
  2501  	}
  2502  	if f := Log2(E); f != Log2E {
  2503  		t.Errorf("Log2(%g) = %g, want %g", E, f, Log2E)
  2504  	}
  2505  	for i := 0; i < len(vflogSC); i++ {
  2506  		if f := Log2(vflogSC[i]); !alike(logSC[i], f) {
  2507  			t.Errorf("Log2(%g) = %g, want %g", vflogSC[i], f, logSC[i])
  2508  		}
  2509  	}
  2510  	for i := -1074; i <= 1023; i++ {
  2511  		f := Ldexp(1, i)
  2512  		l := Log2(f)
  2513  		if l != float64(i) {
  2514  			t.Errorf("Log2(2**%d) = %g, want %d", i, l, i)
  2515  		}
  2516  	}
  2517  }
  2518  
  2519  func TestModf(t *testing.T) {
  2520  	for i := 0; i < len(vf); i++ {
  2521  		if f, g := Modf(vf[i]); !veryclose(modf[i][0], f) || !veryclose(modf[i][1], g) {
  2522  			t.Errorf("Modf(%g) = %g, %g, want %g, %g", vf[i], f, g, modf[i][0], modf[i][1])
  2523  		}
  2524  	}
  2525  	for i := 0; i < len(vfmodfSC); i++ {
  2526  		if f, g := Modf(vfmodfSC[i]); !alike(modfSC[i][0], f) || !alike(modfSC[i][1], g) {
  2527  			t.Errorf("Modf(%g) = %g, %g, want %g, %g", vfmodfSC[i], f, g, modfSC[i][0], modfSC[i][1])
  2528  		}
  2529  	}
  2530  }
  2531  
  2532  func TestNextafter32(t *testing.T) {
  2533  	for i := 0; i < len(vf); i++ {
  2534  		vfi := float32(vf[i])
  2535  		if f := Nextafter32(vfi, 10); nextafter32[i] != f {
  2536  			t.Errorf("Nextafter32(%g, %g) = %g want %g", vfi, 10.0, f, nextafter32[i])
  2537  		}
  2538  	}
  2539  	for i := 0; i < len(vfnextafter32SC); i++ {
  2540  		if f := Nextafter32(vfnextafter32SC[i][0], vfnextafter32SC[i][1]); !alike(float64(nextafter32SC[i]), float64(f)) {
  2541  			t.Errorf("Nextafter32(%g, %g) = %g want %g", vfnextafter32SC[i][0], vfnextafter32SC[i][1], f, nextafter32SC[i])
  2542  		}
  2543  	}
  2544  }
  2545  
  2546  func TestNextafter64(t *testing.T) {
  2547  	for i := 0; i < len(vf); i++ {
  2548  		if f := Nextafter(vf[i], 10); nextafter64[i] != f {
  2549  			t.Errorf("Nextafter64(%g, %g) = %g want %g", vf[i], 10.0, f, nextafter64[i])
  2550  		}
  2551  	}
  2552  	for i := 0; i < len(vfnextafter64SC); i++ {
  2553  		if f := Nextafter(vfnextafter64SC[i][0], vfnextafter64SC[i][1]); !alike(nextafter64SC[i], f) {
  2554  			t.Errorf("Nextafter64(%g, %g) = %g want %g", vfnextafter64SC[i][0], vfnextafter64SC[i][1], f, nextafter64SC[i])
  2555  		}
  2556  	}
  2557  }
  2558  
  2559  func TestPow(t *testing.T) {
  2560  	for i := 0; i < len(vf); i++ {
  2561  		if f := Pow(10, vf[i]); !close(pow[i], f) {
  2562  			t.Errorf("Pow(10, %g) = %g, want %g", vf[i], f, pow[i])
  2563  		}
  2564  	}
  2565  	for i := 0; i < len(vfpowSC); i++ {
  2566  		if f := Pow(vfpowSC[i][0], vfpowSC[i][1]); !alike(powSC[i], f) {
  2567  			t.Errorf("Pow(%g, %g) = %g, want %g", vfpowSC[i][0], vfpowSC[i][1], f, powSC[i])
  2568  		}
  2569  	}
  2570  }
  2571  
  2572  func TestPow10(t *testing.T) {
  2573  	for i := 0; i < len(vfpow10SC); i++ {
  2574  		if f := Pow10(vfpow10SC[i]); !alike(pow10SC[i], f) {
  2575  			t.Errorf("Pow10(%d) = %g, want %g", vfpow10SC[i], f, pow10SC[i])
  2576  		}
  2577  	}
  2578  }
  2579  
  2580  func TestRemainder(t *testing.T) {
  2581  	for i := 0; i < len(vf); i++ {
  2582  		if f := Remainder(10, vf[i]); remainder[i] != f {
  2583  			t.Errorf("Remainder(10, %g) = %g, want %g", vf[i], f, remainder[i])
  2584  		}
  2585  	}
  2586  	for i := 0; i < len(vffmodSC); i++ {
  2587  		if f := Remainder(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
  2588  			t.Errorf("Remainder(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
  2589  		}
  2590  	}
  2591  }
  2592  
  2593  func TestSignbit(t *testing.T) {
  2594  	for i := 0; i < len(vf); i++ {
  2595  		if f := Signbit(vf[i]); signbit[i] != f {
  2596  			t.Errorf("Signbit(%g) = %t, want %t", vf[i], f, signbit[i])
  2597  		}
  2598  	}
  2599  	for i := 0; i < len(vfsignbitSC); i++ {
  2600  		if f := Signbit(vfsignbitSC[i]); signbitSC[i] != f {
  2601  			t.Errorf("Signbit(%g) = %t, want %t", vfsignbitSC[i], f, signbitSC[i])
  2602  		}
  2603  	}
  2604  }
  2605  func TestSin(t *testing.T) {
  2606  	for i := 0; i < len(vf); i++ {
  2607  		if f := Sin(vf[i]); !veryclose(sin[i], f) {
  2608  			t.Errorf("Sin(%g) = %g, want %g", vf[i], f, sin[i])
  2609  		}
  2610  	}
  2611  	for i := 0; i < len(vfsinSC); i++ {
  2612  		if f := Sin(vfsinSC[i]); !alike(sinSC[i], f) {
  2613  			t.Errorf("Sin(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
  2614  		}
  2615  	}
  2616  }
  2617  
  2618  func TestSincos(t *testing.T) {
  2619  	for i := 0; i < len(vf); i++ {
  2620  		if s, c := Sincos(vf[i]); !veryclose(sin[i], s) || !veryclose(cos[i], c) {
  2621  			t.Errorf("Sincos(%g) = %g, %g want %g, %g", vf[i], s, c, sin[i], cos[i])
  2622  		}
  2623  	}
  2624  }
  2625  
  2626  func TestSinh(t *testing.T) {
  2627  	for i := 0; i < len(vf); i++ {
  2628  		if f := Sinh(vf[i]); !close(sinh[i], f) {
  2629  			t.Errorf("Sinh(%g) = %g, want %g", vf[i], f, sinh[i])
  2630  		}
  2631  	}
  2632  	for i := 0; i < len(vfsinhSC); i++ {
  2633  		if f := Sinh(vfsinhSC[i]); !alike(sinhSC[i], f) {
  2634  			t.Errorf("Sinh(%g) = %g, want %g", vfsinhSC[i], f, sinhSC[i])
  2635  		}
  2636  	}
  2637  }
  2638  
  2639  func TestSqrt(t *testing.T) {
  2640  	for i := 0; i < len(vf); i++ {
  2641  		a := Abs(vf[i])
  2642  		if f := SqrtGo(a); sqrt[i] != f {
  2643  			t.Errorf("SqrtGo(%g) = %g, want %g", a, f, sqrt[i])
  2644  		}
  2645  		a = Abs(vf[i])
  2646  		if f := Sqrt(a); sqrt[i] != f {
  2647  			t.Errorf("Sqrt(%g) = %g, want %g", a, f, sqrt[i])
  2648  		}
  2649  	}
  2650  	for i := 0; i < len(vfsqrtSC); i++ {
  2651  		if f := SqrtGo(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
  2652  			t.Errorf("SqrtGo(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
  2653  		}
  2654  		if f := Sqrt(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
  2655  			t.Errorf("Sqrt(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
  2656  		}
  2657  	}
  2658  }
  2659  
  2660  func TestTan(t *testing.T) {
  2661  	for i := 0; i < len(vf); i++ {
  2662  		if f := Tan(vf[i]); !veryclose(tan[i], f) {
  2663  			t.Errorf("Tan(%g) = %g, want %g", vf[i], f, tan[i])
  2664  		}
  2665  	}
  2666  	// same special cases as Sin
  2667  	for i := 0; i < len(vfsinSC); i++ {
  2668  		if f := Tan(vfsinSC[i]); !alike(sinSC[i], f) {
  2669  			t.Errorf("Tan(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
  2670  		}
  2671  	}
  2672  }
  2673  
  2674  func TestTanh(t *testing.T) {
  2675  	for i := 0; i < len(vf); i++ {
  2676  		if f := Tanh(vf[i]); !veryclose(tanh[i], f) {
  2677  			t.Errorf("Tanh(%g) = %g, want %g", vf[i], f, tanh[i])
  2678  		}
  2679  	}
  2680  	for i := 0; i < len(vftanhSC); i++ {
  2681  		if f := Tanh(vftanhSC[i]); !alike(tanhSC[i], f) {
  2682  			t.Errorf("Tanh(%g) = %g, want %g", vftanhSC[i], f, tanhSC[i])
  2683  		}
  2684  	}
  2685  }
  2686  
  2687  func TestTrunc(t *testing.T) {
  2688  	for i := 0; i < len(vf); i++ {
  2689  		if f := Trunc(vf[i]); trunc[i] != f {
  2690  			t.Errorf("Trunc(%g) = %g, want %g", vf[i], f, trunc[i])
  2691  		}
  2692  	}
  2693  	for i := 0; i < len(vfceilSC); i++ {
  2694  		if f := Trunc(vfceilSC[i]); !alike(ceilSC[i], f) {
  2695  			t.Errorf("Trunc(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
  2696  		}
  2697  	}
  2698  }
  2699  
  2700  func TestY0(t *testing.T) {
  2701  	for i := 0; i < len(vf); i++ {
  2702  		a := Abs(vf[i])
  2703  		if f := Y0(a); !close(y0[i], f) {
  2704  			t.Errorf("Y0(%g) = %g, want %g", a, f, y0[i])
  2705  		}
  2706  	}
  2707  	for i := 0; i < len(vfy0SC); i++ {
  2708  		if f := Y0(vfy0SC[i]); !alike(y0SC[i], f) {
  2709  			t.Errorf("Y0(%g) = %g, want %g", vfy0SC[i], f, y0SC[i])
  2710  		}
  2711  	}
  2712  }
  2713  
  2714  func TestY1(t *testing.T) {
  2715  	for i := 0; i < len(vf); i++ {
  2716  		a := Abs(vf[i])
  2717  		if f := Y1(a); !soclose(y1[i], f, 2e-14) {
  2718  			t.Errorf("Y1(%g) = %g, want %g", a, f, y1[i])
  2719  		}
  2720  	}
  2721  	for i := 0; i < len(vfy0SC); i++ {
  2722  		if f := Y1(vfy0SC[i]); !alike(y1SC[i], f) {
  2723  			t.Errorf("Y1(%g) = %g, want %g", vfy0SC[i], f, y1SC[i])
  2724  		}
  2725  	}
  2726  }
  2727  
  2728  func TestYn(t *testing.T) {
  2729  	for i := 0; i < len(vf); i++ {
  2730  		a := Abs(vf[i])
  2731  		if f := Yn(2, a); !close(y2[i], f) {
  2732  			t.Errorf("Yn(2, %g) = %g, want %g", a, f, y2[i])
  2733  		}
  2734  		if f := Yn(-3, a); !close(yM3[i], f) {
  2735  			t.Errorf("Yn(-3, %g) = %g, want %g", a, f, yM3[i])
  2736  		}
  2737  	}
  2738  	for i := 0; i < len(vfy0SC); i++ {
  2739  		if f := Yn(2, vfy0SC[i]); !alike(y2SC[i], f) {
  2740  			t.Errorf("Yn(2, %g) = %g, want %g", vfy0SC[i], f, y2SC[i])
  2741  		}
  2742  		if f := Yn(-3, vfy0SC[i]); !alike(yM3SC[i], f) {
  2743  			t.Errorf("Yn(-3, %g) = %g, want %g", vfy0SC[i], f, yM3SC[i])
  2744  		}
  2745  	}
  2746  	if f := Yn(0, 0); !alike(Inf(-1), f) {
  2747  		t.Errorf("Yn(0, 0) = %g, want %g", f, Inf(-1))
  2748  	}
  2749  }
  2750  
  2751  // Check that math functions of high angle values
  2752  // return accurate results. [Since (vf[i] + large) - large != vf[i],
  2753  // testing for Trig(vf[i] + large) == Trig(vf[i]), where large is
  2754  // a multiple of 2*Pi, is misleading.]
  2755  func TestLargeCos(t *testing.T) {
  2756  	large := float64(100000 * Pi)
  2757  	for i := 0; i < len(vf); i++ {
  2758  		f1 := cosLarge[i]
  2759  		f2 := Cos(vf[i] + large)
  2760  		if !close(f1, f2) {
  2761  			t.Errorf("Cos(%g) = %g, want %g", vf[i]+large, f2, f1)
  2762  		}
  2763  	}
  2764  }
  2765  
  2766  func TestLargeSin(t *testing.T) {
  2767  	large := float64(100000 * Pi)
  2768  	for i := 0; i < len(vf); i++ {
  2769  		f1 := sinLarge[i]
  2770  		f2 := Sin(vf[i] + large)
  2771  		if !close(f1, f2) {
  2772  			t.Errorf("Sin(%g) = %g, want %g", vf[i]+large, f2, f1)
  2773  		}
  2774  	}
  2775  }
  2776  
  2777  func TestLargeSincos(t *testing.T) {
  2778  	large := float64(100000 * Pi)
  2779  	for i := 0; i < len(vf); i++ {
  2780  		f1, g1 := sinLarge[i], cosLarge[i]
  2781  		f2, g2 := Sincos(vf[i] + large)
  2782  		if !close(f1, f2) || !close(g1, g2) {
  2783  			t.Errorf("Sincos(%g) = %g, %g, want %g, %g", vf[i]+large, f2, g2, f1, g1)
  2784  		}
  2785  	}
  2786  }
  2787  
  2788  func TestLargeTan(t *testing.T) {
  2789  	large := float64(100000 * Pi)
  2790  	for i := 0; i < len(vf); i++ {
  2791  		f1 := tanLarge[i]
  2792  		f2 := Tan(vf[i] + large)
  2793  		if !close(f1, f2) {
  2794  			t.Errorf("Tan(%g) = %g, want %g", vf[i]+large, f2, f1)
  2795  		}
  2796  	}
  2797  }
  2798  
  2799  // Check that math constants are accepted by compiler
  2800  // and have right value (assumes strconv.ParseFloat works).
  2801  // https://golang.org/issue/201
  2802  
  2803  type floatTest struct {
  2804  	val  interface{}
  2805  	name string
  2806  	str  string
  2807  }
  2808  
  2809  var floatTests = []floatTest{
  2810  	{float64(MaxFloat64), "MaxFloat64", "1.7976931348623157e+308"},
  2811  	{float64(SmallestNonzeroFloat64), "SmallestNonzeroFloat64", "5e-324"},
  2812  	{float32(MaxFloat32), "MaxFloat32", "3.4028235e+38"},
  2813  	{float32(SmallestNonzeroFloat32), "SmallestNonzeroFloat32", "1e-45"},
  2814  }
  2815  
  2816  func TestFloatMinMax(t *testing.T) {
  2817  	for _, tt := range floatTests {
  2818  		s := fmt.Sprint(tt.val)
  2819  		if s != tt.str {
  2820  			t.Errorf("Sprint(%v) = %s, want %s", tt.name, s, tt.str)
  2821  		}
  2822  	}
  2823  }
  2824  
  2825  // Benchmarks
  2826  
  2827  // Global exported variables are used to store the
  2828  // return values of functions measured in the benchmarks.
  2829  // Storing the results in these variables prevents the compiler
  2830  // from completely optimizing the benchmarked functions away.
  2831  var (
  2832  	GlobalI int
  2833  	GlobalB bool
  2834  	GlobalF float64
  2835  )
  2836  
  2837  func BenchmarkAcos(b *testing.B) {
  2838  	x := 0.0
  2839  	for i := 0; i < b.N; i++ {
  2840  		x = Acos(.5)
  2841  	}
  2842  	GlobalF = x
  2843  }
  2844  
  2845  func BenchmarkAcosh(b *testing.B) {
  2846  	x := 0.0
  2847  	for i := 0; i < b.N; i++ {
  2848  		x = Acosh(1.5)
  2849  	}
  2850  	GlobalF = x
  2851  }
  2852  
  2853  func BenchmarkAsin(b *testing.B) {
  2854  	x := 0.0
  2855  	for i := 0; i < b.N; i++ {
  2856  		x = Asin(.5)
  2857  	}
  2858  	GlobalF = x
  2859  }
  2860  
  2861  func BenchmarkAsinh(b *testing.B) {
  2862  	x := 0.0
  2863  	for i := 0; i < b.N; i++ {
  2864  		x = Asinh(.5)
  2865  	}
  2866  	GlobalF = x
  2867  }
  2868  
  2869  func BenchmarkAtan(b *testing.B) {
  2870  	x := 0.0
  2871  	for i := 0; i < b.N; i++ {
  2872  		x = Atan(.5)
  2873  	}
  2874  	GlobalF = x
  2875  }
  2876  
  2877  func BenchmarkAtanh(b *testing.B) {
  2878  	x := 0.0
  2879  	for i := 0; i < b.N; i++ {
  2880  		x = Atanh(.5)
  2881  	}
  2882  	GlobalF = x
  2883  }
  2884  
  2885  func BenchmarkAtan2(b *testing.B) {
  2886  	x := 0.0
  2887  	for i := 0; i < b.N; i++ {
  2888  		x = Atan2(.5, 1)
  2889  	}
  2890  	GlobalF = x
  2891  }
  2892  
  2893  func BenchmarkCbrt(b *testing.B) {
  2894  	x := 0.0
  2895  	for i := 0; i < b.N; i++ {
  2896  		x = Cbrt(10)
  2897  	}
  2898  	GlobalF = x
  2899  }
  2900  
  2901  func BenchmarkCeil(b *testing.B) {
  2902  	x := 0.0
  2903  	for i := 0; i < b.N; i++ {
  2904  		x = Ceil(.5)
  2905  	}
  2906  	GlobalF = x
  2907  }
  2908  
  2909  func BenchmarkCopysign(b *testing.B) {
  2910  	x := 0.0
  2911  	for i := 0; i < b.N; i++ {
  2912  		x = Copysign(.5, -1)
  2913  	}
  2914  	GlobalF = x
  2915  }
  2916  
  2917  func BenchmarkCos(b *testing.B) {
  2918  	x := 0.0
  2919  	for i := 0; i < b.N; i++ {
  2920  		x = Cos(.5)
  2921  	}
  2922  	GlobalF = x
  2923  }
  2924  
  2925  func BenchmarkCosh(b *testing.B) {
  2926  	x := 0.0
  2927  	for i := 0; i < b.N; i++ {
  2928  		x = Cosh(2.5)
  2929  	}
  2930  	GlobalF = x
  2931  }
  2932  
  2933  func BenchmarkErf(b *testing.B) {
  2934  	x := 0.0
  2935  	for i := 0; i < b.N; i++ {
  2936  		x = Erf(.5)
  2937  	}
  2938  	GlobalF = x
  2939  }
  2940  
  2941  func BenchmarkErfc(b *testing.B) {
  2942  	x := 0.0
  2943  	for i := 0; i < b.N; i++ {
  2944  		x = Erfc(.5)
  2945  	}
  2946  	GlobalF = x
  2947  }
  2948  
  2949  func BenchmarkExp(b *testing.B) {
  2950  	x := 0.0
  2951  	for i := 0; i < b.N; i++ {
  2952  		x = Exp(.5)
  2953  	}
  2954  	GlobalF = x
  2955  }
  2956  
  2957  func BenchmarkExpGo(b *testing.B) {
  2958  	x := 0.0
  2959  	for i := 0; i < b.N; i++ {
  2960  		x = ExpGo(.5)
  2961  	}
  2962  	GlobalF = x
  2963  }
  2964  
  2965  func BenchmarkExpm1(b *testing.B) {
  2966  	x := 0.0
  2967  	for i := 0; i < b.N; i++ {
  2968  		x = Expm1(.5)
  2969  	}
  2970  	GlobalF = x
  2971  }
  2972  
  2973  func BenchmarkExp2(b *testing.B) {
  2974  	x := 0.0
  2975  	for i := 0; i < b.N; i++ {
  2976  		x = Exp2(.5)
  2977  	}
  2978  	GlobalF = x
  2979  }
  2980  
  2981  func BenchmarkExp2Go(b *testing.B) {
  2982  	x := 0.0
  2983  	for i := 0; i < b.N; i++ {
  2984  		x = Exp2Go(.5)
  2985  	}
  2986  	GlobalF = x
  2987  }
  2988  
  2989  func BenchmarkAbs(b *testing.B) {
  2990  	x := 0.0
  2991  	for i := 0; i < b.N; i++ {
  2992  		x = Abs(.5)
  2993  	}
  2994  	GlobalF = x
  2995  
  2996  }
  2997  
  2998  func BenchmarkDim(b *testing.B) {
  2999  	x := 0.0
  3000  	for i := 0; i < b.N; i++ {
  3001  		x = Dim(10, 3)
  3002  	}
  3003  	GlobalF = x
  3004  }
  3005  
  3006  func BenchmarkFloor(b *testing.B) {
  3007  	x := 0.0
  3008  	for i := 0; i < b.N; i++ {
  3009  		x = Floor(.5)
  3010  	}
  3011  	GlobalF = x
  3012  }
  3013  
  3014  func BenchmarkMax(b *testing.B) {
  3015  	x := 0.0
  3016  	for i := 0; i < b.N; i++ {
  3017  		x = Max(10, 3)
  3018  	}
  3019  	GlobalF = x
  3020  }
  3021  
  3022  func BenchmarkMin(b *testing.B) {
  3023  	x := 0.0
  3024  	for i := 0; i < b.N; i++ {
  3025  		x = Min(10, 3)
  3026  	}
  3027  	GlobalF = x
  3028  }
  3029  
  3030  func BenchmarkMod(b *testing.B) {
  3031  	x := 0.0
  3032  	for i := 0; i < b.N; i++ {
  3033  		x = Mod(10, 3)
  3034  	}
  3035  	GlobalF = x
  3036  }
  3037  
  3038  func BenchmarkFrexp(b *testing.B) {
  3039  	x := 0.0
  3040  	y := 0
  3041  	for i := 0; i < b.N; i++ {
  3042  		x, y = Frexp(8)
  3043  	}
  3044  	GlobalF = x
  3045  	GlobalI = y
  3046  }
  3047  
  3048  func BenchmarkGamma(b *testing.B) {
  3049  	x := 0.0
  3050  	for i := 0; i < b.N; i++ {
  3051  		x = Gamma(2.5)
  3052  	}
  3053  	GlobalF = x
  3054  }
  3055  
  3056  func BenchmarkHypot(b *testing.B) {
  3057  	x := 0.0
  3058  	for i := 0; i < b.N; i++ {
  3059  		x = Hypot(3, 4)
  3060  	}
  3061  	GlobalF = x
  3062  }
  3063  
  3064  func BenchmarkHypotGo(b *testing.B) {
  3065  	x := 0.0
  3066  	for i := 0; i < b.N; i++ {
  3067  		x = HypotGo(3, 4)
  3068  	}
  3069  	GlobalF = x
  3070  }
  3071  
  3072  func BenchmarkIlogb(b *testing.B) {
  3073  	x := 0
  3074  	for i := 0; i < b.N; i++ {
  3075  		x = Ilogb(.5)
  3076  	}
  3077  	GlobalI = x
  3078  }
  3079  
  3080  func BenchmarkJ0(b *testing.B) {
  3081  	x := 0.0
  3082  	for i := 0; i < b.N; i++ {
  3083  		x = J0(2.5)
  3084  	}
  3085  	GlobalF = x
  3086  }
  3087  
  3088  func BenchmarkJ1(b *testing.B) {
  3089  	x := 0.0
  3090  	for i := 0; i < b.N; i++ {
  3091  		x = J1(2.5)
  3092  	}
  3093  	GlobalF = x
  3094  }
  3095  
  3096  func BenchmarkJn(b *testing.B) {
  3097  	x := 0.0
  3098  	for i := 0; i < b.N; i++ {
  3099  		x = Jn(2, 2.5)
  3100  	}
  3101  	GlobalF = x
  3102  }
  3103  
  3104  func BenchmarkLdexp(b *testing.B) {
  3105  	x := 0.0
  3106  	for i := 0; i < b.N; i++ {
  3107  		x = Ldexp(.5, 2)
  3108  	}
  3109  	GlobalF = x
  3110  }
  3111  
  3112  func BenchmarkLgamma(b *testing.B) {
  3113  	x := 0.0
  3114  	y := 0
  3115  	for i := 0; i < b.N; i++ {
  3116  		x, y = Lgamma(2.5)
  3117  	}
  3118  	GlobalF = x
  3119  	GlobalI = y
  3120  }
  3121  
  3122  func BenchmarkLog(b *testing.B) {
  3123  	x := 0.0
  3124  	for i := 0; i < b.N; i++ {
  3125  		x = Log(.5)
  3126  	}
  3127  	GlobalF = x
  3128  }
  3129  
  3130  func BenchmarkLogb(b *testing.B) {
  3131  	x := 0.0
  3132  	for i := 0; i < b.N; i++ {
  3133  		x = Logb(.5)
  3134  	}
  3135  	GlobalF = x
  3136  }
  3137  
  3138  func BenchmarkLog1p(b *testing.B) {
  3139  	x := 0.0
  3140  	for i := 0; i < b.N; i++ {
  3141  		x = Log1p(.5)
  3142  	}
  3143  	GlobalF = x
  3144  }
  3145  
  3146  func BenchmarkLog10(b *testing.B) {
  3147  	x := 0.0
  3148  	for i := 0; i < b.N; i++ {
  3149  		x = Log10(.5)
  3150  	}
  3151  	GlobalF = x
  3152  }
  3153  
  3154  func BenchmarkLog2(b *testing.B) {
  3155  	x := 0.0
  3156  	for i := 0; i < b.N; i++ {
  3157  		x = Log2(.5)
  3158  	}
  3159  	GlobalF += x
  3160  }
  3161  
  3162  func BenchmarkModf(b *testing.B) {
  3163  	x := 0.0
  3164  	y := 0.0
  3165  	for i := 0; i < b.N; i++ {
  3166  		x, y = Modf(1.5)
  3167  	}
  3168  	GlobalF += x
  3169  	GlobalF += y
  3170  }
  3171  
  3172  func BenchmarkNextafter32(b *testing.B) {
  3173  	x := float32(0.0)
  3174  	for i := 0; i < b.N; i++ {
  3175  		x = Nextafter32(.5, 1)
  3176  	}
  3177  	GlobalF = float64(x)
  3178  }
  3179  
  3180  func BenchmarkNextafter64(b *testing.B) {
  3181  	x := 0.0
  3182  	for i := 0; i < b.N; i++ {
  3183  		x = Nextafter(.5, 1)
  3184  	}
  3185  	GlobalF = x
  3186  }
  3187  
  3188  func BenchmarkPowInt(b *testing.B) {
  3189  	x := 0.0
  3190  	for i := 0; i < b.N; i++ {
  3191  		x = Pow(2, 2)
  3192  	}
  3193  	GlobalF = x
  3194  }
  3195  
  3196  func BenchmarkPowFrac(b *testing.B) {
  3197  	x := 0.0
  3198  	for i := 0; i < b.N; i++ {
  3199  		x = Pow(2.5, 1.5)
  3200  	}
  3201  	GlobalF = x
  3202  }
  3203  
  3204  var pow10pos = int(300)
  3205  
  3206  func BenchmarkPow10Pos(b *testing.B) {
  3207  	x := 0.0
  3208  	for i := 0; i < b.N; i++ {
  3209  		x = Pow10(pow10pos)
  3210  	}
  3211  	GlobalF = x
  3212  }
  3213  
  3214  var pow10neg = int(-300)
  3215  
  3216  func BenchmarkPow10Neg(b *testing.B) {
  3217  	x := 0.0
  3218  	for i := 0; i < b.N; i++ {
  3219  		x = Pow10(pow10neg)
  3220  	}
  3221  	GlobalF = x
  3222  }
  3223  
  3224  func BenchmarkRemainder(b *testing.B) {
  3225  	x := 0.0
  3226  	for i := 0; i < b.N; i++ {
  3227  		x = Remainder(10, 3)
  3228  	}
  3229  	GlobalF = x
  3230  }
  3231  
  3232  func BenchmarkSignbit(b *testing.B) {
  3233  	x := false
  3234  	for i := 0; i < b.N; i++ {
  3235  		x = Signbit(2.5)
  3236  	}
  3237  	GlobalB = x
  3238  }
  3239  
  3240  func BenchmarkSin(b *testing.B) {
  3241  	x := 0.0
  3242  	for i := 0; i < b.N; i++ {
  3243  		x = Sin(.5)
  3244  	}
  3245  	GlobalF = x
  3246  }
  3247  
  3248  func BenchmarkSincos(b *testing.B) {
  3249  	x := 0.0
  3250  	y := 0.0
  3251  	for i := 0; i < b.N; i++ {
  3252  		x, y = Sincos(.5)
  3253  	}
  3254  	GlobalF += x
  3255  	GlobalF += y
  3256  }
  3257  
  3258  func BenchmarkSinh(b *testing.B) {
  3259  	x := 0.0
  3260  	for i := 0; i < b.N; i++ {
  3261  		x = Sinh(2.5)
  3262  	}
  3263  	GlobalF = x
  3264  }
  3265  
  3266  func BenchmarkSqrtIndirect(b *testing.B) {
  3267  	x, y := 0.0, 10.0
  3268  	f := Sqrt
  3269  	for i := 0; i < b.N; i++ {
  3270  		x += f(y)
  3271  	}
  3272  	GlobalF = x
  3273  }
  3274  
  3275  func BenchmarkSqrtLatency(b *testing.B) {
  3276  	x := 10.0
  3277  	for i := 0; i < b.N; i++ {
  3278  		x = Sqrt(x)
  3279  	}
  3280  	GlobalF = x
  3281  }
  3282  
  3283  func BenchmarkSqrtIndirectLatency(b *testing.B) {
  3284  	x := 10.0
  3285  	f := Sqrt
  3286  	for i := 0; i < b.N; i++ {
  3287  		x = f(x)
  3288  	}
  3289  	GlobalF = x
  3290  }
  3291  
  3292  func BenchmarkSqrtGoLatency(b *testing.B) {
  3293  	x := 10.0
  3294  	for i := 0; i < b.N; i++ {
  3295  		x = SqrtGo(x)
  3296  	}
  3297  	GlobalF = x
  3298  }
  3299  
  3300  func isPrime(i int) bool {
  3301  	// Yes, this is a dumb way to write this code,
  3302  	// but calling Sqrt repeatedly in this way demonstrates
  3303  	// the benefit of using a direct SQRT instruction on systems
  3304  	// that have one, whereas the obvious loop seems not to
  3305  	// demonstrate such a benefit.
  3306  	for j := 2; float64(j) <= Sqrt(float64(i)); j++ {
  3307  		if i%j == 0 {
  3308  			return false
  3309  		}
  3310  	}
  3311  	return true
  3312  }
  3313  
  3314  func BenchmarkSqrtPrime(b *testing.B) {
  3315  	x := false
  3316  	for i := 0; i < b.N; i++ {
  3317  		x = isPrime(100003)
  3318  	}
  3319  	GlobalB = x
  3320  }
  3321  
  3322  func BenchmarkTan(b *testing.B) {
  3323  	x := 0.0
  3324  	for i := 0; i < b.N; i++ {
  3325  		x = Tan(.5)
  3326  	}
  3327  	GlobalF = x
  3328  }
  3329  
  3330  func BenchmarkTanh(b *testing.B) {
  3331  	x := 0.0
  3332  	for i := 0; i < b.N; i++ {
  3333  		x = Tanh(2.5)
  3334  	}
  3335  	GlobalF = x
  3336  }
  3337  func BenchmarkTrunc(b *testing.B) {
  3338  	x := 0.0
  3339  	for i := 0; i < b.N; i++ {
  3340  		x = Trunc(.5)
  3341  	}
  3342  	GlobalF = x
  3343  }
  3344  
  3345  func BenchmarkY0(b *testing.B) {
  3346  	x := 0.0
  3347  	for i := 0; i < b.N; i++ {
  3348  		x = Y0(2.5)
  3349  	}
  3350  	GlobalF = x
  3351  }
  3352  
  3353  func BenchmarkY1(b *testing.B) {
  3354  	x := 0.0
  3355  	for i := 0; i < b.N; i++ {
  3356  		x = Y1(2.5)
  3357  	}
  3358  	GlobalF = x
  3359  }
  3360  
  3361  func BenchmarkYn(b *testing.B) {
  3362  	x := 0.0
  3363  	for i := 0; i < b.N; i++ {
  3364  		x = Yn(2, 2.5)
  3365  	}
  3366  	GlobalF = x
  3367  }