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