github.com/liujq9674git/golang-src-1.7@v0.0.0-20230517174348-17f6ec47f3f8/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  }
   951  var expSC = []float64{
   952  	0,
   953  	0,
   954  	Inf(1),
   955  	Inf(1),
   956  	NaN(),
   957  }
   958  
   959  var vfexpm1SC = []float64{
   960  	Inf(-1),
   961  	-710,
   962  	Copysign(0, -1),
   963  	0,
   964  	710,
   965  	Inf(1),
   966  	NaN(),
   967  }
   968  var expm1SC = []float64{
   969  	-1,
   970  	-1,
   971  	Copysign(0, -1),
   972  	0,
   973  	Inf(1),
   974  	Inf(1),
   975  	NaN(),
   976  }
   977  
   978  var vffabsSC = []float64{
   979  	Inf(-1),
   980  	Copysign(0, -1),
   981  	0,
   982  	Inf(1),
   983  	NaN(),
   984  }
   985  var fabsSC = []float64{
   986  	Inf(1),
   987  	0,
   988  	0,
   989  	Inf(1),
   990  	NaN(),
   991  }
   992  
   993  var vffdimSC = [][2]float64{
   994  	{Inf(-1), Inf(-1)},
   995  	{Inf(-1), Inf(1)},
   996  	{Inf(-1), NaN()},
   997  	{Copysign(0, -1), Copysign(0, -1)},
   998  	{Copysign(0, -1), 0},
   999  	{0, Copysign(0, -1)},
  1000  	{0, 0},
  1001  	{Inf(1), Inf(-1)},
  1002  	{Inf(1), Inf(1)},
  1003  	{Inf(1), NaN()},
  1004  	{NaN(), Inf(-1)},
  1005  	{NaN(), Copysign(0, -1)},
  1006  	{NaN(), 0},
  1007  	{NaN(), Inf(1)},
  1008  	{NaN(), NaN()},
  1009  }
  1010  var nan = Float64frombits(0xFFF8000000000000) // SSE2 DIVSD 0/0
  1011  var vffdim2SC = [][2]float64{
  1012  	{Inf(-1), Inf(-1)},
  1013  	{Inf(-1), Inf(1)},
  1014  	{Inf(-1), nan},
  1015  	{Copysign(0, -1), Copysign(0, -1)},
  1016  	{Copysign(0, -1), 0},
  1017  	{0, Copysign(0, -1)},
  1018  	{0, 0},
  1019  	{Inf(1), Inf(-1)},
  1020  	{Inf(1), Inf(1)},
  1021  	{Inf(1), nan},
  1022  	{nan, Inf(-1)},
  1023  	{nan, Copysign(0, -1)},
  1024  	{nan, 0},
  1025  	{nan, Inf(1)},
  1026  	{nan, nan},
  1027  }
  1028  var fdimSC = []float64{
  1029  	NaN(),
  1030  	0,
  1031  	NaN(),
  1032  	0,
  1033  	0,
  1034  	0,
  1035  	0,
  1036  	Inf(1),
  1037  	NaN(),
  1038  	NaN(),
  1039  	NaN(),
  1040  	NaN(),
  1041  	NaN(),
  1042  	NaN(),
  1043  	NaN(),
  1044  }
  1045  var fmaxSC = []float64{
  1046  	Inf(-1),
  1047  	Inf(1),
  1048  	NaN(),
  1049  	Copysign(0, -1),
  1050  	0,
  1051  	0,
  1052  	0,
  1053  	Inf(1),
  1054  	Inf(1),
  1055  	Inf(1),
  1056  	NaN(),
  1057  	NaN(),
  1058  	NaN(),
  1059  	Inf(1),
  1060  	NaN(),
  1061  }
  1062  var fminSC = []float64{
  1063  	Inf(-1),
  1064  	Inf(-1),
  1065  	Inf(-1),
  1066  	Copysign(0, -1),
  1067  	Copysign(0, -1),
  1068  	Copysign(0, -1),
  1069  	0,
  1070  	Inf(-1),
  1071  	Inf(1),
  1072  	NaN(),
  1073  	Inf(-1),
  1074  	NaN(),
  1075  	NaN(),
  1076  	NaN(),
  1077  	NaN(),
  1078  }
  1079  
  1080  var vffmodSC = [][2]float64{
  1081  	{Inf(-1), Inf(-1)},
  1082  	{Inf(-1), -Pi},
  1083  	{Inf(-1), 0},
  1084  	{Inf(-1), Pi},
  1085  	{Inf(-1), Inf(1)},
  1086  	{Inf(-1), NaN()},
  1087  	{-Pi, Inf(-1)},
  1088  	{-Pi, 0},
  1089  	{-Pi, Inf(1)},
  1090  	{-Pi, NaN()},
  1091  	{Copysign(0, -1), Inf(-1)},
  1092  	{Copysign(0, -1), 0},
  1093  	{Copysign(0, -1), Inf(1)},
  1094  	{Copysign(0, -1), NaN()},
  1095  	{0, Inf(-1)},
  1096  	{0, 0},
  1097  	{0, Inf(1)},
  1098  	{0, NaN()},
  1099  	{Pi, Inf(-1)},
  1100  	{Pi, 0},
  1101  	{Pi, Inf(1)},
  1102  	{Pi, NaN()},
  1103  	{Inf(1), Inf(-1)},
  1104  	{Inf(1), -Pi},
  1105  	{Inf(1), 0},
  1106  	{Inf(1), Pi},
  1107  	{Inf(1), Inf(1)},
  1108  	{Inf(1), NaN()},
  1109  	{NaN(), Inf(-1)},
  1110  	{NaN(), -Pi},
  1111  	{NaN(), 0},
  1112  	{NaN(), Pi},
  1113  	{NaN(), Inf(1)},
  1114  	{NaN(), NaN()},
  1115  }
  1116  var fmodSC = []float64{
  1117  	NaN(),           // fmod(-Inf, -Inf)
  1118  	NaN(),           // fmod(-Inf, -Pi)
  1119  	NaN(),           // fmod(-Inf, 0)
  1120  	NaN(),           // fmod(-Inf, Pi)
  1121  	NaN(),           // fmod(-Inf, +Inf)
  1122  	NaN(),           // fmod(-Inf, NaN)
  1123  	-Pi,             // fmod(-Pi, -Inf)
  1124  	NaN(),           // fmod(-Pi, 0)
  1125  	-Pi,             // fmod(-Pi, +Inf)
  1126  	NaN(),           // fmod(-Pi, NaN)
  1127  	Copysign(0, -1), // fmod(-0, -Inf)
  1128  	NaN(),           // fmod(-0, 0)
  1129  	Copysign(0, -1), // fmod(-0, Inf)
  1130  	NaN(),           // fmod(-0, NaN)
  1131  	0,               // fmod(0, -Inf)
  1132  	NaN(),           // fmod(0, 0)
  1133  	0,               // fmod(0, +Inf)
  1134  	NaN(),           // fmod(0, NaN)
  1135  	Pi,              // fmod(Pi, -Inf)
  1136  	NaN(),           // fmod(Pi, 0)
  1137  	Pi,              // fmod(Pi, +Inf)
  1138  	NaN(),           // fmod(Pi, NaN)
  1139  	NaN(),           // fmod(+Inf, -Inf)
  1140  	NaN(),           // fmod(+Inf, -Pi)
  1141  	NaN(),           // fmod(+Inf, 0)
  1142  	NaN(),           // fmod(+Inf, Pi)
  1143  	NaN(),           // fmod(+Inf, +Inf)
  1144  	NaN(),           // fmod(+Inf, NaN)
  1145  	NaN(),           // fmod(NaN, -Inf)
  1146  	NaN(),           // fmod(NaN, -Pi)
  1147  	NaN(),           // fmod(NaN, 0)
  1148  	NaN(),           // fmod(NaN, Pi)
  1149  	NaN(),           // fmod(NaN, +Inf)
  1150  	NaN(),           // fmod(NaN, NaN)
  1151  }
  1152  
  1153  var vffrexpSC = []float64{
  1154  	Inf(-1),
  1155  	Copysign(0, -1),
  1156  	0,
  1157  	Inf(1),
  1158  	NaN(),
  1159  }
  1160  var frexpSC = []fi{
  1161  	{Inf(-1), 0},
  1162  	{Copysign(0, -1), 0},
  1163  	{0, 0},
  1164  	{Inf(1), 0},
  1165  	{NaN(), 0},
  1166  }
  1167  
  1168  var vfgammaSC = []float64{
  1169  	Inf(-1),
  1170  	-3,
  1171  	Copysign(0, -1),
  1172  	0,
  1173  	Inf(1),
  1174  	NaN(),
  1175  }
  1176  var gammaSC = []float64{
  1177  	NaN(),
  1178  	NaN(),
  1179  	Inf(-1),
  1180  	Inf(1),
  1181  	Inf(1),
  1182  	NaN(),
  1183  }
  1184  
  1185  var vfhypotSC = [][2]float64{
  1186  	{Inf(-1), Inf(-1)},
  1187  	{Inf(-1), 0},
  1188  	{Inf(-1), Inf(1)},
  1189  	{Inf(-1), NaN()},
  1190  	{Copysign(0, -1), Copysign(0, -1)},
  1191  	{Copysign(0, -1), 0},
  1192  	{0, Copysign(0, -1)},
  1193  	{0, 0}, // +0, +0
  1194  	{0, Inf(-1)},
  1195  	{0, Inf(1)},
  1196  	{0, NaN()},
  1197  	{Inf(1), Inf(-1)},
  1198  	{Inf(1), 0},
  1199  	{Inf(1), Inf(1)},
  1200  	{Inf(1), NaN()},
  1201  	{NaN(), Inf(-1)},
  1202  	{NaN(), 0},
  1203  	{NaN(), Inf(1)},
  1204  	{NaN(), NaN()},
  1205  }
  1206  var hypotSC = []float64{
  1207  	Inf(1),
  1208  	Inf(1),
  1209  	Inf(1),
  1210  	Inf(1),
  1211  	0,
  1212  	0,
  1213  	0,
  1214  	0,
  1215  	Inf(1),
  1216  	Inf(1),
  1217  	NaN(),
  1218  	Inf(1),
  1219  	Inf(1),
  1220  	Inf(1),
  1221  	Inf(1),
  1222  	Inf(1),
  1223  	NaN(),
  1224  	Inf(1),
  1225  	NaN(),
  1226  }
  1227  
  1228  var ilogbSC = []int{
  1229  	MaxInt32,
  1230  	MinInt32,
  1231  	MaxInt32,
  1232  	MaxInt32,
  1233  }
  1234  
  1235  var vfj0SC = []float64{
  1236  	Inf(-1),
  1237  	0,
  1238  	Inf(1),
  1239  	NaN(),
  1240  }
  1241  var j0SC = []float64{
  1242  	0,
  1243  	1,
  1244  	0,
  1245  	NaN(),
  1246  }
  1247  var j1SC = []float64{
  1248  	0,
  1249  	0,
  1250  	0,
  1251  	NaN(),
  1252  }
  1253  var j2SC = []float64{
  1254  	0,
  1255  	0,
  1256  	0,
  1257  	NaN(),
  1258  }
  1259  var jM3SC = []float64{
  1260  	0,
  1261  	0,
  1262  	0,
  1263  	NaN(),
  1264  }
  1265  
  1266  var vfldexpSC = []fi{
  1267  	{0, 0},
  1268  	{0, -1075},
  1269  	{0, 1024},
  1270  	{Copysign(0, -1), 0},
  1271  	{Copysign(0, -1), -1075},
  1272  	{Copysign(0, -1), 1024},
  1273  	{Inf(1), 0},
  1274  	{Inf(1), -1024},
  1275  	{Inf(-1), 0},
  1276  	{Inf(-1), -1024},
  1277  	{NaN(), -1024},
  1278  }
  1279  var ldexpSC = []float64{
  1280  	0,
  1281  	0,
  1282  	0,
  1283  	Copysign(0, -1),
  1284  	Copysign(0, -1),
  1285  	Copysign(0, -1),
  1286  	Inf(1),
  1287  	Inf(1),
  1288  	Inf(-1),
  1289  	Inf(-1),
  1290  	NaN(),
  1291  }
  1292  
  1293  var vflgammaSC = []float64{
  1294  	Inf(-1),
  1295  	-3,
  1296  	0,
  1297  	1,
  1298  	2,
  1299  	Inf(1),
  1300  	NaN(),
  1301  }
  1302  var lgammaSC = []fi{
  1303  	{Inf(-1), 1},
  1304  	{Inf(1), 1},
  1305  	{Inf(1), 1},
  1306  	{0, 1},
  1307  	{0, 1},
  1308  	{Inf(1), 1},
  1309  	{NaN(), 1},
  1310  }
  1311  
  1312  var vflogSC = []float64{
  1313  	Inf(-1),
  1314  	-Pi,
  1315  	Copysign(0, -1),
  1316  	0,
  1317  	1,
  1318  	Inf(1),
  1319  	NaN(),
  1320  }
  1321  var logSC = []float64{
  1322  	NaN(),
  1323  	NaN(),
  1324  	Inf(-1),
  1325  	Inf(-1),
  1326  	0,
  1327  	Inf(1),
  1328  	NaN(),
  1329  }
  1330  
  1331  var vflogbSC = []float64{
  1332  	Inf(-1),
  1333  	0,
  1334  	Inf(1),
  1335  	NaN(),
  1336  }
  1337  var logbSC = []float64{
  1338  	Inf(1),
  1339  	Inf(-1),
  1340  	Inf(1),
  1341  	NaN(),
  1342  }
  1343  
  1344  var vflog1pSC = []float64{
  1345  	Inf(-1),
  1346  	-Pi,
  1347  	-1,
  1348  	Copysign(0, -1),
  1349  	0,
  1350  	Inf(1),
  1351  	NaN(),
  1352  }
  1353  var log1pSC = []float64{
  1354  	NaN(),
  1355  	NaN(),
  1356  	Inf(-1),
  1357  	Copysign(0, -1),
  1358  	0,
  1359  	Inf(1),
  1360  	NaN(),
  1361  }
  1362  
  1363  var vfmodfSC = []float64{
  1364  	Inf(-1),
  1365  	Copysign(0, -1),
  1366  	Inf(1),
  1367  	NaN(),
  1368  }
  1369  var modfSC = [][2]float64{
  1370  	{Inf(-1), NaN()}, // [2]float64{Copysign(0, -1), Inf(-1)},
  1371  	{Copysign(0, -1), Copysign(0, -1)},
  1372  	{Inf(1), NaN()}, // [2]float64{0, Inf(1)},
  1373  	{NaN(), NaN()},
  1374  }
  1375  
  1376  var vfnextafter32SC = [][2]float32{
  1377  	{0, 0},
  1378  	{0, float32(Copysign(0, -1))},
  1379  	{0, -1},
  1380  	{0, float32(NaN())},
  1381  	{float32(Copysign(0, -1)), 1},
  1382  	{float32(Copysign(0, -1)), 0},
  1383  	{float32(Copysign(0, -1)), float32(Copysign(0, -1))},
  1384  	{float32(Copysign(0, -1)), -1},
  1385  	{float32(NaN()), 0},
  1386  	{float32(NaN()), float32(NaN())},
  1387  }
  1388  var nextafter32SC = []float32{
  1389  	0,
  1390  	0,
  1391  	-1.401298464e-45, // Float32frombits(0x80000001)
  1392  	float32(NaN()),
  1393  	1.401298464e-45, // Float32frombits(0x00000001)
  1394  	float32(Copysign(0, -1)),
  1395  	float32(Copysign(0, -1)),
  1396  	-1.401298464e-45, // Float32frombits(0x80000001)
  1397  	float32(NaN()),
  1398  	float32(NaN()),
  1399  }
  1400  
  1401  var vfnextafter64SC = [][2]float64{
  1402  	{0, 0},
  1403  	{0, Copysign(0, -1)},
  1404  	{0, -1},
  1405  	{0, NaN()},
  1406  	{Copysign(0, -1), 1},
  1407  	{Copysign(0, -1), 0},
  1408  	{Copysign(0, -1), Copysign(0, -1)},
  1409  	{Copysign(0, -1), -1},
  1410  	{NaN(), 0},
  1411  	{NaN(), NaN()},
  1412  }
  1413  var nextafter64SC = []float64{
  1414  	0,
  1415  	0,
  1416  	-4.9406564584124654418e-324, // Float64frombits(0x8000000000000001)
  1417  	NaN(),
  1418  	4.9406564584124654418e-324, // Float64frombits(0x0000000000000001)
  1419  	Copysign(0, -1),
  1420  	Copysign(0, -1),
  1421  	-4.9406564584124654418e-324, // Float64frombits(0x8000000000000001)
  1422  	NaN(),
  1423  	NaN(),
  1424  }
  1425  
  1426  var vfpowSC = [][2]float64{
  1427  	{Inf(-1), -Pi},
  1428  	{Inf(-1), -3},
  1429  	{Inf(-1), Copysign(0, -1)},
  1430  	{Inf(-1), 0},
  1431  	{Inf(-1), 1},
  1432  	{Inf(-1), 3},
  1433  	{Inf(-1), Pi},
  1434  	{Inf(-1), NaN()},
  1435  
  1436  	{-Pi, Inf(-1)},
  1437  	{-Pi, -Pi},
  1438  	{-Pi, Copysign(0, -1)},
  1439  	{-Pi, 0},
  1440  	{-Pi, 1},
  1441  	{-Pi, Pi},
  1442  	{-Pi, Inf(1)},
  1443  	{-Pi, NaN()},
  1444  
  1445  	{-1, Inf(-1)},
  1446  	{-1, Inf(1)},
  1447  	{-1, NaN()},
  1448  	{-1 / 2, Inf(-1)},
  1449  	{-1 / 2, Inf(1)},
  1450  	{Copysign(0, -1), Inf(-1)},
  1451  	{Copysign(0, -1), -Pi},
  1452  	{Copysign(0, -1), -3},
  1453  	{Copysign(0, -1), 3},
  1454  	{Copysign(0, -1), Pi},
  1455  	{Copysign(0, -1), Inf(1)},
  1456  
  1457  	{0, Inf(-1)},
  1458  	{0, -Pi},
  1459  	{0, -3},
  1460  	{0, Copysign(0, -1)},
  1461  	{0, 0},
  1462  	{0, 3},
  1463  	{0, Pi},
  1464  	{0, Inf(1)},
  1465  	{0, NaN()},
  1466  
  1467  	{1 / 2, Inf(-1)},
  1468  	{1 / 2, Inf(1)},
  1469  	{1, Inf(-1)},
  1470  	{1, Inf(1)},
  1471  	{1, NaN()},
  1472  
  1473  	{Pi, Inf(-1)},
  1474  	{Pi, Copysign(0, -1)},
  1475  	{Pi, 0},
  1476  	{Pi, 1},
  1477  	{Pi, Inf(1)},
  1478  	{Pi, NaN()},
  1479  	{Inf(1), -Pi},
  1480  	{Inf(1), Copysign(0, -1)},
  1481  	{Inf(1), 0},
  1482  	{Inf(1), 1},
  1483  	{Inf(1), Pi},
  1484  	{Inf(1), NaN()},
  1485  	{NaN(), -Pi},
  1486  	{NaN(), Copysign(0, -1)},
  1487  	{NaN(), 0},
  1488  	{NaN(), 1},
  1489  	{NaN(), Pi},
  1490  	{NaN(), NaN()},
  1491  }
  1492  var powSC = []float64{
  1493  	0,               // pow(-Inf, -Pi)
  1494  	Copysign(0, -1), // pow(-Inf, -3)
  1495  	1,               // pow(-Inf, -0)
  1496  	1,               // pow(-Inf, +0)
  1497  	Inf(-1),         // pow(-Inf, 1)
  1498  	Inf(-1),         // pow(-Inf, 3)
  1499  	Inf(1),          // pow(-Inf, Pi)
  1500  	NaN(),           // pow(-Inf, NaN)
  1501  	0,               // pow(-Pi, -Inf)
  1502  	NaN(),           // pow(-Pi, -Pi)
  1503  	1,               // pow(-Pi, -0)
  1504  	1,               // pow(-Pi, +0)
  1505  	-Pi,             // pow(-Pi, 1)
  1506  	NaN(),           // pow(-Pi, Pi)
  1507  	Inf(1),          // pow(-Pi, +Inf)
  1508  	NaN(),           // pow(-Pi, NaN)
  1509  	1,               // pow(-1, -Inf) IEEE 754-2008
  1510  	1,               // pow(-1, +Inf) IEEE 754-2008
  1511  	NaN(),           // pow(-1, NaN)
  1512  	Inf(1),          // pow(-1/2, -Inf)
  1513  	0,               // pow(-1/2, +Inf)
  1514  	Inf(1),          // pow(-0, -Inf)
  1515  	Inf(1),          // pow(-0, -Pi)
  1516  	Inf(-1),         // pow(-0, -3) IEEE 754-2008
  1517  	Copysign(0, -1), // pow(-0, 3) IEEE 754-2008
  1518  	0,               // pow(-0, +Pi)
  1519  	0,               // pow(-0, +Inf)
  1520  	Inf(1),          // pow(+0, -Inf)
  1521  	Inf(1),          // pow(+0, -Pi)
  1522  	Inf(1),          // pow(+0, -3)
  1523  	1,               // pow(+0, -0)
  1524  	1,               // pow(+0, +0)
  1525  	0,               // pow(+0, 3)
  1526  	0,               // pow(+0, +Pi)
  1527  	0,               // pow(+0, +Inf)
  1528  	NaN(),           // pow(+0, NaN)
  1529  	Inf(1),          // pow(1/2, -Inf)
  1530  	0,               // pow(1/2, +Inf)
  1531  	1,               // pow(1, -Inf) IEEE 754-2008
  1532  	1,               // pow(1, +Inf) IEEE 754-2008
  1533  	1,               // pow(1, NaN) IEEE 754-2008
  1534  	0,               // pow(+Pi, -Inf)
  1535  	1,               // pow(+Pi, -0)
  1536  	1,               // pow(+Pi, +0)
  1537  	Pi,              // pow(+Pi, 1)
  1538  	Inf(1),          // pow(+Pi, +Inf)
  1539  	NaN(),           // pow(+Pi, NaN)
  1540  	0,               // pow(+Inf, -Pi)
  1541  	1,               // pow(+Inf, -0)
  1542  	1,               // pow(+Inf, +0)
  1543  	Inf(1),          // pow(+Inf, 1)
  1544  	Inf(1),          // pow(+Inf, Pi)
  1545  	NaN(),           // pow(+Inf, NaN)
  1546  	NaN(),           // pow(NaN, -Pi)
  1547  	1,               // pow(NaN, -0)
  1548  	1,               // pow(NaN, +0)
  1549  	NaN(),           // pow(NaN, 1)
  1550  	NaN(),           // pow(NaN, +Pi)
  1551  	NaN(),           // pow(NaN, NaN)
  1552  }
  1553  
  1554  var vfpow10SC = []int{
  1555  	MinInt32,
  1556  	MaxInt32,
  1557  	-325,
  1558  	309,
  1559  }
  1560  
  1561  var pow10SC = []float64{
  1562  	0,      // pow10(MinInt32)
  1563  	Inf(1), // pow10(MaxInt32)
  1564  	0,      // pow10(-325)
  1565  	Inf(1), // pow10(309)
  1566  }
  1567  
  1568  var vfsignbitSC = []float64{
  1569  	Inf(-1),
  1570  	Copysign(0, -1),
  1571  	0,
  1572  	Inf(1),
  1573  	NaN(),
  1574  }
  1575  var signbitSC = []bool{
  1576  	true,
  1577  	true,
  1578  	false,
  1579  	false,
  1580  	false,
  1581  }
  1582  
  1583  var vfsinSC = []float64{
  1584  	Inf(-1),
  1585  	Copysign(0, -1),
  1586  	0,
  1587  	Inf(1),
  1588  	NaN(),
  1589  }
  1590  var sinSC = []float64{
  1591  	NaN(),
  1592  	Copysign(0, -1),
  1593  	0,
  1594  	NaN(),
  1595  	NaN(),
  1596  }
  1597  
  1598  var vfsinhSC = []float64{
  1599  	Inf(-1),
  1600  	Copysign(0, -1),
  1601  	0,
  1602  	Inf(1),
  1603  	NaN(),
  1604  }
  1605  var sinhSC = []float64{
  1606  	Inf(-1),
  1607  	Copysign(0, -1),
  1608  	0,
  1609  	Inf(1),
  1610  	NaN(),
  1611  }
  1612  
  1613  var vfsqrtSC = []float64{
  1614  	Inf(-1),
  1615  	-Pi,
  1616  	Copysign(0, -1),
  1617  	0,
  1618  	Inf(1),
  1619  	NaN(),
  1620  	Float64frombits(2), // subnormal; see https://golang.org/issue/13013
  1621  }
  1622  var sqrtSC = []float64{
  1623  	NaN(),
  1624  	NaN(),
  1625  	Copysign(0, -1),
  1626  	0,
  1627  	Inf(1),
  1628  	NaN(),
  1629  	3.1434555694052576e-162,
  1630  }
  1631  
  1632  var vftanhSC = []float64{
  1633  	Inf(-1),
  1634  	Copysign(0, -1),
  1635  	0,
  1636  	Inf(1),
  1637  	NaN(),
  1638  }
  1639  var tanhSC = []float64{
  1640  	-1,
  1641  	Copysign(0, -1),
  1642  	0,
  1643  	1,
  1644  	NaN(),
  1645  }
  1646  
  1647  var vfy0SC = []float64{
  1648  	Inf(-1),
  1649  	0,
  1650  	Inf(1),
  1651  	NaN(),
  1652  }
  1653  var y0SC = []float64{
  1654  	NaN(),
  1655  	Inf(-1),
  1656  	0,
  1657  	NaN(),
  1658  }
  1659  var y1SC = []float64{
  1660  	NaN(),
  1661  	Inf(-1),
  1662  	0,
  1663  	NaN(),
  1664  }
  1665  var y2SC = []float64{
  1666  	NaN(),
  1667  	Inf(-1),
  1668  	0,
  1669  	NaN(),
  1670  }
  1671  var yM3SC = []float64{
  1672  	NaN(),
  1673  	Inf(1),
  1674  	0,
  1675  	NaN(),
  1676  }
  1677  
  1678  // arguments and expected results for boundary cases
  1679  const (
  1680  	SmallestNormalFloat64   = 2.2250738585072014e-308 // 2**-1022
  1681  	LargestSubnormalFloat64 = SmallestNormalFloat64 - SmallestNonzeroFloat64
  1682  )
  1683  
  1684  var vffrexpBC = []float64{
  1685  	SmallestNormalFloat64,
  1686  	LargestSubnormalFloat64,
  1687  	SmallestNonzeroFloat64,
  1688  	MaxFloat64,
  1689  	-SmallestNormalFloat64,
  1690  	-LargestSubnormalFloat64,
  1691  	-SmallestNonzeroFloat64,
  1692  	-MaxFloat64,
  1693  }
  1694  var frexpBC = []fi{
  1695  	{0.5, -1021},
  1696  	{0.99999999999999978, -1022},
  1697  	{0.5, -1073},
  1698  	{0.99999999999999989, 1024},
  1699  	{-0.5, -1021},
  1700  	{-0.99999999999999978, -1022},
  1701  	{-0.5, -1073},
  1702  	{-0.99999999999999989, 1024},
  1703  }
  1704  
  1705  var vfldexpBC = []fi{
  1706  	{SmallestNormalFloat64, -52},
  1707  	{LargestSubnormalFloat64, -51},
  1708  	{SmallestNonzeroFloat64, 1074},
  1709  	{MaxFloat64, -(1023 + 1074)},
  1710  	{1, -1075},
  1711  	{-1, -1075},
  1712  	{1, 1024},
  1713  	{-1, 1024},
  1714  }
  1715  var ldexpBC = []float64{
  1716  	SmallestNonzeroFloat64,
  1717  	1e-323, // 2**-1073
  1718  	1,
  1719  	1e-323, // 2**-1073
  1720  	0,
  1721  	Copysign(0, -1),
  1722  	Inf(1),
  1723  	Inf(-1),
  1724  }
  1725  
  1726  var logbBC = []float64{
  1727  	-1022,
  1728  	-1023,
  1729  	-1074,
  1730  	1023,
  1731  	-1022,
  1732  	-1023,
  1733  	-1074,
  1734  	1023,
  1735  }
  1736  
  1737  func tolerance(a, b, e float64) bool {
  1738  	d := a - b
  1739  	if d < 0 {
  1740  		d = -d
  1741  	}
  1742  
  1743  	// note: b is correct (expected) value, a is actual value.
  1744  	// make error tolerance a fraction of b, not a.
  1745  	if b != 0 {
  1746  		e = e * b
  1747  		if e < 0 {
  1748  			e = -e
  1749  		}
  1750  	}
  1751  	return d < e
  1752  }
  1753  func close(a, b float64) bool      { return tolerance(a, b, 1e-14) }
  1754  func veryclose(a, b float64) bool  { return tolerance(a, b, 4e-16) }
  1755  func soclose(a, b, e float64) bool { return tolerance(a, b, e) }
  1756  func alike(a, b float64) bool {
  1757  	switch {
  1758  	case IsNaN(a) && IsNaN(b):
  1759  		return true
  1760  	case a == b:
  1761  		return Signbit(a) == Signbit(b)
  1762  	}
  1763  	return false
  1764  }
  1765  
  1766  func TestNaN(t *testing.T) {
  1767  	f64 := NaN()
  1768  	if f64 == f64 {
  1769  		t.Fatalf("NaN() returns %g, expected NaN", f64)
  1770  	}
  1771  	f32 := float32(f64)
  1772  	if f32 == f32 {
  1773  		t.Fatalf("float32(NaN()) is %g, expected NaN", f32)
  1774  	}
  1775  }
  1776  
  1777  func TestAcos(t *testing.T) {
  1778  	for i := 0; i < len(vf); i++ {
  1779  		a := vf[i] / 10
  1780  		if f := Acos(a); !close(acos[i], f) {
  1781  			t.Errorf("Acos(%g) = %g, want %g", a, f, acos[i])
  1782  		}
  1783  	}
  1784  	for i := 0; i < len(vfacosSC); i++ {
  1785  		if f := Acos(vfacosSC[i]); !alike(acosSC[i], f) {
  1786  			t.Errorf("Acos(%g) = %g, want %g", vfacosSC[i], f, acosSC[i])
  1787  		}
  1788  	}
  1789  }
  1790  
  1791  func TestAcosh(t *testing.T) {
  1792  	for i := 0; i < len(vf); i++ {
  1793  		a := 1 + Abs(vf[i])
  1794  		if f := Acosh(a); !veryclose(acosh[i], f) {
  1795  			t.Errorf("Acosh(%g) = %g, want %g", a, f, acosh[i])
  1796  		}
  1797  	}
  1798  	for i := 0; i < len(vfacoshSC); i++ {
  1799  		if f := Acosh(vfacoshSC[i]); !alike(acoshSC[i], f) {
  1800  			t.Errorf("Acosh(%g) = %g, want %g", vfacoshSC[i], f, acoshSC[i])
  1801  		}
  1802  	}
  1803  }
  1804  
  1805  func TestAsin(t *testing.T) {
  1806  	for i := 0; i < len(vf); i++ {
  1807  		a := vf[i] / 10
  1808  		if f := Asin(a); !veryclose(asin[i], f) {
  1809  			t.Errorf("Asin(%g) = %g, want %g", a, f, asin[i])
  1810  		}
  1811  	}
  1812  	for i := 0; i < len(vfasinSC); i++ {
  1813  		if f := Asin(vfasinSC[i]); !alike(asinSC[i], f) {
  1814  			t.Errorf("Asin(%g) = %g, want %g", vfasinSC[i], f, asinSC[i])
  1815  		}
  1816  	}
  1817  }
  1818  
  1819  func TestAsinh(t *testing.T) {
  1820  	for i := 0; i < len(vf); i++ {
  1821  		if f := Asinh(vf[i]); !veryclose(asinh[i], f) {
  1822  			t.Errorf("Asinh(%g) = %g, want %g", vf[i], f, asinh[i])
  1823  		}
  1824  	}
  1825  	for i := 0; i < len(vfasinhSC); i++ {
  1826  		if f := Asinh(vfasinhSC[i]); !alike(asinhSC[i], f) {
  1827  			t.Errorf("Asinh(%g) = %g, want %g", vfasinhSC[i], f, asinhSC[i])
  1828  		}
  1829  	}
  1830  }
  1831  
  1832  func TestAtan(t *testing.T) {
  1833  	for i := 0; i < len(vf); i++ {
  1834  		if f := Atan(vf[i]); !veryclose(atan[i], f) {
  1835  			t.Errorf("Atan(%g) = %g, want %g", vf[i], f, atan[i])
  1836  		}
  1837  	}
  1838  	for i := 0; i < len(vfatanSC); i++ {
  1839  		if f := Atan(vfatanSC[i]); !alike(atanSC[i], f) {
  1840  			t.Errorf("Atan(%g) = %g, want %g", vfatanSC[i], f, atanSC[i])
  1841  		}
  1842  	}
  1843  }
  1844  
  1845  func TestAtanh(t *testing.T) {
  1846  	for i := 0; i < len(vf); i++ {
  1847  		a := vf[i] / 10
  1848  		if f := Atanh(a); !veryclose(atanh[i], f) {
  1849  			t.Errorf("Atanh(%g) = %g, want %g", a, f, atanh[i])
  1850  		}
  1851  	}
  1852  	for i := 0; i < len(vfatanhSC); i++ {
  1853  		if f := Atanh(vfatanhSC[i]); !alike(atanhSC[i], f) {
  1854  			t.Errorf("Atanh(%g) = %g, want %g", vfatanhSC[i], f, atanhSC[i])
  1855  		}
  1856  	}
  1857  }
  1858  
  1859  func TestAtan2(t *testing.T) {
  1860  	for i := 0; i < len(vf); i++ {
  1861  		if f := Atan2(10, vf[i]); !veryclose(atan2[i], f) {
  1862  			t.Errorf("Atan2(10, %g) = %g, want %g", vf[i], f, atan2[i])
  1863  		}
  1864  	}
  1865  	for i := 0; i < len(vfatan2SC); i++ {
  1866  		if f := Atan2(vfatan2SC[i][0], vfatan2SC[i][1]); !alike(atan2SC[i], f) {
  1867  			t.Errorf("Atan2(%g, %g) = %g, want %g", vfatan2SC[i][0], vfatan2SC[i][1], f, atan2SC[i])
  1868  		}
  1869  	}
  1870  }
  1871  
  1872  func TestCbrt(t *testing.T) {
  1873  	for i := 0; i < len(vf); i++ {
  1874  		if f := Cbrt(vf[i]); !veryclose(cbrt[i], f) {
  1875  			t.Errorf("Cbrt(%g) = %g, want %g", vf[i], f, cbrt[i])
  1876  		}
  1877  	}
  1878  	for i := 0; i < len(vfcbrtSC); i++ {
  1879  		if f := Cbrt(vfcbrtSC[i]); !alike(cbrtSC[i], f) {
  1880  			t.Errorf("Cbrt(%g) = %g, want %g", vfcbrtSC[i], f, cbrtSC[i])
  1881  		}
  1882  	}
  1883  }
  1884  
  1885  func TestCeil(t *testing.T) {
  1886  	for i := 0; i < len(vf); i++ {
  1887  		if f := Ceil(vf[i]); ceil[i] != f {
  1888  			t.Errorf("Ceil(%g) = %g, want %g", vf[i], f, ceil[i])
  1889  		}
  1890  	}
  1891  	for i := 0; i < len(vfceilSC); i++ {
  1892  		if f := Ceil(vfceilSC[i]); !alike(ceilSC[i], f) {
  1893  			t.Errorf("Ceil(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
  1894  		}
  1895  	}
  1896  }
  1897  
  1898  func TestCopysign(t *testing.T) {
  1899  	for i := 0; i < len(vf); i++ {
  1900  		if f := Copysign(vf[i], -1); copysign[i] != f {
  1901  			t.Errorf("Copysign(%g, -1) = %g, want %g", vf[i], f, copysign[i])
  1902  		}
  1903  	}
  1904  	for i := 0; i < len(vf); i++ {
  1905  		if f := Copysign(vf[i], 1); -copysign[i] != f {
  1906  			t.Errorf("Copysign(%g, 1) = %g, want %g", vf[i], f, -copysign[i])
  1907  		}
  1908  	}
  1909  	for i := 0; i < len(vfcopysignSC); i++ {
  1910  		if f := Copysign(vfcopysignSC[i], -1); !alike(copysignSC[i], f) {
  1911  			t.Errorf("Copysign(%g, -1) = %g, want %g", vfcopysignSC[i], f, copysignSC[i])
  1912  		}
  1913  	}
  1914  }
  1915  
  1916  func TestCos(t *testing.T) {
  1917  	for i := 0; i < len(vf); i++ {
  1918  		if f := Cos(vf[i]); !veryclose(cos[i], f) {
  1919  			t.Errorf("Cos(%g) = %g, want %g", vf[i], f, cos[i])
  1920  		}
  1921  	}
  1922  	for i := 0; i < len(vfcosSC); i++ {
  1923  		if f := Cos(vfcosSC[i]); !alike(cosSC[i], f) {
  1924  			t.Errorf("Cos(%g) = %g, want %g", vfcosSC[i], f, cosSC[i])
  1925  		}
  1926  	}
  1927  }
  1928  
  1929  func TestCosh(t *testing.T) {
  1930  	for i := 0; i < len(vf); i++ {
  1931  		if f := Cosh(vf[i]); !close(cosh[i], f) {
  1932  			t.Errorf("Cosh(%g) = %g, want %g", vf[i], f, cosh[i])
  1933  		}
  1934  	}
  1935  	for i := 0; i < len(vfcoshSC); i++ {
  1936  		if f := Cosh(vfcoshSC[i]); !alike(coshSC[i], f) {
  1937  			t.Errorf("Cosh(%g) = %g, want %g", vfcoshSC[i], f, coshSC[i])
  1938  		}
  1939  	}
  1940  }
  1941  
  1942  func TestErf(t *testing.T) {
  1943  	for i := 0; i < len(vf); i++ {
  1944  		a := vf[i] / 10
  1945  		if f := Erf(a); !veryclose(erf[i], f) {
  1946  			t.Errorf("Erf(%g) = %g, want %g", a, f, erf[i])
  1947  		}
  1948  	}
  1949  	for i := 0; i < len(vferfSC); i++ {
  1950  		if f := Erf(vferfSC[i]); !alike(erfSC[i], f) {
  1951  			t.Errorf("Erf(%g) = %g, want %g", vferfSC[i], f, erfSC[i])
  1952  		}
  1953  	}
  1954  }
  1955  
  1956  func TestErfc(t *testing.T) {
  1957  	for i := 0; i < len(vf); i++ {
  1958  		a := vf[i] / 10
  1959  		if f := Erfc(a); !veryclose(erfc[i], f) {
  1960  			t.Errorf("Erfc(%g) = %g, want %g", a, f, erfc[i])
  1961  		}
  1962  	}
  1963  	for i := 0; i < len(vferfcSC); i++ {
  1964  		if f := Erfc(vferfcSC[i]); !alike(erfcSC[i], f) {
  1965  			t.Errorf("Erfc(%g) = %g, want %g", vferfcSC[i], f, erfcSC[i])
  1966  		}
  1967  	}
  1968  }
  1969  
  1970  func TestExp(t *testing.T) {
  1971  	testExp(t, Exp, "Exp")
  1972  	testExp(t, ExpGo, "ExpGo")
  1973  }
  1974  
  1975  func testExp(t *testing.T, Exp func(float64) float64, name string) {
  1976  	for i := 0; i < len(vf); i++ {
  1977  		if f := Exp(vf[i]); !close(exp[i], f) {
  1978  			t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp[i])
  1979  		}
  1980  	}
  1981  	for i := 0; i < len(vfexpSC); i++ {
  1982  		if f := Exp(vfexpSC[i]); !alike(expSC[i], f) {
  1983  			t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
  1984  		}
  1985  	}
  1986  }
  1987  
  1988  func TestExpm1(t *testing.T) {
  1989  	for i := 0; i < len(vf); i++ {
  1990  		a := vf[i] / 100
  1991  		if f := Expm1(a); !veryclose(expm1[i], f) {
  1992  			t.Errorf("Expm1(%g) = %g, want %g", a, f, expm1[i])
  1993  		}
  1994  	}
  1995  	for i := 0; i < len(vf); i++ {
  1996  		a := vf[i] * 10
  1997  		if f := Expm1(a); !close(expm1Large[i], f) {
  1998  			t.Errorf("Expm1(%g) = %g, want %g", a, f, expm1Large[i])
  1999  		}
  2000  	}
  2001  	for i := 0; i < len(vfexpm1SC); i++ {
  2002  		if f := Expm1(vfexpm1SC[i]); !alike(expm1SC[i], f) {
  2003  			t.Errorf("Expm1(%g) = %g, want %g", vfexpm1SC[i], f, expm1SC[i])
  2004  		}
  2005  	}
  2006  }
  2007  
  2008  func TestExp2(t *testing.T) {
  2009  	testExp2(t, Exp2, "Exp2")
  2010  	testExp2(t, Exp2Go, "Exp2Go")
  2011  }
  2012  
  2013  func testExp2(t *testing.T, Exp2 func(float64) float64, name string) {
  2014  	for i := 0; i < len(vf); i++ {
  2015  		if f := Exp2(vf[i]); !close(exp2[i], f) {
  2016  			t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp2[i])
  2017  		}
  2018  	}
  2019  	for i := 0; i < len(vfexpSC); i++ {
  2020  		if f := Exp2(vfexpSC[i]); !alike(expSC[i], f) {
  2021  			t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
  2022  		}
  2023  	}
  2024  	for n := -1074; n < 1024; n++ {
  2025  		f := Exp2(float64(n))
  2026  		vf := Ldexp(1, n)
  2027  		if f != vf {
  2028  			t.Errorf("%s(%d) = %g, want %g", name, n, f, vf)
  2029  		}
  2030  	}
  2031  }
  2032  
  2033  func TestAbs(t *testing.T) {
  2034  	for i := 0; i < len(vf); i++ {
  2035  		if f := Abs(vf[i]); fabs[i] != f {
  2036  			t.Errorf("Abs(%g) = %g, want %g", vf[i], f, fabs[i])
  2037  		}
  2038  	}
  2039  	for i := 0; i < len(vffabsSC); i++ {
  2040  		if f := Abs(vffabsSC[i]); !alike(fabsSC[i], f) {
  2041  			t.Errorf("Abs(%g) = %g, want %g", vffabsSC[i], f, fabsSC[i])
  2042  		}
  2043  	}
  2044  }
  2045  
  2046  func TestDim(t *testing.T) {
  2047  	for i := 0; i < len(vf); i++ {
  2048  		if f := Dim(vf[i], 0); fdim[i] != f {
  2049  			t.Errorf("Dim(%g, %g) = %g, want %g", vf[i], 0.0, f, fdim[i])
  2050  		}
  2051  	}
  2052  	for i := 0; i < len(vffdimSC); i++ {
  2053  		if f := Dim(vffdimSC[i][0], vffdimSC[i][1]); !alike(fdimSC[i], f) {
  2054  			t.Errorf("Dim(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fdimSC[i])
  2055  		}
  2056  	}
  2057  	for i := 0; i < len(vffdim2SC); i++ {
  2058  		if f := Dim(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fdimSC[i], f) {
  2059  			t.Errorf("Dim(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fdimSC[i])
  2060  		}
  2061  	}
  2062  }
  2063  
  2064  func TestFloor(t *testing.T) {
  2065  	for i := 0; i < len(vf); i++ {
  2066  		if f := Floor(vf[i]); floor[i] != f {
  2067  			t.Errorf("Floor(%g) = %g, want %g", vf[i], f, floor[i])
  2068  		}
  2069  	}
  2070  	for i := 0; i < len(vfceilSC); i++ {
  2071  		if f := Floor(vfceilSC[i]); !alike(ceilSC[i], f) {
  2072  			t.Errorf("Floor(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
  2073  		}
  2074  	}
  2075  }
  2076  
  2077  func TestMax(t *testing.T) {
  2078  	for i := 0; i < len(vf); i++ {
  2079  		if f := Max(vf[i], ceil[i]); ceil[i] != f {
  2080  			t.Errorf("Max(%g, %g) = %g, want %g", vf[i], ceil[i], f, ceil[i])
  2081  		}
  2082  	}
  2083  	for i := 0; i < len(vffdimSC); i++ {
  2084  		if f := Max(vffdimSC[i][0], vffdimSC[i][1]); !alike(fmaxSC[i], f) {
  2085  			t.Errorf("Max(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fmaxSC[i])
  2086  		}
  2087  	}
  2088  	for i := 0; i < len(vffdim2SC); i++ {
  2089  		if f := Max(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fmaxSC[i], f) {
  2090  			t.Errorf("Max(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fmaxSC[i])
  2091  		}
  2092  	}
  2093  }
  2094  
  2095  func TestMin(t *testing.T) {
  2096  	for i := 0; i < len(vf); i++ {
  2097  		if f := Min(vf[i], floor[i]); floor[i] != f {
  2098  			t.Errorf("Min(%g, %g) = %g, want %g", vf[i], floor[i], f, floor[i])
  2099  		}
  2100  	}
  2101  	for i := 0; i < len(vffdimSC); i++ {
  2102  		if f := Min(vffdimSC[i][0], vffdimSC[i][1]); !alike(fminSC[i], f) {
  2103  			t.Errorf("Min(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fminSC[i])
  2104  		}
  2105  	}
  2106  	for i := 0; i < len(vffdim2SC); i++ {
  2107  		if f := Min(vffdim2SC[i][0], vffdim2SC[i][1]); !alike(fminSC[i], f) {
  2108  			t.Errorf("Min(%g, %g) = %g, want %g", vffdim2SC[i][0], vffdim2SC[i][1], f, fminSC[i])
  2109  		}
  2110  	}
  2111  }
  2112  
  2113  func TestMod(t *testing.T) {
  2114  	for i := 0; i < len(vf); i++ {
  2115  		if f := Mod(10, vf[i]); fmod[i] != f {
  2116  			t.Errorf("Mod(10, %g) = %g, want %g", vf[i], f, fmod[i])
  2117  		}
  2118  	}
  2119  	for i := 0; i < len(vffmodSC); i++ {
  2120  		if f := Mod(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
  2121  			t.Errorf("Mod(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
  2122  		}
  2123  	}
  2124  }
  2125  
  2126  func TestFrexp(t *testing.T) {
  2127  	for i := 0; i < len(vf); i++ {
  2128  		if f, j := Frexp(vf[i]); !veryclose(frexp[i].f, f) || frexp[i].i != j {
  2129  			t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vf[i], f, j, frexp[i].f, frexp[i].i)
  2130  		}
  2131  	}
  2132  	for i := 0; i < len(vffrexpSC); i++ {
  2133  		if f, j := Frexp(vffrexpSC[i]); !alike(frexpSC[i].f, f) || frexpSC[i].i != j {
  2134  			t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpSC[i], f, j, frexpSC[i].f, frexpSC[i].i)
  2135  		}
  2136  	}
  2137  	for i := 0; i < len(vffrexpBC); i++ {
  2138  		if f, j := Frexp(vffrexpBC[i]); !alike(frexpBC[i].f, f) || frexpBC[i].i != j {
  2139  			t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpBC[i], f, j, frexpBC[i].f, frexpBC[i].i)
  2140  		}
  2141  	}
  2142  }
  2143  
  2144  func TestGamma(t *testing.T) {
  2145  	for i := 0; i < len(vf); i++ {
  2146  		if f := Gamma(vf[i]); !close(gamma[i], f) {
  2147  			t.Errorf("Gamma(%g) = %g, want %g", vf[i], f, gamma[i])
  2148  		}
  2149  	}
  2150  	for i := 0; i < len(vfgammaSC); i++ {
  2151  		if f := Gamma(vfgammaSC[i]); !alike(gammaSC[i], f) {
  2152  			t.Errorf("Gamma(%g) = %g, want %g", vfgammaSC[i], f, gammaSC[i])
  2153  		}
  2154  	}
  2155  }
  2156  
  2157  func TestHypot(t *testing.T) {
  2158  	for i := 0; i < len(vf); i++ {
  2159  		a := Abs(1e200 * tanh[i] * Sqrt(2))
  2160  		if f := Hypot(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
  2161  			t.Errorf("Hypot(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
  2162  		}
  2163  	}
  2164  	for i := 0; i < len(vfhypotSC); i++ {
  2165  		if f := Hypot(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
  2166  			t.Errorf("Hypot(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
  2167  		}
  2168  	}
  2169  }
  2170  
  2171  func TestHypotGo(t *testing.T) {
  2172  	for i := 0; i < len(vf); i++ {
  2173  		a := Abs(1e200 * tanh[i] * Sqrt(2))
  2174  		if f := HypotGo(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
  2175  			t.Errorf("HypotGo(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
  2176  		}
  2177  	}
  2178  	for i := 0; i < len(vfhypotSC); i++ {
  2179  		if f := HypotGo(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
  2180  			t.Errorf("HypotGo(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
  2181  		}
  2182  	}
  2183  }
  2184  
  2185  func TestIlogb(t *testing.T) {
  2186  	for i := 0; i < len(vf); i++ {
  2187  		a := frexp[i].i - 1 // adjust because fr in the interval [½, 1)
  2188  		if e := Ilogb(vf[i]); a != e {
  2189  			t.Errorf("Ilogb(%g) = %d, want %d", vf[i], e, a)
  2190  		}
  2191  	}
  2192  	for i := 0; i < len(vflogbSC); i++ {
  2193  		if e := Ilogb(vflogbSC[i]); ilogbSC[i] != e {
  2194  			t.Errorf("Ilogb(%g) = %d, want %d", vflogbSC[i], e, ilogbSC[i])
  2195  		}
  2196  	}
  2197  	for i := 0; i < len(vffrexpBC); i++ {
  2198  		if e := Ilogb(vffrexpBC[i]); int(logbBC[i]) != e {
  2199  			t.Errorf("Ilogb(%g) = %d, want %d", vffrexpBC[i], e, int(logbBC[i]))
  2200  		}
  2201  	}
  2202  }
  2203  
  2204  func TestJ0(t *testing.T) {
  2205  	for i := 0; i < len(vf); i++ {
  2206  		if f := J0(vf[i]); !soclose(j0[i], f, 4e-14) {
  2207  			t.Errorf("J0(%g) = %g, want %g", vf[i], f, j0[i])
  2208  		}
  2209  	}
  2210  	for i := 0; i < len(vfj0SC); i++ {
  2211  		if f := J0(vfj0SC[i]); !alike(j0SC[i], f) {
  2212  			t.Errorf("J0(%g) = %g, want %g", vfj0SC[i], f, j0SC[i])
  2213  		}
  2214  	}
  2215  }
  2216  
  2217  func TestJ1(t *testing.T) {
  2218  	for i := 0; i < len(vf); i++ {
  2219  		if f := J1(vf[i]); !close(j1[i], f) {
  2220  			t.Errorf("J1(%g) = %g, want %g", vf[i], f, j1[i])
  2221  		}
  2222  	}
  2223  	for i := 0; i < len(vfj0SC); i++ {
  2224  		if f := J1(vfj0SC[i]); !alike(j1SC[i], f) {
  2225  			t.Errorf("J1(%g) = %g, want %g", vfj0SC[i], f, j1SC[i])
  2226  		}
  2227  	}
  2228  }
  2229  
  2230  func TestJn(t *testing.T) {
  2231  	for i := 0; i < len(vf); i++ {
  2232  		if f := Jn(2, vf[i]); !close(j2[i], f) {
  2233  			t.Errorf("Jn(2, %g) = %g, want %g", vf[i], f, j2[i])
  2234  		}
  2235  		if f := Jn(-3, vf[i]); !close(jM3[i], f) {
  2236  			t.Errorf("Jn(-3, %g) = %g, want %g", vf[i], f, jM3[i])
  2237  		}
  2238  	}
  2239  	for i := 0; i < len(vfj0SC); i++ {
  2240  		if f := Jn(2, vfj0SC[i]); !alike(j2SC[i], f) {
  2241  			t.Errorf("Jn(2, %g) = %g, want %g", vfj0SC[i], f, j2SC[i])
  2242  		}
  2243  		if f := Jn(-3, vfj0SC[i]); !alike(jM3SC[i], f) {
  2244  			t.Errorf("Jn(-3, %g) = %g, want %g", vfj0SC[i], f, jM3SC[i])
  2245  		}
  2246  	}
  2247  }
  2248  
  2249  func TestLdexp(t *testing.T) {
  2250  	for i := 0; i < len(vf); i++ {
  2251  		if f := Ldexp(frexp[i].f, frexp[i].i); !veryclose(vf[i], f) {
  2252  			t.Errorf("Ldexp(%g, %d) = %g, want %g", frexp[i].f, frexp[i].i, f, vf[i])
  2253  		}
  2254  	}
  2255  	for i := 0; i < len(vffrexpSC); i++ {
  2256  		if f := Ldexp(frexpSC[i].f, frexpSC[i].i); !alike(vffrexpSC[i], f) {
  2257  			t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpSC[i].f, frexpSC[i].i, f, vffrexpSC[i])
  2258  		}
  2259  	}
  2260  	for i := 0; i < len(vfldexpSC); i++ {
  2261  		if f := Ldexp(vfldexpSC[i].f, vfldexpSC[i].i); !alike(ldexpSC[i], f) {
  2262  			t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpSC[i].f, vfldexpSC[i].i, f, ldexpSC[i])
  2263  		}
  2264  	}
  2265  	for i := 0; i < len(vffrexpBC); i++ {
  2266  		if f := Ldexp(frexpBC[i].f, frexpBC[i].i); !alike(vffrexpBC[i], f) {
  2267  			t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpBC[i].f, frexpBC[i].i, f, vffrexpBC[i])
  2268  		}
  2269  	}
  2270  	for i := 0; i < len(vfldexpBC); i++ {
  2271  		if f := Ldexp(vfldexpBC[i].f, vfldexpBC[i].i); !alike(ldexpBC[i], f) {
  2272  			t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpBC[i].f, vfldexpBC[i].i, f, ldexpBC[i])
  2273  		}
  2274  	}
  2275  }
  2276  
  2277  func TestLgamma(t *testing.T) {
  2278  	for i := 0; i < len(vf); i++ {
  2279  		if f, s := Lgamma(vf[i]); !close(lgamma[i].f, f) || lgamma[i].i != s {
  2280  			t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vf[i], f, s, lgamma[i].f, lgamma[i].i)
  2281  		}
  2282  	}
  2283  	for i := 0; i < len(vflgammaSC); i++ {
  2284  		if f, s := Lgamma(vflgammaSC[i]); !alike(lgammaSC[i].f, f) || lgammaSC[i].i != s {
  2285  			t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vflgammaSC[i], f, s, lgammaSC[i].f, lgammaSC[i].i)
  2286  		}
  2287  	}
  2288  }
  2289  
  2290  func TestLog(t *testing.T) {
  2291  	for i := 0; i < len(vf); i++ {
  2292  		a := Abs(vf[i])
  2293  		if f := Log(a); log[i] != f {
  2294  			t.Errorf("Log(%g) = %g, want %g", a, f, log[i])
  2295  		}
  2296  	}
  2297  	if f := Log(10); f != Ln10 {
  2298  		t.Errorf("Log(%g) = %g, want %g", 10.0, f, Ln10)
  2299  	}
  2300  	for i := 0; i < len(vflogSC); i++ {
  2301  		if f := Log(vflogSC[i]); !alike(logSC[i], f) {
  2302  			t.Errorf("Log(%g) = %g, want %g", vflogSC[i], f, logSC[i])
  2303  		}
  2304  	}
  2305  }
  2306  
  2307  func TestLogb(t *testing.T) {
  2308  	for i := 0; i < len(vf); i++ {
  2309  		if f := Logb(vf[i]); logb[i] != f {
  2310  			t.Errorf("Logb(%g) = %g, want %g", vf[i], f, logb[i])
  2311  		}
  2312  	}
  2313  	for i := 0; i < len(vflogbSC); i++ {
  2314  		if f := Logb(vflogbSC[i]); !alike(logbSC[i], f) {
  2315  			t.Errorf("Logb(%g) = %g, want %g", vflogbSC[i], f, logbSC[i])
  2316  		}
  2317  	}
  2318  	for i := 0; i < len(vffrexpBC); i++ {
  2319  		if f := Logb(vffrexpBC[i]); !alike(logbBC[i], f) {
  2320  			t.Errorf("Logb(%g) = %g, want %g", vffrexpBC[i], f, logbBC[i])
  2321  		}
  2322  	}
  2323  }
  2324  
  2325  func TestLog10(t *testing.T) {
  2326  	for i := 0; i < len(vf); i++ {
  2327  		a := Abs(vf[i])
  2328  		if f := Log10(a); !veryclose(log10[i], f) {
  2329  			t.Errorf("Log10(%g) = %g, want %g", a, f, log10[i])
  2330  		}
  2331  	}
  2332  	if f := Log10(E); f != Log10E {
  2333  		t.Errorf("Log10(%g) = %g, want %g", E, f, Log10E)
  2334  	}
  2335  	for i := 0; i < len(vflogSC); i++ {
  2336  		if f := Log10(vflogSC[i]); !alike(logSC[i], f) {
  2337  			t.Errorf("Log10(%g) = %g, want %g", vflogSC[i], f, logSC[i])
  2338  		}
  2339  	}
  2340  }
  2341  
  2342  func TestLog1p(t *testing.T) {
  2343  	for i := 0; i < len(vf); i++ {
  2344  		a := vf[i] / 100
  2345  		if f := Log1p(a); !veryclose(log1p[i], f) {
  2346  			t.Errorf("Log1p(%g) = %g, want %g", a, f, log1p[i])
  2347  		}
  2348  	}
  2349  	a := 9.0
  2350  	if f := Log1p(a); f != Ln10 {
  2351  		t.Errorf("Log1p(%g) = %g, want %g", a, f, Ln10)
  2352  	}
  2353  	for i := 0; i < len(vflogSC); i++ {
  2354  		if f := Log1p(vflog1pSC[i]); !alike(log1pSC[i], f) {
  2355  			t.Errorf("Log1p(%g) = %g, want %g", vflog1pSC[i], f, log1pSC[i])
  2356  		}
  2357  	}
  2358  }
  2359  
  2360  func TestLog2(t *testing.T) {
  2361  	for i := 0; i < len(vf); i++ {
  2362  		a := Abs(vf[i])
  2363  		if f := Log2(a); !veryclose(log2[i], f) {
  2364  			t.Errorf("Log2(%g) = %g, want %g", a, f, log2[i])
  2365  		}
  2366  	}
  2367  	if f := Log2(E); f != Log2E {
  2368  		t.Errorf("Log2(%g) = %g, want %g", E, f, Log2E)
  2369  	}
  2370  	for i := 0; i < len(vflogSC); i++ {
  2371  		if f := Log2(vflogSC[i]); !alike(logSC[i], f) {
  2372  			t.Errorf("Log2(%g) = %g, want %g", vflogSC[i], f, logSC[i])
  2373  		}
  2374  	}
  2375  	for i := -1074; i <= 1023; i++ {
  2376  		f := Ldexp(1, i)
  2377  		l := Log2(f)
  2378  		if l != float64(i) {
  2379  			t.Errorf("Log2(2**%d) = %g, want %d", i, l, i)
  2380  		}
  2381  	}
  2382  }
  2383  
  2384  func TestModf(t *testing.T) {
  2385  	for i := 0; i < len(vf); i++ {
  2386  		if f, g := Modf(vf[i]); !veryclose(modf[i][0], f) || !veryclose(modf[i][1], g) {
  2387  			t.Errorf("Modf(%g) = %g, %g, want %g, %g", vf[i], f, g, modf[i][0], modf[i][1])
  2388  		}
  2389  	}
  2390  	for i := 0; i < len(vfmodfSC); i++ {
  2391  		if f, g := Modf(vfmodfSC[i]); !alike(modfSC[i][0], f) || !alike(modfSC[i][1], g) {
  2392  			t.Errorf("Modf(%g) = %g, %g, want %g, %g", vfmodfSC[i], f, g, modfSC[i][0], modfSC[i][1])
  2393  		}
  2394  	}
  2395  }
  2396  
  2397  func TestNextafter32(t *testing.T) {
  2398  	for i := 0; i < len(vf); i++ {
  2399  		vfi := float32(vf[i])
  2400  		if f := Nextafter32(vfi, 10); nextafter32[i] != f {
  2401  			t.Errorf("Nextafter32(%g, %g) = %g want %g", vfi, 10.0, f, nextafter32[i])
  2402  		}
  2403  	}
  2404  	for i := 0; i < len(vfnextafter32SC); i++ {
  2405  		if f := Nextafter32(vfnextafter32SC[i][0], vfnextafter32SC[i][1]); !alike(float64(nextafter32SC[i]), float64(f)) {
  2406  			t.Errorf("Nextafter32(%g, %g) = %g want %g", vfnextafter32SC[i][0], vfnextafter32SC[i][1], f, nextafter32SC[i])
  2407  		}
  2408  	}
  2409  }
  2410  
  2411  func TestNextafter64(t *testing.T) {
  2412  	for i := 0; i < len(vf); i++ {
  2413  		if f := Nextafter(vf[i], 10); nextafter64[i] != f {
  2414  			t.Errorf("Nextafter64(%g, %g) = %g want %g", vf[i], 10.0, f, nextafter64[i])
  2415  		}
  2416  	}
  2417  	for i := 0; i < len(vfnextafter64SC); i++ {
  2418  		if f := Nextafter(vfnextafter64SC[i][0], vfnextafter64SC[i][1]); !alike(nextafter64SC[i], f) {
  2419  			t.Errorf("Nextafter64(%g, %g) = %g want %g", vfnextafter64SC[i][0], vfnextafter64SC[i][1], f, nextafter64SC[i])
  2420  		}
  2421  	}
  2422  }
  2423  
  2424  func TestPow(t *testing.T) {
  2425  	for i := 0; i < len(vf); i++ {
  2426  		if f := Pow(10, vf[i]); !close(pow[i], f) {
  2427  			t.Errorf("Pow(10, %g) = %g, want %g", vf[i], f, pow[i])
  2428  		}
  2429  	}
  2430  	for i := 0; i < len(vfpowSC); i++ {
  2431  		if f := Pow(vfpowSC[i][0], vfpowSC[i][1]); !alike(powSC[i], f) {
  2432  			t.Errorf("Pow(%g, %g) = %g, want %g", vfpowSC[i][0], vfpowSC[i][1], f, powSC[i])
  2433  		}
  2434  	}
  2435  }
  2436  
  2437  func TestPow10(t *testing.T) {
  2438  	for i := 0; i < len(vfpow10SC); i++ {
  2439  		if f := Pow10(vfpow10SC[i]); !alike(pow10SC[i], f) {
  2440  			t.Errorf("Pow10(%d) = %g, want %g", vfpow10SC[i], f, pow10SC[i])
  2441  		}
  2442  	}
  2443  }
  2444  
  2445  func TestRemainder(t *testing.T) {
  2446  	for i := 0; i < len(vf); i++ {
  2447  		if f := Remainder(10, vf[i]); remainder[i] != f {
  2448  			t.Errorf("Remainder(10, %g) = %g, want %g", vf[i], f, remainder[i])
  2449  		}
  2450  	}
  2451  	for i := 0; i < len(vffmodSC); i++ {
  2452  		if f := Remainder(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
  2453  			t.Errorf("Remainder(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
  2454  		}
  2455  	}
  2456  }
  2457  
  2458  func TestSignbit(t *testing.T) {
  2459  	for i := 0; i < len(vf); i++ {
  2460  		if f := Signbit(vf[i]); signbit[i] != f {
  2461  			t.Errorf("Signbit(%g) = %t, want %t", vf[i], f, signbit[i])
  2462  		}
  2463  	}
  2464  	for i := 0; i < len(vfsignbitSC); i++ {
  2465  		if f := Signbit(vfsignbitSC[i]); signbitSC[i] != f {
  2466  			t.Errorf("Signbit(%g) = %t, want %t", vfsignbitSC[i], f, signbitSC[i])
  2467  		}
  2468  	}
  2469  }
  2470  func TestSin(t *testing.T) {
  2471  	for i := 0; i < len(vf); i++ {
  2472  		if f := Sin(vf[i]); !veryclose(sin[i], f) {
  2473  			t.Errorf("Sin(%g) = %g, want %g", vf[i], f, sin[i])
  2474  		}
  2475  	}
  2476  	for i := 0; i < len(vfsinSC); i++ {
  2477  		if f := Sin(vfsinSC[i]); !alike(sinSC[i], f) {
  2478  			t.Errorf("Sin(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
  2479  		}
  2480  	}
  2481  }
  2482  
  2483  func TestSincos(t *testing.T) {
  2484  	for i := 0; i < len(vf); i++ {
  2485  		if s, c := Sincos(vf[i]); !veryclose(sin[i], s) || !veryclose(cos[i], c) {
  2486  			t.Errorf("Sincos(%g) = %g, %g want %g, %g", vf[i], s, c, sin[i], cos[i])
  2487  		}
  2488  	}
  2489  }
  2490  
  2491  func TestSinh(t *testing.T) {
  2492  	for i := 0; i < len(vf); i++ {
  2493  		if f := Sinh(vf[i]); !close(sinh[i], f) {
  2494  			t.Errorf("Sinh(%g) = %g, want %g", vf[i], f, sinh[i])
  2495  		}
  2496  	}
  2497  	for i := 0; i < len(vfsinhSC); i++ {
  2498  		if f := Sinh(vfsinhSC[i]); !alike(sinhSC[i], f) {
  2499  			t.Errorf("Sinh(%g) = %g, want %g", vfsinhSC[i], f, sinhSC[i])
  2500  		}
  2501  	}
  2502  }
  2503  
  2504  func TestSqrt(t *testing.T) {
  2505  	for i := 0; i < len(vf); i++ {
  2506  		a := Abs(vf[i])
  2507  		if f := SqrtGo(a); sqrt[i] != f {
  2508  			t.Errorf("SqrtGo(%g) = %g, want %g", a, f, sqrt[i])
  2509  		}
  2510  		a = Abs(vf[i])
  2511  		if f := Sqrt(a); sqrt[i] != f {
  2512  			t.Errorf("Sqrt(%g) = %g, want %g", a, f, sqrt[i])
  2513  		}
  2514  	}
  2515  	for i := 0; i < len(vfsqrtSC); i++ {
  2516  		if f := SqrtGo(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
  2517  			t.Errorf("SqrtGo(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
  2518  		}
  2519  		if f := Sqrt(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
  2520  			t.Errorf("Sqrt(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
  2521  		}
  2522  	}
  2523  }
  2524  
  2525  func TestTan(t *testing.T) {
  2526  	for i := 0; i < len(vf); i++ {
  2527  		if f := Tan(vf[i]); !veryclose(tan[i], f) {
  2528  			t.Errorf("Tan(%g) = %g, want %g", vf[i], f, tan[i])
  2529  		}
  2530  	}
  2531  	// same special cases as Sin
  2532  	for i := 0; i < len(vfsinSC); i++ {
  2533  		if f := Tan(vfsinSC[i]); !alike(sinSC[i], f) {
  2534  			t.Errorf("Tan(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
  2535  		}
  2536  	}
  2537  }
  2538  
  2539  func TestTanh(t *testing.T) {
  2540  	for i := 0; i < len(vf); i++ {
  2541  		if f := Tanh(vf[i]); !veryclose(tanh[i], f) {
  2542  			t.Errorf("Tanh(%g) = %g, want %g", vf[i], f, tanh[i])
  2543  		}
  2544  	}
  2545  	for i := 0; i < len(vftanhSC); i++ {
  2546  		if f := Tanh(vftanhSC[i]); !alike(tanhSC[i], f) {
  2547  			t.Errorf("Tanh(%g) = %g, want %g", vftanhSC[i], f, tanhSC[i])
  2548  		}
  2549  	}
  2550  }
  2551  
  2552  func TestTrunc(t *testing.T) {
  2553  	for i := 0; i < len(vf); i++ {
  2554  		if f := Trunc(vf[i]); trunc[i] != f {
  2555  			t.Errorf("Trunc(%g) = %g, want %g", vf[i], f, trunc[i])
  2556  		}
  2557  	}
  2558  	for i := 0; i < len(vfceilSC); i++ {
  2559  		if f := Trunc(vfceilSC[i]); !alike(ceilSC[i], f) {
  2560  			t.Errorf("Trunc(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
  2561  		}
  2562  	}
  2563  }
  2564  
  2565  func TestY0(t *testing.T) {
  2566  	for i := 0; i < len(vf); i++ {
  2567  		a := Abs(vf[i])
  2568  		if f := Y0(a); !close(y0[i], f) {
  2569  			t.Errorf("Y0(%g) = %g, want %g", a, f, y0[i])
  2570  		}
  2571  	}
  2572  	for i := 0; i < len(vfy0SC); i++ {
  2573  		if f := Y0(vfy0SC[i]); !alike(y0SC[i], f) {
  2574  			t.Errorf("Y0(%g) = %g, want %g", vfy0SC[i], f, y0SC[i])
  2575  		}
  2576  	}
  2577  }
  2578  
  2579  func TestY1(t *testing.T) {
  2580  	for i := 0; i < len(vf); i++ {
  2581  		a := Abs(vf[i])
  2582  		if f := Y1(a); !soclose(y1[i], f, 2e-14) {
  2583  			t.Errorf("Y1(%g) = %g, want %g", a, f, y1[i])
  2584  		}
  2585  	}
  2586  	for i := 0; i < len(vfy0SC); i++ {
  2587  		if f := Y1(vfy0SC[i]); !alike(y1SC[i], f) {
  2588  			t.Errorf("Y1(%g) = %g, want %g", vfy0SC[i], f, y1SC[i])
  2589  		}
  2590  	}
  2591  }
  2592  
  2593  func TestYn(t *testing.T) {
  2594  	for i := 0; i < len(vf); i++ {
  2595  		a := Abs(vf[i])
  2596  		if f := Yn(2, a); !close(y2[i], f) {
  2597  			t.Errorf("Yn(2, %g) = %g, want %g", a, f, y2[i])
  2598  		}
  2599  		if f := Yn(-3, a); !close(yM3[i], f) {
  2600  			t.Errorf("Yn(-3, %g) = %g, want %g", a, f, yM3[i])
  2601  		}
  2602  	}
  2603  	for i := 0; i < len(vfy0SC); i++ {
  2604  		if f := Yn(2, vfy0SC[i]); !alike(y2SC[i], f) {
  2605  			t.Errorf("Yn(2, %g) = %g, want %g", vfy0SC[i], f, y2SC[i])
  2606  		}
  2607  		if f := Yn(-3, vfy0SC[i]); !alike(yM3SC[i], f) {
  2608  			t.Errorf("Yn(-3, %g) = %g, want %g", vfy0SC[i], f, yM3SC[i])
  2609  		}
  2610  	}
  2611  }
  2612  
  2613  // Check that math functions of high angle values
  2614  // return accurate results. [Since (vf[i] + large) - large != vf[i],
  2615  // testing for Trig(vf[i] + large) == Trig(vf[i]), where large is
  2616  // a multiple of 2*Pi, is misleading.]
  2617  func TestLargeCos(t *testing.T) {
  2618  	large := float64(100000 * Pi)
  2619  	for i := 0; i < len(vf); i++ {
  2620  		f1 := cosLarge[i]
  2621  		f2 := Cos(vf[i] + large)
  2622  		if !close(f1, f2) {
  2623  			t.Errorf("Cos(%g) = %g, want %g", vf[i]+large, f2, f1)
  2624  		}
  2625  	}
  2626  }
  2627  
  2628  func TestLargeSin(t *testing.T) {
  2629  	large := float64(100000 * Pi)
  2630  	for i := 0; i < len(vf); i++ {
  2631  		f1 := sinLarge[i]
  2632  		f2 := Sin(vf[i] + large)
  2633  		if !close(f1, f2) {
  2634  			t.Errorf("Sin(%g) = %g, want %g", vf[i]+large, f2, f1)
  2635  		}
  2636  	}
  2637  }
  2638  
  2639  func TestLargeSincos(t *testing.T) {
  2640  	large := float64(100000 * Pi)
  2641  	for i := 0; i < len(vf); i++ {
  2642  		f1, g1 := sinLarge[i], cosLarge[i]
  2643  		f2, g2 := Sincos(vf[i] + large)
  2644  		if !close(f1, f2) || !close(g1, g2) {
  2645  			t.Errorf("Sincos(%g) = %g, %g, want %g, %g", vf[i]+large, f2, g2, f1, g1)
  2646  		}
  2647  	}
  2648  }
  2649  
  2650  func TestLargeTan(t *testing.T) {
  2651  	large := float64(100000 * Pi)
  2652  	for i := 0; i < len(vf); i++ {
  2653  		f1 := tanLarge[i]
  2654  		f2 := Tan(vf[i] + large)
  2655  		if !close(f1, f2) {
  2656  			t.Errorf("Tan(%g) = %g, want %g", vf[i]+large, f2, f1)
  2657  		}
  2658  	}
  2659  }
  2660  
  2661  // Check that math constants are accepted by compiler
  2662  // and have right value (assumes strconv.ParseFloat works).
  2663  // https://golang.org/issue/201
  2664  
  2665  type floatTest struct {
  2666  	val  interface{}
  2667  	name string
  2668  	str  string
  2669  }
  2670  
  2671  var floatTests = []floatTest{
  2672  	{float64(MaxFloat64), "MaxFloat64", "1.7976931348623157e+308"},
  2673  	{float64(SmallestNonzeroFloat64), "SmallestNonzeroFloat64", "5e-324"},
  2674  	{float32(MaxFloat32), "MaxFloat32", "3.4028235e+38"},
  2675  	{float32(SmallestNonzeroFloat32), "SmallestNonzeroFloat32", "1e-45"},
  2676  }
  2677  
  2678  func TestFloatMinMax(t *testing.T) {
  2679  	for _, tt := range floatTests {
  2680  		s := fmt.Sprint(tt.val)
  2681  		if s != tt.str {
  2682  			t.Errorf("Sprint(%v) = %s, want %s", tt.name, s, tt.str)
  2683  		}
  2684  	}
  2685  }
  2686  
  2687  // Benchmarks
  2688  
  2689  func BenchmarkAcos(b *testing.B) {
  2690  	for i := 0; i < b.N; i++ {
  2691  		Acos(.5)
  2692  	}
  2693  }
  2694  
  2695  func BenchmarkAcosh(b *testing.B) {
  2696  	for i := 0; i < b.N; i++ {
  2697  		Acosh(1.5)
  2698  	}
  2699  }
  2700  
  2701  func BenchmarkAsin(b *testing.B) {
  2702  	for i := 0; i < b.N; i++ {
  2703  		Asin(.5)
  2704  	}
  2705  }
  2706  
  2707  func BenchmarkAsinh(b *testing.B) {
  2708  	for i := 0; i < b.N; i++ {
  2709  		Asinh(.5)
  2710  	}
  2711  }
  2712  
  2713  func BenchmarkAtan(b *testing.B) {
  2714  	for i := 0; i < b.N; i++ {
  2715  		Atan(.5)
  2716  	}
  2717  }
  2718  
  2719  func BenchmarkAtanh(b *testing.B) {
  2720  	for i := 0; i < b.N; i++ {
  2721  		Atanh(.5)
  2722  	}
  2723  }
  2724  
  2725  func BenchmarkAtan2(b *testing.B) {
  2726  	for i := 0; i < b.N; i++ {
  2727  		Atan2(.5, 1)
  2728  	}
  2729  }
  2730  
  2731  func BenchmarkCbrt(b *testing.B) {
  2732  	for i := 0; i < b.N; i++ {
  2733  		Cbrt(10)
  2734  	}
  2735  }
  2736  
  2737  func BenchmarkCeil(b *testing.B) {
  2738  	for i := 0; i < b.N; i++ {
  2739  		Ceil(.5)
  2740  	}
  2741  }
  2742  
  2743  func BenchmarkCopysign(b *testing.B) {
  2744  	for i := 0; i < b.N; i++ {
  2745  		Copysign(.5, -1)
  2746  	}
  2747  }
  2748  
  2749  func BenchmarkCos(b *testing.B) {
  2750  	for i := 0; i < b.N; i++ {
  2751  		Cos(.5)
  2752  	}
  2753  }
  2754  
  2755  func BenchmarkCosh(b *testing.B) {
  2756  	for i := 0; i < b.N; i++ {
  2757  		Cosh(2.5)
  2758  	}
  2759  }
  2760  
  2761  func BenchmarkErf(b *testing.B) {
  2762  	for i := 0; i < b.N; i++ {
  2763  		Erf(.5)
  2764  	}
  2765  }
  2766  
  2767  func BenchmarkErfc(b *testing.B) {
  2768  	for i := 0; i < b.N; i++ {
  2769  		Erfc(.5)
  2770  	}
  2771  }
  2772  
  2773  func BenchmarkExp(b *testing.B) {
  2774  	for i := 0; i < b.N; i++ {
  2775  		Exp(.5)
  2776  	}
  2777  }
  2778  
  2779  func BenchmarkExpGo(b *testing.B) {
  2780  	for i := 0; i < b.N; i++ {
  2781  		ExpGo(.5)
  2782  	}
  2783  }
  2784  
  2785  func BenchmarkExpm1(b *testing.B) {
  2786  	for i := 0; i < b.N; i++ {
  2787  		Expm1(.5)
  2788  	}
  2789  }
  2790  
  2791  func BenchmarkExp2(b *testing.B) {
  2792  	for i := 0; i < b.N; i++ {
  2793  		Exp2(.5)
  2794  	}
  2795  }
  2796  
  2797  func BenchmarkExp2Go(b *testing.B) {
  2798  	for i := 0; i < b.N; i++ {
  2799  		Exp2Go(.5)
  2800  	}
  2801  }
  2802  
  2803  func BenchmarkAbs(b *testing.B) {
  2804  	for i := 0; i < b.N; i++ {
  2805  		Abs(.5)
  2806  	}
  2807  }
  2808  
  2809  func BenchmarkDim(b *testing.B) {
  2810  	for i := 0; i < b.N; i++ {
  2811  		Dim(10, 3)
  2812  	}
  2813  }
  2814  
  2815  func BenchmarkFloor(b *testing.B) {
  2816  	for i := 0; i < b.N; i++ {
  2817  		Floor(.5)
  2818  	}
  2819  }
  2820  
  2821  func BenchmarkMax(b *testing.B) {
  2822  	for i := 0; i < b.N; i++ {
  2823  		Max(10, 3)
  2824  	}
  2825  }
  2826  
  2827  func BenchmarkMin(b *testing.B) {
  2828  	for i := 0; i < b.N; i++ {
  2829  		Min(10, 3)
  2830  	}
  2831  }
  2832  
  2833  func BenchmarkMod(b *testing.B) {
  2834  	for i := 0; i < b.N; i++ {
  2835  		Mod(10, 3)
  2836  	}
  2837  }
  2838  
  2839  func BenchmarkFrexp(b *testing.B) {
  2840  	for i := 0; i < b.N; i++ {
  2841  		Frexp(8)
  2842  	}
  2843  }
  2844  
  2845  func BenchmarkGamma(b *testing.B) {
  2846  	for i := 0; i < b.N; i++ {
  2847  		Gamma(2.5)
  2848  	}
  2849  }
  2850  
  2851  func BenchmarkHypot(b *testing.B) {
  2852  	for i := 0; i < b.N; i++ {
  2853  		Hypot(3, 4)
  2854  	}
  2855  }
  2856  
  2857  func BenchmarkHypotGo(b *testing.B) {
  2858  	for i := 0; i < b.N; i++ {
  2859  		HypotGo(3, 4)
  2860  	}
  2861  }
  2862  
  2863  func BenchmarkIlogb(b *testing.B) {
  2864  	for i := 0; i < b.N; i++ {
  2865  		Ilogb(.5)
  2866  	}
  2867  }
  2868  
  2869  func BenchmarkJ0(b *testing.B) {
  2870  	for i := 0; i < b.N; i++ {
  2871  		J0(2.5)
  2872  	}
  2873  }
  2874  
  2875  func BenchmarkJ1(b *testing.B) {
  2876  	for i := 0; i < b.N; i++ {
  2877  		J1(2.5)
  2878  	}
  2879  }
  2880  
  2881  func BenchmarkJn(b *testing.B) {
  2882  	for i := 0; i < b.N; i++ {
  2883  		Jn(2, 2.5)
  2884  	}
  2885  }
  2886  
  2887  func BenchmarkLdexp(b *testing.B) {
  2888  	for i := 0; i < b.N; i++ {
  2889  		Ldexp(.5, 2)
  2890  	}
  2891  }
  2892  
  2893  func BenchmarkLgamma(b *testing.B) {
  2894  	for i := 0; i < b.N; i++ {
  2895  		Lgamma(2.5)
  2896  	}
  2897  }
  2898  
  2899  func BenchmarkLog(b *testing.B) {
  2900  	for i := 0; i < b.N; i++ {
  2901  		Log(.5)
  2902  	}
  2903  }
  2904  
  2905  func BenchmarkLogb(b *testing.B) {
  2906  	for i := 0; i < b.N; i++ {
  2907  		Logb(.5)
  2908  	}
  2909  }
  2910  
  2911  func BenchmarkLog1p(b *testing.B) {
  2912  	for i := 0; i < b.N; i++ {
  2913  		Log1p(.5)
  2914  	}
  2915  }
  2916  
  2917  func BenchmarkLog10(b *testing.B) {
  2918  	for i := 0; i < b.N; i++ {
  2919  		Log10(.5)
  2920  	}
  2921  }
  2922  
  2923  func BenchmarkLog2(b *testing.B) {
  2924  	for i := 0; i < b.N; i++ {
  2925  		Log2(.5)
  2926  	}
  2927  }
  2928  
  2929  func BenchmarkModf(b *testing.B) {
  2930  	for i := 0; i < b.N; i++ {
  2931  		Modf(1.5)
  2932  	}
  2933  }
  2934  
  2935  func BenchmarkNextafter32(b *testing.B) {
  2936  	for i := 0; i < b.N; i++ {
  2937  		Nextafter32(.5, 1)
  2938  	}
  2939  }
  2940  
  2941  func BenchmarkNextafter64(b *testing.B) {
  2942  	for i := 0; i < b.N; i++ {
  2943  		Nextafter(.5, 1)
  2944  	}
  2945  }
  2946  
  2947  func BenchmarkPowInt(b *testing.B) {
  2948  	for i := 0; i < b.N; i++ {
  2949  		Pow(2, 2)
  2950  	}
  2951  }
  2952  
  2953  func BenchmarkPowFrac(b *testing.B) {
  2954  	for i := 0; i < b.N; i++ {
  2955  		Pow(2.5, 1.5)
  2956  	}
  2957  }
  2958  
  2959  func BenchmarkPow10Pos(b *testing.B) {
  2960  	for i := 0; i < b.N; i++ {
  2961  		Pow10(300)
  2962  	}
  2963  }
  2964  
  2965  func BenchmarkPow10Neg(b *testing.B) {
  2966  	for i := 0; i < b.N; i++ {
  2967  		Pow10(-300)
  2968  	}
  2969  }
  2970  
  2971  func BenchmarkRemainder(b *testing.B) {
  2972  	for i := 0; i < b.N; i++ {
  2973  		Remainder(10, 3)
  2974  	}
  2975  }
  2976  
  2977  func BenchmarkSignbit(b *testing.B) {
  2978  	for i := 0; i < b.N; i++ {
  2979  		Signbit(2.5)
  2980  	}
  2981  }
  2982  
  2983  func BenchmarkSin(b *testing.B) {
  2984  	for i := 0; i < b.N; i++ {
  2985  		Sin(.5)
  2986  	}
  2987  }
  2988  
  2989  func BenchmarkSincos(b *testing.B) {
  2990  	for i := 0; i < b.N; i++ {
  2991  		Sincos(.5)
  2992  	}
  2993  }
  2994  
  2995  func BenchmarkSinh(b *testing.B) {
  2996  	for i := 0; i < b.N; i++ {
  2997  		Sinh(2.5)
  2998  	}
  2999  }
  3000  
  3001  var Global float64
  3002  
  3003  func BenchmarkSqrt(b *testing.B) {
  3004  	x, y := 0.0, 10.0
  3005  	for i := 0; i < b.N; i++ {
  3006  		x += Sqrt(y)
  3007  	}
  3008  	Global = x
  3009  }
  3010  
  3011  func BenchmarkSqrtIndirect(b *testing.B) {
  3012  	x, y := 0.0, 10.0
  3013  	f := Sqrt
  3014  	for i := 0; i < b.N; i++ {
  3015  		x += f(y)
  3016  	}
  3017  	Global = x
  3018  }
  3019  
  3020  func BenchmarkSqrtGo(b *testing.B) {
  3021  	x, y := 0.0, 10.0
  3022  	for i := 0; i < b.N; i++ {
  3023  		x += SqrtGo(y)
  3024  	}
  3025  	Global = x
  3026  }
  3027  
  3028  func isPrime(i int) bool {
  3029  	// Yes, this is a dumb way to write this code,
  3030  	// but calling Sqrt repeatedly in this way demonstrates
  3031  	// the benefit of using a direct SQRT instruction on systems
  3032  	// that have one, whereas the obvious loop seems not to
  3033  	// demonstrate such a benefit.
  3034  	for j := 2; float64(j) <= Sqrt(float64(i)); j++ {
  3035  		if i%j == 0 {
  3036  			return false
  3037  		}
  3038  	}
  3039  	return true
  3040  }
  3041  
  3042  func BenchmarkSqrtPrime(b *testing.B) {
  3043  	any := false
  3044  	for i := 0; i < b.N; i++ {
  3045  		if isPrime(100003) {
  3046  			any = true
  3047  		}
  3048  	}
  3049  	if any {
  3050  		Global = 1
  3051  	}
  3052  }
  3053  
  3054  func BenchmarkTan(b *testing.B) {
  3055  	for i := 0; i < b.N; i++ {
  3056  		Tan(.5)
  3057  	}
  3058  }
  3059  
  3060  func BenchmarkTanh(b *testing.B) {
  3061  	for i := 0; i < b.N; i++ {
  3062  		Tanh(2.5)
  3063  	}
  3064  }
  3065  func BenchmarkTrunc(b *testing.B) {
  3066  	for i := 0; i < b.N; i++ {
  3067  		Trunc(.5)
  3068  	}
  3069  }
  3070  
  3071  func BenchmarkY0(b *testing.B) {
  3072  	for i := 0; i < b.N; i++ {
  3073  		Y0(2.5)
  3074  	}
  3075  }
  3076  
  3077  func BenchmarkY1(b *testing.B) {
  3078  	for i := 0; i < b.N; i++ {
  3079  		Y1(2.5)
  3080  	}
  3081  }
  3082  
  3083  func BenchmarkYn(b *testing.B) {
  3084  	for i := 0; i < b.N; i++ {
  3085  		Yn(2, 2.5)
  3086  	}
  3087  }