blob: 0a3cb0315d24d521a359d3e7c98aa3d52ea4a901 [file] [log] [blame]
Charles L. Dorian04217ee2010-02-05 00:41:30 -08001// Copyright 2009 The Go Authors. All rights reserved.
Russ Cox88daac72008-11-19 16:14:31 -08002// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Russ Cox3b864e42009-08-12 13:18:37 -07005package math_test
Russ Cox88daac72008-11-19 16:14:31 -08006
7import (
Robert Griesemera3d10452009-12-15 15:35:38 -08008 "fmt"
9 . "math"
10 "testing"
Russ Cox88daac72008-11-19 16:14:31 -080011)
12
Russ Cox2c5ec1e2009-10-06 19:40:35 -070013var 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,
Russ Coxbe2edb52009-03-03 08:39:12 -080024}
Charles L. Doriana0690b62010-02-01 22:21:40 -080025// The expected results below were computed by the high precision calculators
26// at http://keisan.casio.com/. More exact input values (array vf[], above)
27// were obtained by printing them with "%.26f". The answers were calculated
28// to 26 digits (by using the "Digit number" drop-down control of each
Charles L. Dorian22f84c52010-04-26 22:44:39 -070029// calculator).
Charles L. Dorianfd1db672010-01-08 14:12:10 -080030var acos = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -080031 1.0496193546107222142571536e+00,
32 6.8584012813664425171660692e-01,
33 1.5984878714577160325521819e+00,
34 2.0956199361475859327461799e+00,
35 2.7053008467824138592616927e-01,
36 1.2738121680361776018155625e+00,
37 1.0205369421140629186287407e+00,
38 1.2945003481781246062157835e+00,
39 1.3872364345374451433846657e+00,
40 2.6231510803970463967294145e+00,
41}
42var acosh = []float64{
43 2.4743347004159012494457618e+00,
44 2.8576385344292769649802701e+00,
45 7.2796961502981066190593175e-01,
46 2.4796794418831451156471977e+00,
47 3.0552020742306061857212962e+00,
48 2.044238592688586588942468e+00,
49 2.5158701513104513595766636e+00,
50 1.99050839282411638174299e+00,
51 1.6988625798424034227205445e+00,
52 2.9611454842470387925531875e+00,
Charles L. Dorianfd1db672010-01-08 14:12:10 -080053}
Russ Cox2c5ec1e2009-10-06 19:40:35 -070054var asin = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -080055 5.2117697218417440497416805e-01,
56 8.8495619865825236751471477e-01,
57 -02.769154466281941332086016e-02,
58 -5.2482360935268931351485822e-01,
59 1.3002662421166552333051524e+00,
60 2.9698415875871901741575922e-01,
61 5.5025938468083370060258102e-01,
62 2.7629597861677201301553823e-01,
63 1.83559892257451475846656e-01,
64 -1.0523547536021497774980928e+00,
65}
66var asinh = []float64{
67 2.3083139124923523427628243e+00,
68 2.743551594301593620039021e+00,
69 -2.7345908534880091229413487e-01,
70 -2.3145157644718338650499085e+00,
71 2.9613652154015058521951083e+00,
72 1.7949041616585821933067568e+00,
73 2.3564032905983506405561554e+00,
74 1.7287118790768438878045346e+00,
75 1.3626658083714826013073193e+00,
76 -2.8581483626513914445234004e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -080077}
Russ Cox2c5ec1e2009-10-06 19:40:35 -070078var atan = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -080079 1.372590262129621651920085e+00,
80 1.442290609645298083020664e+00,
81 -2.7011324359471758245192595e-01,
82 -1.3738077684543379452781531e+00,
83 1.4673921193587666049154681e+00,
84 1.2415173565870168649117764e+00,
85 1.3818396865615168979966498e+00,
86 1.2194305844639670701091426e+00,
87 1.0696031952318783760193244e+00,
88 -1.4561721938838084990898679e+00,
89}
90var atanh = []float64{
91 5.4651163712251938116878204e-01,
92 1.0299474112843111224914709e+00,
93 -2.7695084420740135145234906e-02,
94 -5.5072096119207195480202529e-01,
95 1.9943940993171843235906642e+00,
96 3.01448604578089708203017e-01,
97 5.8033427206942188834370595e-01,
98 2.7987997499441511013958297e-01,
99 1.8459947964298794318714228e-01,
100 -1.3273186910532645867272502e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -0800101}
Charles L. Dorian072b5602010-02-05 14:55:19 -0800102var atan2 = []float64{
103 1.1088291730037004444527075e+00,
104 9.1218183188715804018797795e-01,
105 1.5984772603216203736068915e+00,
106 2.0352918654092086637227327e+00,
107 8.0391819139044720267356014e-01,
108 1.2861075249894661588866752e+00,
109 1.0889904479131695712182587e+00,
110 1.3044821793397925293797357e+00,
111 1.3902530903455392306872261e+00,
112 2.2859857424479142655411058e+00,
113}
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -0800114var cbrt = []float64{
115 1.7075799841925094446722675e+00,
116 1.9779982212970353936691498e+00,
117 -6.5177429017779910853339447e-01,
118 -1.7111838886544019873338113e+00,
119 2.1279920909827937423960472e+00,
120 1.4303536770460741452312367e+00,
121 1.7357021059106154902341052e+00,
122 1.3972633462554328350552916e+00,
123 1.2221149580905388454977636e+00,
124 -2.0556003730500069110343596e+00,
125}
Charles L. Dorian3c753412010-01-11 16:20:51 -0800126var ceil = []float64{
127 5.0000000000000000e+00,
128 8.0000000000000000e+00,
129 0.0000000000000000e+00,
130 -5.0000000000000000e+00,
131 1.0000000000000000e+01,
132 3.0000000000000000e+00,
133 6.0000000000000000e+00,
134 3.0000000000000000e+00,
135 2.0000000000000000e+00,
136 -8.0000000000000000e+00,
137}
Charles L. Doriana0690b62010-02-01 22:21:40 -0800138var copysign = []float64{
139 -4.9790119248836735e+00,
140 -7.7388724745781045e+00,
141 -2.7688005719200159e-01,
142 -5.0106036182710749e+00,
143 -9.6362937071984173e+00,
144 -2.9263772392439646e+00,
145 -5.2290834314593066e+00,
146 -2.7279399104360102e+00,
147 -1.8253080916808550e+00,
148 -8.6859247685756013e+00,
149}
150var cos = []float64{
151 2.634752140995199110787593e-01,
152 1.148551260848219865642039e-01,
153 9.6191297325640768154550453e-01,
154 2.938141150061714816890637e-01,
155 -9.777138189897924126294461e-01,
156 -9.7693041344303219127199518e-01,
157 4.940088096948647263961162e-01,
158 -9.1565869021018925545016502e-01,
159 -2.517729313893103197176091e-01,
160 -7.39241351595676573201918e-01,
161}
Charles L. Dorian377ac332011-11-04 15:35:59 -0400162// Results for 100000 * Pi + vf[i]
163var cosLarge = []float64{
164 2.634752141185559426744e-01,
165 1.14855126055543100712e-01,
166 9.61912973266488928113e-01,
167 2.9381411499556122552e-01,
168 -9.777138189880161924641e-01,
169 -9.76930413445147608049e-01,
170 4.940088097314976789841e-01,
171 -9.15658690217517835002e-01,
172 -2.51772931436786954751e-01,
173 -7.3924135157173099849e-01,
174}
Charles L. Doriana0690b62010-02-01 22:21:40 -0800175var cosh = []float64{
176 7.2668796942212842775517446e+01,
177 1.1479413465659254502011135e+03,
178 1.0385767908766418550935495e+00,
179 7.5000957789658051428857788e+01,
180 7.655246669605357888468613e+03,
181 9.3567491758321272072888257e+00,
182 9.331351599270605471131735e+01,
183 7.6833430994624643209296404e+00,
184 3.1829371625150718153881164e+00,
185 2.9595059261916188501640911e+03,
186}
187var erf = []float64{
188 5.1865354817738701906913566e-01,
189 7.2623875834137295116929844e-01,
190 -3.123458688281309990629839e-02,
191 -5.2143121110253302920437013e-01,
192 8.2704742671312902508629582e-01,
193 3.2101767558376376743993945e-01,
194 5.403990312223245516066252e-01,
195 3.0034702916738588551174831e-01,
196 2.0369924417882241241559589e-01,
197 -7.8069386968009226729944677e-01,
198}
199var erfc = []float64{
200 4.8134645182261298093086434e-01,
201 2.7376124165862704883070156e-01,
202 1.0312345868828130999062984e+00,
203 1.5214312111025330292043701e+00,
204 1.7295257328687097491370418e-01,
205 6.7898232441623623256006055e-01,
206 4.596009687776754483933748e-01,
207 6.9965297083261411448825169e-01,
208 7.9630075582117758758440411e-01,
209 1.7806938696800922672994468e+00,
210}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700211var exp = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800212 1.4533071302642137507696589e+02,
213 2.2958822575694449002537581e+03,
214 7.5814542574851666582042306e-01,
215 6.6668778421791005061482264e-03,
216 1.5310493273896033740861206e+04,
217 1.8659907517999328638667732e+01,
218 1.8662167355098714543942057e+02,
219 1.5301332413189378961665788e+01,
220 6.2047063430646876349125085e+00,
221 1.6894712385826521111610438e-04,
222}
223var expm1 = []float64{
224 5.105047796122957327384770212e-02,
225 8.046199708567344080562675439e-02,
226 -2.764970978891639815187418703e-03,
227 -4.8871434888875355394330300273e-02,
228 1.0115864277221467777117227494e-01,
229 2.969616407795910726014621657e-02,
230 5.368214487944892300914037972e-02,
231 2.765488851131274068067445335e-02,
232 1.842068661871398836913874273e-02,
233 -8.3193870863553801814961137573e-02,
Russ Coxbe2edb52009-03-03 08:39:12 -0800234}
Charles L. Dorianaee14342010-02-10 00:06:41 -0800235var exp2 = []float64{
236 3.1537839463286288034313104e+01,
237 2.1361549283756232296144849e+02,
238 8.2537402562185562902577219e-01,
239 3.1021158628740294833424229e-02,
240 7.9581744110252191462569661e+02,
241 7.6019905892596359262696423e+00,
242 3.7506882048388096973183084e+01,
243 6.6250893439173561733216375e+00,
244 3.5438267900243941544605339e+00,
245 2.4281533133513300984289196e-03,
246}
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700247var fabs = []float64{
248 4.9790119248836735e+00,
249 7.7388724745781045e+00,
250 2.7688005719200159e-01,
251 5.0106036182710749e+00,
252 9.6362937071984173e+00,
253 2.9263772392439646e+00,
254 5.2290834314593066e+00,
255 2.7279399104360102e+00,
256 1.8253080916808550e+00,
257 8.6859247685756013e+00,
258}
Charles L. Dorianc4653312010-02-09 13:33:12 -0800259var fdim = []float64{
260 4.9790119248836735e+00,
261 7.7388724745781045e+00,
262 0.0000000000000000e+00,
263 0.0000000000000000e+00,
264 9.6362937071984173e+00,
265 2.9263772392439646e+00,
266 5.2290834314593066e+00,
267 2.7279399104360102e+00,
268 1.8253080916808550e+00,
269 0.0000000000000000e+00,
270}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700271var floor = []float64{
272 4.0000000000000000e+00,
273 7.0000000000000000e+00,
274 -1.0000000000000000e+00,
275 -6.0000000000000000e+00,
276 9.0000000000000000e+00,
277 2.0000000000000000e+00,
278 5.0000000000000000e+00,
279 2.0000000000000000e+00,
280 1.0000000000000000e+00,
281 -9.0000000000000000e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -0800282}
Charles L. Dorian3c753412010-01-11 16:20:51 -0800283var fmod = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800284 4.197615023265299782906368e-02,
285 2.261127525421895434476482e+00,
286 3.231794108794261433104108e-02,
287 4.989396381728925078391512e+00,
288 3.637062928015826201999516e-01,
289 1.220868282268106064236690e+00,
290 4.770916568540693347699744e+00,
291 1.816180268691969246219742e+00,
292 8.734595415957246977711748e-01,
293 1.314075231424398637614104e+00,
Charles L. Dorian3c753412010-01-11 16:20:51 -0800294}
Charles L. Dorian04217ee2010-02-05 00:41:30 -0800295
296type fi struct {
297 f float64
298 i int
299}
300
301var frexp = []fi{
Robert Griesemer34788912010-10-22 10:06:33 -0700302 {6.2237649061045918750e-01, 3},
303 {9.6735905932226306250e-01, 3},
304 {-5.5376011438400318000e-01, -1},
305 {-6.2632545228388436250e-01, 3},
306 {6.02268356699901081250e-01, 4},
307 {7.3159430981099115000e-01, 2},
308 {6.5363542893241332500e-01, 3},
309 {6.8198497760900255000e-01, 2},
310 {9.1265404584042750000e-01, 1},
311 {-5.4287029803597508250e-01, 4},
Charles L. Dorian04217ee2010-02-05 00:41:30 -0800312}
Charles L. Dorian26f0c832010-03-19 15:29:22 -0700313var gamma = []float64{
314 2.3254348370739963835386613898e+01,
315 2.991153837155317076427529816e+03,
316 -4.561154336726758060575129109e+00,
317 7.719403468842639065959210984e-01,
318 1.6111876618855418534325755566e+05,
319 1.8706575145216421164173224946e+00,
320 3.4082787447257502836734201635e+01,
321 1.579733951448952054898583387e+00,
322 9.3834586598354592860187267089e-01,
323 -2.093995902923148389186189429e-05,
324}
Charles L. Dorian6b6c3992010-03-24 09:25:49 -0700325var j0 = []float64{
326 -1.8444682230601672018219338e-01,
327 2.27353668906331975435892e-01,
328 9.809259936157051116270273e-01,
329 -1.741170131426226587841181e-01,
330 -2.1389448451144143352039069e-01,
331 -2.340905848928038763337414e-01,
332 -1.0029099691890912094586326e-01,
333 -1.5466726714884328135358907e-01,
334 3.252650187653420388714693e-01,
335 -8.72218484409407250005360235e-03,
336}
Charles L. Dorian1ec91c82010-03-26 14:09:39 -0700337var j1 = []float64{
338 -3.251526395295203422162967e-01,
339 1.893581711430515718062564e-01,
340 -1.3711761352467242914491514e-01,
341 3.287486536269617297529617e-01,
342 1.3133899188830978473849215e-01,
343 3.660243417832986825301766e-01,
344 -3.4436769271848174665420672e-01,
345 4.329481396640773768835036e-01,
346 5.8181350531954794639333955e-01,
347 -2.7030574577733036112996607e-01,
348}
349var j2 = []float64{
350 5.3837518920137802565192769e-02,
351 -1.7841678003393207281244667e-01,
352 9.521746934916464142495821e-03,
353 4.28958355470987397983072e-02,
354 2.4115371837854494725492872e-01,
355 4.842458532394520316844449e-01,
356 -3.142145220618633390125946e-02,
357 4.720849184745124761189957e-01,
358 3.122312022520957042957497e-01,
359 7.096213118930231185707277e-02,
360}
361var jM3 = []float64{
362 -3.684042080996403091021151e-01,
363 2.8157665936340887268092661e-01,
364 4.401005480841948348343589e-04,
365 3.629926999056814081597135e-01,
366 3.123672198825455192489266e-02,
367 -2.958805510589623607540455e-01,
368 -3.2033177696533233403289416e-01,
369 -2.592737332129663376736604e-01,
370 -1.0241334641061485092351251e-01,
371 -2.3762660886100206491674503e-01,
372}
Charles L. Dorian78e918c2010-02-22 17:12:48 -0800373var lgamma = []fi{
Robert Griesemer34788912010-10-22 10:06:33 -0700374 {3.146492141244545774319734e+00, 1},
375 {8.003414490659126375852113e+00, 1},
376 {1.517575735509779707488106e+00, -1},
377 {-2.588480028182145853558748e-01, 1},
378 {1.1989897050205555002007985e+01, 1},
379 {6.262899811091257519386906e-01, 1},
380 {3.5287924899091566764846037e+00, 1},
381 {4.5725644770161182299423372e-01, 1},
382 {-6.363667087767961257654854e-02, 1},
383 {-1.077385130910300066425564e+01, -1},
Charles L. Dorian78e918c2010-02-22 17:12:48 -0800384}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700385var log = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800386 1.605231462693062999102599e+00,
387 2.0462560018708770653153909e+00,
388 -1.2841708730962657801275038e+00,
389 1.6115563905281545116286206e+00,
390 2.2655365644872016636317461e+00,
391 1.0737652208918379856272735e+00,
392 1.6542360106073546632707956e+00,
393 1.0035467127723465801264487e+00,
394 6.0174879014578057187016475e-01,
395 2.161703872847352815363655e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -0800396}
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -0800397var logb = []float64{
Charles L. Dorianb233ac82010-09-28 10:15:21 -0400398 2.0000000000000000e+00,
399 2.0000000000000000e+00,
400 -2.0000000000000000e+00,
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -0800401 2.0000000000000000e+00,
402 3.0000000000000000e+00,
Charles L. Dorianb233ac82010-09-28 10:15:21 -0400403 1.0000000000000000e+00,
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -0800404 2.0000000000000000e+00,
405 1.0000000000000000e+00,
Charles L. Dorianb233ac82010-09-28 10:15:21 -0400406 0.0000000000000000e+00,
407 3.0000000000000000e+00,
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -0800408}
Charles L. Dorian46206c52010-01-11 21:28:02 -0800409var log10 = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800410 6.9714316642508290997617083e-01,
411 8.886776901739320576279124e-01,
412 -5.5770832400658929815908236e-01,
413 6.998900476822994346229723e-01,
414 9.8391002850684232013281033e-01,
415 4.6633031029295153334285302e-01,
416 7.1842557117242328821552533e-01,
417 4.3583479968917773161304553e-01,
418 2.6133617905227038228626834e-01,
419 9.3881606348649405716214241e-01,
420}
421var log1p = []float64{
422 4.8590257759797794104158205e-02,
423 7.4540265965225865330849141e-02,
424 -2.7726407903942672823234024e-03,
425 -5.1404917651627649094953380e-02,
426 9.1998280672258624681335010e-02,
427 2.8843762576593352865894824e-02,
428 5.0969534581863707268992645e-02,
429 2.6913947602193238458458594e-02,
430 1.8088493239630770262045333e-02,
431 -9.0865245631588989681559268e-02,
Charles L. Dorian46206c52010-01-11 21:28:02 -0800432}
Charles L. Dorianc4653312010-02-09 13:33:12 -0800433var log2 = []float64{
434 2.3158594707062190618898251e+00,
435 2.9521233862883917703341018e+00,
436 -1.8526669502700329984917062e+00,
437 2.3249844127278861543568029e+00,
438 3.268478366538305087466309e+00,
439 1.5491157592596970278166492e+00,
440 2.3865580889631732407886495e+00,
441 1.447811865817085365540347e+00,
442 8.6813999540425116282815557e-01,
443 3.118679457227342224364709e+00,
444}
Charles L. Dorian04217ee2010-02-05 00:41:30 -0800445var modf = [][2]float64{
Robert Griesemer34788912010-10-22 10:06:33 -0700446 {4.0000000000000000e+00, 9.7901192488367350108546816e-01},
447 {7.0000000000000000e+00, 7.3887247457810456552351752e-01},
448 {0.0000000000000000e+00, -2.7688005719200159404635997e-01},
449 {-5.0000000000000000e+00, -1.060361827107492160848778e-02},
450 {9.0000000000000000e+00, 6.3629370719841737980004837e-01},
451 {2.0000000000000000e+00, 9.2637723924396464525443662e-01},
452 {5.0000000000000000e+00, 2.2908343145930665230025625e-01},
453 {2.0000000000000000e+00, 7.2793991043601025126008608e-01},
454 {1.0000000000000000e+00, 8.2530809168085506044576505e-01},
455 {-8.0000000000000000e+00, -6.8592476857560136238589621e-01},
Charles L. Dorian04217ee2010-02-05 00:41:30 -0800456}
Charles L. Dorianc4653312010-02-09 13:33:12 -0800457var nextafter = []float64{
458 4.97901192488367438926388786e+00,
459 7.73887247457810545370193722e+00,
460 -2.7688005719200153853520874e-01,
461 -5.01060361827107403343006808e+00,
462 9.63629370719841915615688777e+00,
463 2.92637723924396508934364647e+00,
464 5.22908343145930754047867595e+00,
465 2.72793991043601069534929593e+00,
466 1.82530809168085528249036997e+00,
467 -8.68592476857559958602905681e+00,
468}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700469var pow = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800470 9.5282232631648411840742957e+04,
471 5.4811599352999901232411871e+07,
472 5.2859121715894396531132279e-01,
473 9.7587991957286474464259698e-06,
474 4.328064329346044846740467e+09,
475 8.4406761805034547437659092e+02,
476 1.6946633276191194947742146e+05,
477 5.3449040147551939075312879e+02,
478 6.688182138451414936380374e+01,
479 2.0609869004248742886827439e-09,
Russ Coxbe2edb52009-03-03 08:39:12 -0800480}
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -0800481var remainder = []float64{
482 4.197615023265299782906368e-02,
483 2.261127525421895434476482e+00,
484 3.231794108794261433104108e-02,
485 -2.120723654214984321697556e-02,
486 3.637062928015826201999516e-01,
487 1.220868282268106064236690e+00,
488 -4.581668629186133046005125e-01,
489 -9.117596417440410050403443e-01,
490 8.734595415957246977711748e-01,
491 1.314075231424398637614104e+00,
492}
Charles L. Dorian9aa8f952010-04-08 13:24:04 -0700493var signbit = []bool{
494 false,
495 false,
496 true,
497 true,
498 false,
499 false,
500 false,
501 false,
502 false,
503 true,
504}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700505var sin = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800506 -9.6466616586009283766724726e-01,
507 9.9338225271646545763467022e-01,
508 -2.7335587039794393342449301e-01,
509 9.5586257685042792878173752e-01,
510 -2.099421066779969164496634e-01,
511 2.135578780799860532750616e-01,
512 -8.694568971167362743327708e-01,
513 4.019566681155577786649878e-01,
514 9.6778633541687993721617774e-01,
515 -6.734405869050344734943028e-01,
Russ Coxbe2edb52009-03-03 08:39:12 -0800516}
Charles L. Dorian377ac332011-11-04 15:35:59 -0400517// Results for 100000 * Pi + vf[i]
518var sinLarge = []float64{
519 -9.646661658548936063912e-01,
520 9.933822527198506903752e-01,
521 -2.7335587036246899796e-01,
522 9.55862576853689321268e-01,
523 -2.099421066862688873691e-01,
524 2.13557878070308981163e-01,
525 -8.694568970959221300497e-01,
526 4.01956668098863248917e-01,
527 9.67786335404528727927e-01,
528 -6.7344058693131973066e-01,
529}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700530var sinh = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800531 7.2661916084208532301448439e+01,
532 1.1479409110035194500526446e+03,
533 -2.8043136512812518927312641e-01,
534 -7.499429091181587232835164e+01,
535 7.6552466042906758523925934e+03,
536 9.3031583421672014313789064e+00,
537 9.330815755828109072810322e+01,
538 7.6179893137269146407361477e+00,
539 3.021769180549615819524392e+00,
540 -2.95950575724449499189888e+03,
Russ Coxbe2edb52009-03-03 08:39:12 -0800541}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700542var sqrt = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800543 2.2313699659365484748756904e+00,
544 2.7818829009464263511285458e+00,
545 5.2619393496314796848143251e-01,
546 2.2384377628763938724244104e+00,
547 3.1042380236055381099288487e+00,
548 1.7106657298385224403917771e+00,
549 2.286718922705479046148059e+00,
550 1.6516476350711159636222979e+00,
551 1.3510396336454586262419247e+00,
552 2.9471892997524949215723329e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -0800553}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700554var tan = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800555 -3.661316565040227801781974e+00,
556 8.64900232648597589369854e+00,
557 -2.8417941955033612725238097e-01,
558 3.253290185974728640827156e+00,
559 2.147275640380293804770778e-01,
560 -2.18600910711067004921551e-01,
561 -1.760002817872367935518928e+00,
562 -4.389808914752818126249079e-01,
563 -3.843885560201130679995041e+00,
564 9.10988793377685105753416e-01,
Russ Coxbe2edb52009-03-03 08:39:12 -0800565}
Charles L. Dorian377ac332011-11-04 15:35:59 -0400566// Results for 100000 * Pi + vf[i]
567var tanLarge = []float64{
568 -3.66131656475596512705e+00,
569 8.6490023287202547927e+00,
570 -2.841794195104782406e-01,
571 3.2532901861033120983e+00,
572 2.14727564046880001365e-01,
573 -2.18600910700688062874e-01,
574 -1.760002817699722747043e+00,
575 -4.38980891453536115952e-01,
576 -3.84388555942723509071e+00,
577 9.1098879344275101051e-01,
578}
Russ Cox2c5ec1e2009-10-06 19:40:35 -0700579var tanh = []float64{
Charles L. Doriana0690b62010-02-01 22:21:40 -0800580 9.9990531206936338549262119e-01,
581 9.9999962057085294197613294e-01,
582 -2.7001505097318677233756845e-01,
583 -9.9991110943061718603541401e-01,
584 9.9999999146798465745022007e-01,
585 9.9427249436125236705001048e-01,
586 9.9994257600983138572705076e-01,
587 9.9149409509772875982054701e-01,
588 9.4936501296239685514466577e-01,
589 -9.9999994291374030946055701e-01,
590}
591var trunc = []float64{
592 4.0000000000000000e+00,
593 7.0000000000000000e+00,
594 -0.0000000000000000e+00,
595 -5.0000000000000000e+00,
596 9.0000000000000000e+00,
597 2.0000000000000000e+00,
598 5.0000000000000000e+00,
599 2.0000000000000000e+00,
600 1.0000000000000000e+00,
601 -8.0000000000000000e+00,
Russ Coxbe2edb52009-03-03 08:39:12 -0800602}
Charles L. Dorian6b6c3992010-03-24 09:25:49 -0700603var y0 = []float64{
604 -3.053399153780788357534855e-01,
605 1.7437227649515231515503649e-01,
606 -8.6221781263678836910392572e-01,
607 -3.100664880987498407872839e-01,
608 1.422200649300982280645377e-01,
609 4.000004067997901144239363e-01,
610 -3.3340749753099352392332536e-01,
611 4.5399790746668954555205502e-01,
612 4.8290004112497761007536522e-01,
613 2.7036697826604756229601611e-01,
614}
Charles L. Dorian1ec91c82010-03-26 14:09:39 -0700615var y1 = []float64{
616 0.15494213737457922210218611,
617 -0.2165955142081145245075746,
618 -2.4644949631241895201032829,
619 0.1442740489541836405154505,
620 0.2215379960518984777080163,
621 0.3038800915160754150565448,
622 0.0691107642452362383808547,
623 0.2380116417809914424860165,
624 -0.20849492979459761009678934,
625 0.0242503179793232308250804,
626}
627var y2 = []float64{
628 0.3675780219390303613394936,
629 -0.23034826393250119879267257,
630 -16.939677983817727205631397,
631 0.367653980523052152867791,
632 -0.0962401471767804440353136,
633 -0.1923169356184851105200523,
634 0.35984072054267882391843766,
635 -0.2794987252299739821654982,
636 -0.7113490692587462579757954,
637 -0.2647831587821263302087457,
638}
639var yM3 = []float64{
640 -0.14035984421094849100895341,
641 -0.097535139617792072703973,
642 242.25775994555580176377379,
643 -0.1492267014802818619511046,
644 0.26148702629155918694500469,
645 0.56675383593895176530394248,
646 -0.206150264009006981070575,
647 0.64784284687568332737963658,
648 1.3503631555901938037008443,
649 0.1461869756579956803341844,
650}
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800651
652// arguments and expected results for special cases
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700653var vfacosSC = []float64{
654 -Pi,
655 1,
656 Pi,
657 NaN(),
658}
659var acosSC = []float64{
660 NaN(),
661 0,
662 NaN(),
663 NaN(),
664}
665
Charles L. Doriana0690b62010-02-01 22:21:40 -0800666var vfacoshSC = []float64{
667 Inf(-1),
668 0.5,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700669 1,
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700670 Inf(1),
Charles L. Doriana0690b62010-02-01 22:21:40 -0800671 NaN(),
672}
673var acoshSC = []float64{
674 NaN(),
675 NaN(),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700676 0,
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700677 Inf(1),
Charles L. Doriana0690b62010-02-01 22:21:40 -0800678 NaN(),
679}
680
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800681var vfasinSC = []float64{
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -0800682 -Pi,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700683 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700684 0,
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -0800685 Pi,
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700686 NaN(),
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -0800687}
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800688var asinSC = []float64{
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -0800689 NaN(),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700690 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700691 0,
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800692 NaN(),
693 NaN(),
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -0800694}
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800695
Charles L. Doriana0690b62010-02-01 22:21:40 -0800696var vfasinhSC = []float64{
697 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700698 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700699 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800700 Inf(1),
701 NaN(),
702}
703var asinhSC = []float64{
704 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700705 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700706 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800707 Inf(1),
708 NaN(),
709}
710
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800711var vfatanSC = []float64{
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700712 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700713 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700714 0,
715 Inf(1),
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800716 NaN(),
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -0800717}
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800718var atanSC = []float64{
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700719 -Pi / 2,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700720 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700721 0,
722 Pi / 2,
Charles L. Dorianfd1db672010-01-08 14:12:10 -0800723 NaN(),
724}
Charles L. Dorian3c753412010-01-11 16:20:51 -0800725
Charles L. Doriana0690b62010-02-01 22:21:40 -0800726var vfatanhSC = []float64{
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700727 Inf(-1),
Charles L. Doriana0690b62010-02-01 22:21:40 -0800728 -Pi,
729 -1,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700730 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700731 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800732 1,
733 Pi,
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700734 Inf(1),
Charles L. Doriana0690b62010-02-01 22:21:40 -0800735 NaN(),
736}
737var atanhSC = []float64{
738 NaN(),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700739 NaN(),
Charles L. Doriana0690b62010-02-01 22:21:40 -0800740 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700741 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700742 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800743 Inf(1),
744 NaN(),
745 NaN(),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700746 NaN(),
Charles L. Doriana0690b62010-02-01 22:21:40 -0800747}
Charles L. Dorian072b5602010-02-05 14:55:19 -0800748var vfatan2SC = [][2]float64{
Robert Griesemer34788912010-10-22 10:06:33 -0700749 {Inf(-1), Inf(-1)},
750 {Inf(-1), -Pi},
751 {Inf(-1), 0},
752 {Inf(-1), +Pi},
753 {Inf(-1), Inf(1)},
754 {Inf(-1), NaN()},
755 {-Pi, Inf(-1)},
756 {-Pi, 0},
757 {-Pi, Inf(1)},
758 {-Pi, NaN()},
759 {Copysign(0, -1), Inf(-1)},
760 {Copysign(0, -1), -Pi},
761 {Copysign(0, -1), Copysign(0, -1)},
762 {Copysign(0, -1), 0},
763 {Copysign(0, -1), +Pi},
764 {Copysign(0, -1), Inf(1)},
765 {Copysign(0, -1), NaN()},
766 {0, Inf(-1)},
767 {0, -Pi},
768 {0, Copysign(0, -1)},
769 {0, 0},
770 {0, +Pi},
771 {0, Inf(1)},
772 {0, NaN()},
773 {+Pi, Inf(-1)},
774 {+Pi, 0},
775 {+Pi, Inf(1)},
776 {+Pi, NaN()},
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 {NaN(), NaN()},
Charles L. Dorian072b5602010-02-05 14:55:19 -0800784}
785var atan2SC = []float64{
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700786 -3 * Pi / 4, // atan2(-Inf, -Inf)
787 -Pi / 2, // atan2(-Inf, -Pi)
788 -Pi / 2, // atan2(-Inf, +0)
789 -Pi / 2, // atan2(-Inf, +Pi)
790 -Pi / 4, // atan2(-Inf, +Inf)
791 NaN(), // atan2(-Inf, NaN)
792 -Pi, // atan2(-Pi, -Inf)
793 -Pi / 2, // atan2(-Pi, +0)
794 Copysign(0, -1), // atan2(-Pi, Inf)
795 NaN(), // atan2(-Pi, NaN)
796 -Pi, // atan2(-0, -Inf)
797 -Pi, // atan2(-0, -Pi)
798 -Pi, // atan2(-0, -0)
799 Copysign(0, -1), // atan2(-0, +0)
800 Copysign(0, -1), // atan2(-0, +Pi)
801 Copysign(0, -1), // atan2(-0, +Inf)
802 NaN(), // atan2(-0, NaN)
803 Pi, // atan2(+0, -Inf)
804 Pi, // atan2(+0, -Pi)
805 Pi, // atan2(+0, -0)
806 0, // atan2(+0, +0)
807 0, // atan2(+0, +Pi)
808 0, // atan2(+0, +Inf)
809 NaN(), // atan2(+0, NaN)
810 Pi, // atan2(+Pi, -Inf)
811 Pi / 2, // atan2(+Pi, +0)
812 0, // atan2(+Pi, +Inf)
813 NaN(), // atan2(+Pi, NaN)
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 NaN(), // atan2(NaN, NaN)
Charles L. Dorian072b5602010-02-05 14:55:19 -0800821}
Charles L. Doriana0690b62010-02-01 22:21:40 -0800822
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -0800823var vfcbrtSC = []float64{
824 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700825 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700826 0,
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -0800827 Inf(1),
828 NaN(),
829}
830var cbrtSC = []float64{
831 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700832 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700833 0,
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -0800834 Inf(1),
835 NaN(),
836}
837
Charles L. Dorian46206c52010-01-11 21:28:02 -0800838var vfceilSC = []float64{
839 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700840 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700841 0,
Charles L. Dorian46206c52010-01-11 21:28:02 -0800842 Inf(1),
843 NaN(),
844}
845var ceilSC = []float64{
846 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700847 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700848 0,
Charles L. Dorian46206c52010-01-11 21:28:02 -0800849 Inf(1),
850 NaN(),
851}
852
Charles L. Doriana0690b62010-02-01 22:21:40 -0800853var vfcopysignSC = []float64{
854 Inf(-1),
855 Inf(1),
856 NaN(),
857}
858var copysignSC = []float64{
859 Inf(-1),
860 Inf(-1),
861 NaN(),
862}
863
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700864var vfcosSC = []float64{
865 Inf(-1),
866 Inf(1),
867 NaN(),
868}
869var cosSC = []float64{
870 NaN(),
871 NaN(),
872 NaN(),
873}
874
875var vfcoshSC = []float64{
876 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700877 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700878 0,
879 Inf(1),
880 NaN(),
881}
882var coshSC = []float64{
883 Inf(1),
884 1,
885 1,
886 Inf(1),
887 NaN(),
888}
889
Charles L. Doriana0690b62010-02-01 22:21:40 -0800890var vferfSC = []float64{
891 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700892 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700893 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800894 Inf(1),
895 NaN(),
896}
897var erfSC = []float64{
898 -1,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700899 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700900 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800901 1,
902 NaN(),
903}
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700904
905var vferfcSC = []float64{
906 Inf(-1),
907 Inf(1),
908 NaN(),
909}
Charles L. Doriana0690b62010-02-01 22:21:40 -0800910var erfcSC = []float64{
911 2,
912 0,
913 NaN(),
914}
915
Charles L. Dorian46206c52010-01-11 21:28:02 -0800916var vfexpSC = []float64{
917 Inf(-1),
Charles L. Dorianc8c2bdb2010-08-06 16:50:48 -0700918 -2000,
919 2000,
Charles L. Dorian46206c52010-01-11 21:28:02 -0800920 Inf(1),
921 NaN(),
922}
923var expSC = []float64{
924 0,
Charles L. Dorianc8c2bdb2010-08-06 16:50:48 -0700925 0,
926 Inf(1),
Charles L. Dorian46206c52010-01-11 21:28:02 -0800927 Inf(1),
928 NaN(),
929}
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700930
931var vfexpm1SC = []float64{
932 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700933 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700934 0,
935 Inf(1),
936 NaN(),
937}
Charles L. Doriana0690b62010-02-01 22:21:40 -0800938var expm1SC = []float64{
939 -1,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700940 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700941 0,
942 Inf(1),
943 NaN(),
944}
945
946var vffabsSC = []float64{
947 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -0700948 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -0700949 0,
950 Inf(1),
951 NaN(),
952}
953var fabsSC = []float64{
954 Inf(1),
955 0,
956 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -0800957 Inf(1),
958 NaN(),
959}
Charles L. Dorian46206c52010-01-11 21:28:02 -0800960
Charles L. Doriane4de2e72011-12-07 14:52:17 -0500961var vffdimSC = [][2]float64{
962 {Inf(-1), Inf(-1)},
963 {Inf(-1), Inf(1)},
964 {Inf(-1), NaN()},
965 {Copysign(0, -1), Copysign(0, -1)},
966 {Copysign(0, -1), 0},
967 {0, Copysign(0, -1)},
968 {0, 0},
969 {Inf(1), Inf(-1)},
970 {Inf(1), Inf(1)},
971 {Inf(1), NaN()},
972 {NaN(), Inf(-1)},
973 {NaN(), Copysign(0, -1)},
974 {NaN(), 0},
975 {NaN(), Inf(1)},
976 {NaN(), NaN()},
977}
978var fdimSC = []float64{
979 NaN(),
980 0,
981 NaN(),
982 0,
983 0,
984 0,
985 0,
986 Inf(1),
987 NaN(),
988 NaN(),
989 NaN(),
990 NaN(),
991 NaN(),
992 NaN(),
993 NaN(),
994}
995var fmaxSC = []float64{
996 Inf(-1),
997 Inf(1),
998 NaN(),
999 Copysign(0, -1),
1000 0,
1001 0,
1002 0,
1003 Inf(1),
1004 Inf(1),
1005 Inf(1),
1006 NaN(),
1007 NaN(),
1008 NaN(),
1009 Inf(1),
1010 NaN(),
1011}
1012var fminSC = []float64{
1013 Inf(-1),
1014 Inf(-1),
1015 Inf(-1),
1016 Copysign(0, -1),
1017 Copysign(0, -1),
1018 Copysign(0, -1),
1019 0,
1020 Inf(-1),
1021 Inf(1),
1022 NaN(),
1023 Inf(-1),
1024 NaN(),
1025 NaN(),
1026 NaN(),
1027 NaN(),
1028}
1029
Charles L. Dorian3c753412010-01-11 16:20:51 -08001030var vffmodSC = [][2]float64{
Robert Griesemer34788912010-10-22 10:06:33 -07001031 {Inf(-1), Inf(-1)},
1032 {Inf(-1), -Pi},
1033 {Inf(-1), 0},
1034 {Inf(-1), Pi},
1035 {Inf(-1), Inf(1)},
1036 {Inf(-1), NaN()},
1037 {-Pi, Inf(-1)},
1038 {-Pi, 0},
1039 {-Pi, Inf(1)},
1040 {-Pi, NaN()},
1041 {Copysign(0, -1), Inf(-1)},
1042 {Copysign(0, -1), 0},
1043 {Copysign(0, -1), Inf(1)},
1044 {Copysign(0, -1), NaN()},
1045 {0, Inf(-1)},
1046 {0, 0},
1047 {0, Inf(1)},
1048 {0, NaN()},
1049 {Pi, Inf(-1)},
1050 {Pi, 0},
1051 {Pi, Inf(1)},
1052 {Pi, NaN()},
1053 {Inf(1), Inf(-1)},
1054 {Inf(1), -Pi},
1055 {Inf(1), 0},
1056 {Inf(1), Pi},
1057 {Inf(1), Inf(1)},
1058 {Inf(1), NaN()},
1059 {NaN(), Inf(-1)},
1060 {NaN(), -Pi},
1061 {NaN(), 0},
1062 {NaN(), Pi},
1063 {NaN(), Inf(1)},
1064 {NaN(), NaN()},
Charles L. Dorian3c753412010-01-11 16:20:51 -08001065}
1066var fmodSC = []float64{
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001067 NaN(), // fmod(-Inf, -Inf)
1068 NaN(), // fmod(-Inf, -Pi)
1069 NaN(), // fmod(-Inf, 0)
1070 NaN(), // fmod(-Inf, Pi)
1071 NaN(), // fmod(-Inf, +Inf)
1072 NaN(), // fmod(-Inf, NaN)
1073 -Pi, // fmod(-Pi, -Inf)
1074 NaN(), // fmod(-Pi, 0)
1075 -Pi, // fmod(-Pi, +Inf)
1076 NaN(), // fmod(-Pi, NaN)
1077 Copysign(0, -1), // fmod(-0, -Inf)
1078 NaN(), // fmod(-0, 0)
1079 Copysign(0, -1), // fmod(-0, Inf)
1080 NaN(), // fmod(-0, NaN)
1081 0, // fmod(0, -Inf)
1082 NaN(), // fmod(0, 0)
1083 0, // fmod(0, +Inf)
1084 NaN(), // fmod(0, NaN)
1085 Pi, // fmod(Pi, -Inf)
1086 NaN(), // fmod(Pi, 0)
1087 Pi, // fmod(Pi, +Inf)
1088 NaN(), // fmod(Pi, NaN)
1089 NaN(), // fmod(+Inf, -Inf)
1090 NaN(), // fmod(+Inf, -Pi)
1091 NaN(), // fmod(+Inf, 0)
1092 NaN(), // fmod(+Inf, Pi)
1093 NaN(), // fmod(+Inf, +Inf)
1094 NaN(), // fmod(+Inf, NaN)
1095 NaN(), // fmod(NaN, -Inf)
1096 NaN(), // fmod(NaN, -Pi)
1097 NaN(), // fmod(NaN, 0)
1098 NaN(), // fmod(NaN, Pi)
1099 NaN(), // fmod(NaN, +Inf)
1100 NaN(), // fmod(NaN, NaN)
Charles L. Dorian3c753412010-01-11 16:20:51 -08001101}
1102
Charles L. Dorian04217ee2010-02-05 00:41:30 -08001103var vffrexpSC = []float64{
1104 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001105 Copysign(0, -1),
Charles L. Dorian04217ee2010-02-05 00:41:30 -08001106 0,
1107 Inf(1),
1108 NaN(),
1109}
1110var frexpSC = []fi{
Robert Griesemer34788912010-10-22 10:06:33 -07001111 {Inf(-1), 0},
1112 {Copysign(0, -1), 0},
1113 {0, 0},
1114 {Inf(1), 0},
1115 {NaN(), 0},
Charles L. Dorian04217ee2010-02-05 00:41:30 -08001116}
1117
Charles L. Dorian26f0c832010-03-19 15:29:22 -07001118var vfgammaSC = []float64{
1119 Inf(-1),
1120 -3,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001121 Copysign(0, -1),
Charles L. Dorian26f0c832010-03-19 15:29:22 -07001122 0,
1123 Inf(1),
1124 NaN(),
1125}
1126var gammaSC = []float64{
1127 Inf(-1),
1128 Inf(1),
1129 Inf(1),
1130 Inf(1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001131 Inf(1),
Charles L. Dorian26f0c832010-03-19 15:29:22 -07001132 NaN(),
1133}
1134
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08001135var vfhypotSC = [][2]float64{
Robert Griesemer34788912010-10-22 10:06:33 -07001136 {Inf(-1), Inf(-1)},
1137 {Inf(-1), 0},
1138 {Inf(-1), Inf(1)},
1139 {Inf(-1), NaN()},
1140 {Copysign(0, -1), Copysign(0, -1)},
1141 {Copysign(0, -1), 0},
1142 {0, Copysign(0, -1)},
1143 {0, 0}, // +0, +0
1144 {0, Inf(-1)},
1145 {0, Inf(1)},
1146 {0, NaN()},
1147 {Inf(1), Inf(-1)},
1148 {Inf(1), 0},
1149 {Inf(1), Inf(1)},
1150 {Inf(1), NaN()},
1151 {NaN(), Inf(-1)},
1152 {NaN(), 0},
1153 {NaN(), Inf(1)},
1154 {NaN(), NaN()},
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08001155}
1156var hypotSC = []float64{
1157 Inf(1),
1158 Inf(1),
1159 Inf(1),
1160 Inf(1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001161 0,
1162 0,
1163 0,
1164 0,
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08001165 Inf(1),
1166 Inf(1),
1167 NaN(),
1168 Inf(1),
1169 Inf(1),
1170 Inf(1),
1171 Inf(1),
1172 Inf(1),
1173 NaN(),
1174 Inf(1),
1175 NaN(),
1176}
1177
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08001178var vfilogbSC = []float64{
1179 Inf(-1),
1180 0,
1181 Inf(1),
1182 NaN(),
1183}
1184var ilogbSC = []int{
1185 MaxInt32,
1186 MinInt32,
1187 MaxInt32,
1188 MaxInt32,
1189}
1190
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07001191var vfj0SC = []float64{
1192 Inf(-1),
1193 0,
1194 Inf(1),
1195 NaN(),
1196}
1197var j0SC = []float64{
1198 0,
1199 1,
1200 0,
1201 NaN(),
1202}
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07001203var j1SC = []float64{
1204 0,
1205 0,
1206 0,
1207 NaN(),
1208}
1209var j2SC = []float64{
1210 0,
1211 0,
1212 0,
1213 NaN(),
1214}
1215var jM3SC = []float64{
1216 0,
1217 0,
1218 0,
1219 NaN(),
1220}
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07001221
Eoghan Sherry13c2e622011-01-19 14:23:59 -05001222var vfldexpSC = []fi{
1223 {0, 0},
1224 {0, -1075},
1225 {0, 1024},
1226 {Copysign(0, -1), 0},
1227 {Copysign(0, -1), -1075},
1228 {Copysign(0, -1), 1024},
1229 {Inf(1), 0},
1230 {Inf(1), -1024},
1231 {Inf(-1), 0},
1232 {Inf(-1), -1024},
1233 {NaN(), -1024},
1234}
1235var ldexpSC = []float64{
1236 0,
1237 0,
1238 0,
1239 Copysign(0, -1),
1240 Copysign(0, -1),
1241 Copysign(0, -1),
1242 Inf(1),
1243 Inf(1),
1244 Inf(-1),
1245 Inf(-1),
1246 NaN(),
1247}
1248
Charles L. Dorian78e918c2010-02-22 17:12:48 -08001249var vflgammaSC = []float64{
1250 Inf(-1),
1251 -3,
1252 0,
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001253 1,
1254 2,
Charles L. Dorian78e918c2010-02-22 17:12:48 -08001255 Inf(1),
1256 NaN(),
1257}
1258var lgammaSC = []fi{
Robert Griesemer34788912010-10-22 10:06:33 -07001259 {Inf(-1), 1},
1260 {Inf(1), 1},
1261 {Inf(1), 1},
1262 {0, 1},
1263 {0, 1},
1264 {Inf(1), 1},
1265 {NaN(), 1},
Charles L. Dorian78e918c2010-02-22 17:12:48 -08001266}
1267
Charles L. Dorian46206c52010-01-11 21:28:02 -08001268var vflogSC = []float64{
1269 Inf(-1),
1270 -Pi,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001271 Copysign(0, -1),
Charles L. Dorian46206c52010-01-11 21:28:02 -08001272 0,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001273 1,
Charles L. Dorian46206c52010-01-11 21:28:02 -08001274 Inf(1),
1275 NaN(),
1276}
1277var logSC = []float64{
1278 NaN(),
1279 NaN(),
1280 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001281 Inf(-1),
1282 0,
Charles L. Dorian46206c52010-01-11 21:28:02 -08001283 Inf(1),
1284 NaN(),
1285}
1286
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08001287var vflogbSC = []float64{
1288 Inf(-1),
1289 0,
1290 Inf(1),
1291 NaN(),
1292}
1293var logbSC = []float64{
1294 Inf(1),
1295 Inf(-1),
1296 Inf(1),
1297 NaN(),
1298}
1299
Charles L. Doriana0690b62010-02-01 22:21:40 -08001300var vflog1pSC = []float64{
1301 Inf(-1),
1302 -Pi,
1303 -1,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001304 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001305 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -08001306 Inf(1),
1307 NaN(),
1308}
1309var log1pSC = []float64{
1310 NaN(),
1311 NaN(),
1312 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001313 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001314 0,
Charles L. Doriana0690b62010-02-01 22:21:40 -08001315 Inf(1),
1316 NaN(),
1317}
1318
Charles L. Dorian04217ee2010-02-05 00:41:30 -08001319var vfmodfSC = []float64{
1320 Inf(-1),
1321 Inf(1),
1322 NaN(),
1323}
1324var modfSC = [][2]float64{
Robert Griesemer34788912010-10-22 10:06:33 -07001325 {Inf(-1), NaN()}, // [2]float64{Copysign(0, -1), Inf(-1)},
1326 {Inf(1), NaN()}, // [2]float64{0, Inf(1)},
1327 {NaN(), NaN()},
Charles L. Dorian04217ee2010-02-05 00:41:30 -08001328}
1329
Charles L. Dorianc4653312010-02-09 13:33:12 -08001330var vfnextafterSC = [][2]float64{
Charles L. Dorianf5c21112011-12-12 15:51:11 -05001331 {0, 0},
1332 {0, Copysign(0, -1)},
1333 {0, -1},
Robert Griesemer34788912010-10-22 10:06:33 -07001334 {0, NaN()},
Charles L. Dorianf5c21112011-12-12 15:51:11 -05001335 {Copysign(0, -1), 1},
1336 {Copysign(0, -1), 0},
1337 {Copysign(0, -1), Copysign(0, -1)},
1338 {Copysign(0, -1), -1},
Robert Griesemer34788912010-10-22 10:06:33 -07001339 {NaN(), 0},
1340 {NaN(), NaN()},
Charles L. Dorianc4653312010-02-09 13:33:12 -08001341}
1342var nextafterSC = []float64{
Charles L. Dorianf5c21112011-12-12 15:51:11 -05001343 0,
1344 0,
1345 -4.9406564584124654418e-324, // Float64frombits(0x8000000000000001)
Charles L. Dorianc4653312010-02-09 13:33:12 -08001346 NaN(),
Charles L. Dorianf5c21112011-12-12 15:51:11 -05001347 4.9406564584124654418e-324, // Float64frombits(0x0000000000000001)
1348 Copysign(0, -1),
1349 Copysign(0, -1),
1350 -4.9406564584124654418e-324, // Float64frombits(0x8000000000000001)
Charles L. Dorianc4653312010-02-09 13:33:12 -08001351 NaN(),
1352 NaN(),
1353}
1354
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001355var vfpowSC = [][2]float64{
Robert Griesemer34788912010-10-22 10:06:33 -07001356 {Inf(-1), -Pi},
1357 {Inf(-1), -3},
1358 {Inf(-1), Copysign(0, -1)},
1359 {Inf(-1), 0},
1360 {Inf(-1), 1},
1361 {Inf(-1), 3},
1362 {Inf(-1), Pi},
1363 {Inf(-1), NaN()},
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001364
Robert Griesemer34788912010-10-22 10:06:33 -07001365 {-Pi, Inf(-1)},
1366 {-Pi, -Pi},
1367 {-Pi, Copysign(0, -1)},
1368 {-Pi, 0},
1369 {-Pi, 1},
1370 {-Pi, Pi},
1371 {-Pi, Inf(1)},
1372 {-Pi, NaN()},
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001373
Robert Griesemer34788912010-10-22 10:06:33 -07001374 {-1, Inf(-1)},
1375 {-1, Inf(1)},
1376 {-1, NaN()},
1377 {-1 / 2, Inf(-1)},
1378 {-1 / 2, Inf(1)},
1379 {Copysign(0, -1), Inf(-1)},
1380 {Copysign(0, -1), -Pi},
1381 {Copysign(0, -1), -3},
1382 {Copysign(0, -1), 3},
1383 {Copysign(0, -1), Pi},
1384 {Copysign(0, -1), Inf(1)},
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001385
Robert Griesemer34788912010-10-22 10:06:33 -07001386 {0, Inf(-1)},
1387 {0, -Pi},
1388 {0, -3},
1389 {0, Copysign(0, -1)},
1390 {0, 0},
1391 {0, 3},
1392 {0, Pi},
1393 {0, Inf(1)},
1394 {0, NaN()},
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001395
Robert Griesemer34788912010-10-22 10:06:33 -07001396 {1 / 2, Inf(-1)},
1397 {1 / 2, Inf(1)},
1398 {1, Inf(-1)},
1399 {1, Inf(1)},
1400 {1, NaN()},
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001401
Robert Griesemer34788912010-10-22 10:06:33 -07001402 {Pi, Inf(-1)},
1403 {Pi, Copysign(0, -1)},
1404 {Pi, 0},
1405 {Pi, 1},
1406 {Pi, Inf(1)},
1407 {Pi, NaN()},
1408 {Inf(1), -Pi},
1409 {Inf(1), Copysign(0, -1)},
1410 {Inf(1), 0},
1411 {Inf(1), 1},
1412 {Inf(1), Pi},
1413 {Inf(1), NaN()},
1414 {NaN(), -Pi},
1415 {NaN(), Copysign(0, -1)},
1416 {NaN(), 0},
1417 {NaN(), 1},
1418 {NaN(), Pi},
1419 {NaN(), NaN()},
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08001420}
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001421var powSC = []float64{
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001422 0, // pow(-Inf, -Pi)
1423 Copysign(0, -1), // pow(-Inf, -3)
1424 1, // pow(-Inf, -0)
1425 1, // pow(-Inf, +0)
1426 Inf(-1), // pow(-Inf, 1)
1427 Inf(-1), // pow(-Inf, 3)
1428 Inf(1), // pow(-Inf, Pi)
1429 NaN(), // pow(-Inf, NaN)
1430 0, // pow(-Pi, -Inf)
1431 NaN(), // pow(-Pi, -Pi)
1432 1, // pow(-Pi, -0)
1433 1, // pow(-Pi, +0)
1434 -Pi, // pow(-Pi, 1)
1435 NaN(), // pow(-Pi, Pi)
1436 Inf(1), // pow(-Pi, +Inf)
1437 NaN(), // pow(-Pi, NaN)
1438 1, // pow(-1, -Inf) IEEE 754-2008
1439 1, // pow(-1, +Inf) IEEE 754-2008
1440 NaN(), // pow(-1, NaN)
1441 Inf(1), // pow(-1/2, -Inf)
1442 0, // pow(-1/2, +Inf)
1443 Inf(1), // pow(-0, -Inf)
1444 Inf(1), // pow(-0, -Pi)
1445 Inf(-1), // pow(-0, -3) IEEE 754-2008
1446 Copysign(0, -1), // pow(-0, 3) IEEE 754-2008
1447 0, // pow(-0, +Pi)
1448 0, // pow(-0, +Inf)
1449 Inf(1), // pow(+0, -Inf)
1450 Inf(1), // pow(+0, -Pi)
1451 Inf(1), // pow(+0, -3)
1452 1, // pow(+0, -0)
1453 1, // pow(+0, +0)
1454 0, // pow(+0, 3)
1455 0, // pow(+0, +Pi)
1456 0, // pow(+0, +Inf)
1457 NaN(), // pow(+0, NaN)
1458 Inf(1), // pow(1/2, -Inf)
1459 0, // pow(1/2, +Inf)
1460 1, // pow(1, -Inf) IEEE 754-2008
1461 1, // pow(1, +Inf) IEEE 754-2008
1462 1, // pow(1, NaN) IEEE 754-2008
1463 0, // pow(+Pi, -Inf)
1464 1, // pow(+Pi, -0)
1465 1, // pow(+Pi, +0)
1466 Pi, // pow(+Pi, 1)
1467 Inf(1), // pow(+Pi, +Inf)
1468 NaN(), // pow(+Pi, NaN)
1469 0, // pow(+Inf, -Pi)
1470 1, // pow(+Inf, -0)
1471 1, // pow(+Inf, +0)
1472 Inf(1), // pow(+Inf, 1)
1473 Inf(1), // pow(+Inf, Pi)
1474 NaN(), // pow(+Inf, NaN)
1475 NaN(), // pow(NaN, -Pi)
1476 1, // pow(NaN, -0)
1477 1, // pow(NaN, +0)
1478 NaN(), // pow(NaN, 1)
1479 NaN(), // pow(NaN, +Pi)
1480 NaN(), // pow(NaN, NaN)
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08001481}
Russ Cox88daac72008-11-19 16:14:31 -08001482
Volker Doblerf78e7d32011-08-24 13:59:52 -04001483var vfpow10SC = []int{
1484 MinInt32,
1485 MaxInt32,
1486 -325,
1487 309,
1488}
1489
1490var pow10SC = []float64{
1491 0, // pow10(MinInt32)
1492 Inf(1), // pow10(MaxInt32)
1493 0, // pow10(-325)
1494 Inf(1), // pow10(309)
1495}
1496
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07001497var vfsignbitSC = []float64{
1498 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001499 Copysign(0, -1),
1500 0,
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07001501 Inf(1),
1502 NaN(),
1503}
1504var signbitSC = []bool{
1505 true,
1506 true,
1507 false,
1508 false,
1509 false,
1510}
1511
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001512var vfsinSC = []float64{
1513 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001514 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001515 0,
1516 Inf(1),
1517 NaN(),
1518}
1519var sinSC = []float64{
1520 NaN(),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001521 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001522 0,
1523 NaN(),
1524 NaN(),
1525}
1526
1527var vfsinhSC = []float64{
1528 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001529 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001530 0,
1531 Inf(1),
1532 NaN(),
1533}
1534var sinhSC = []float64{
1535 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001536 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001537 0,
1538 Inf(1),
1539 NaN(),
1540}
1541
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08001542var vfsqrtSC = []float64{
1543 Inf(-1),
1544 -Pi,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001545 Copysign(0, -1),
Charles L. Dorian879241d2010-05-18 22:16:01 -07001546 0,
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08001547 Inf(1),
1548 NaN(),
1549}
1550var sqrtSC = []float64{
1551 NaN(),
1552 NaN(),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001553 Copysign(0, -1),
Charles L. Dorian879241d2010-05-18 22:16:01 -07001554 0,
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08001555 Inf(1),
1556 NaN(),
1557}
1558
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001559var vftanhSC = []float64{
1560 Inf(-1),
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001561 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001562 0,
1563 Inf(1),
1564 NaN(),
1565}
1566var tanhSC = []float64{
1567 -1,
Charles L. Dorian3d4c97b2010-06-02 20:55:47 -07001568 Copysign(0, -1),
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001569 0,
1570 1,
1571 NaN(),
1572}
1573
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07001574var vfy0SC = []float64{
1575 Inf(-1),
1576 0,
1577 Inf(1),
1578 NaN(),
1579}
1580var y0SC = []float64{
1581 NaN(),
1582 Inf(-1),
1583 0,
1584 NaN(),
1585}
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07001586var y1SC = []float64{
1587 NaN(),
1588 Inf(-1),
1589 0,
1590 NaN(),
1591}
1592var y2SC = []float64{
1593 NaN(),
1594 Inf(-1),
1595 0,
1596 NaN(),
1597}
1598var yM3SC = []float64{
1599 NaN(),
1600 Inf(1),
1601 0,
1602 NaN(),
1603}
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07001604
Eoghan Sherry13c2e622011-01-19 14:23:59 -05001605// arguments and expected results for boundary cases
1606const (
1607 SmallestNormalFloat64 = 2.2250738585072014e-308 // 2**-1022
1608 LargestSubnormalFloat64 = SmallestNormalFloat64 - SmallestNonzeroFloat64
1609)
1610
1611var vffrexpBC = []float64{
1612 SmallestNormalFloat64,
1613 LargestSubnormalFloat64,
1614 SmallestNonzeroFloat64,
1615 MaxFloat64,
1616 -SmallestNormalFloat64,
1617 -LargestSubnormalFloat64,
1618 -SmallestNonzeroFloat64,
1619 -MaxFloat64,
1620}
1621var frexpBC = []fi{
1622 {0.5, -1021},
1623 {0.99999999999999978, -1022},
1624 {0.5, -1073},
1625 {0.99999999999999989, 1024},
1626 {-0.5, -1021},
1627 {-0.99999999999999978, -1022},
1628 {-0.5, -1073},
1629 {-0.99999999999999989, 1024},
1630}
1631
1632var vfldexpBC = []fi{
1633 {SmallestNormalFloat64, -52},
1634 {LargestSubnormalFloat64, -51},
1635 {SmallestNonzeroFloat64, 1074},
1636 {MaxFloat64, -(1023 + 1074)},
1637 {1, -1075},
1638 {-1, -1075},
1639 {1, 1024},
1640 {-1, 1024},
1641}
1642var ldexpBC = []float64{
1643 SmallestNonzeroFloat64,
1644 1e-323, // 2**-1073
1645 1,
1646 1e-323, // 2**-1073
1647 0,
1648 Copysign(0, -1),
1649 Inf(1),
1650 Inf(-1),
1651}
1652
1653var logbBC = []float64{
1654 -1022,
1655 -1023,
1656 -1074,
1657 1023,
1658 -1022,
1659 -1023,
1660 -1074,
1661 1023,
1662}
1663
Russ Cox2c5ec1e2009-10-06 19:40:35 -07001664func tolerance(a, b, e float64) bool {
Robert Griesemera3d10452009-12-15 15:35:38 -08001665 d := a - b
Russ Cox88daac72008-11-19 16:14:31 -08001666 if d < 0 {
Robert Griesemer40621d52009-11-09 12:07:39 -08001667 d = -d
Russ Cox88daac72008-11-19 16:14:31 -08001668 }
1669
Russ Cox88daac72008-11-19 16:14:31 -08001670 if a != 0 {
Robert Griesemera3d10452009-12-15 15:35:38 -08001671 e = e * a
Russ Cox88daac72008-11-19 16:14:31 -08001672 if e < 0 {
Robert Griesemer40621d52009-11-09 12:07:39 -08001673 e = -e
Russ Cox88daac72008-11-19 16:14:31 -08001674 }
1675 }
Robert Griesemera3d10452009-12-15 15:35:38 -08001676 return d < e
Russ Cox88daac72008-11-19 16:14:31 -08001677}
Robert Griesemera3d10452009-12-15 15:35:38 -08001678func kindaclose(a, b float64) bool { return tolerance(a, b, 1e-8) }
1679func close(a, b float64) bool { return tolerance(a, b, 1e-14) }
1680func veryclose(a, b float64) bool { return tolerance(a, b, 4e-16) }
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07001681func soclose(a, b, e float64) bool { return tolerance(a, b, e) }
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08001682func alike(a, b float64) bool {
1683 switch {
1684 case IsNaN(a) && IsNaN(b):
1685 return true
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08001686 case a == b:
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07001687 return Signbit(a) == Signbit(b)
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08001688 }
1689 return false
1690}
Russ Cox88daac72008-11-19 16:14:31 -08001691
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001692func TestAcos(t *testing.T) {
1693 for i := 0; i < len(vf); i++ {
Charles L. Doriana0690b62010-02-01 22:21:40 -08001694 a := vf[i] / 10
1695 if f := Acos(a); !close(acos[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001696 t.Errorf("Acos(%g) = %g, want %g", a, f, acos[i])
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001697 }
1698 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001699 for i := 0; i < len(vfacosSC); i++ {
1700 if f := Acos(vfacosSC[i]); !alike(acosSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001701 t.Errorf("Acos(%g) = %g, want %g", vfacosSC[i], f, acosSC[i])
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001702 }
1703 }
1704}
1705
Charles L. Doriana0690b62010-02-01 22:21:40 -08001706func TestAcosh(t *testing.T) {
1707 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07001708 a := 1 + Abs(vf[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001709 if f := Acosh(a); !veryclose(acosh[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001710 t.Errorf("Acosh(%g) = %g, want %g", a, f, acosh[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001711 }
1712 }
1713 for i := 0; i < len(vfacoshSC); i++ {
1714 if f := Acosh(vfacoshSC[i]); !alike(acoshSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001715 t.Errorf("Acosh(%g) = %g, want %g", vfacoshSC[i], f, acoshSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001716 }
1717 }
1718}
1719
Russ Cox839a6842009-01-20 14:40:40 -08001720func TestAsin(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08001721 for i := 0; i < len(vf); i++ {
Charles L. Doriana0690b62010-02-01 22:21:40 -08001722 a := vf[i] / 10
1723 if f := Asin(a); !veryclose(asin[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001724 t.Errorf("Asin(%g) = %g, want %g", a, f, asin[i])
Russ Cox88daac72008-11-19 16:14:31 -08001725 }
1726 }
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001727 for i := 0; i < len(vfasinSC); i++ {
1728 if f := Asin(vfasinSC[i]); !alike(asinSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001729 t.Errorf("Asin(%g) = %g, want %g", vfasinSC[i], f, asinSC[i])
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001730 }
1731 }
Russ Cox88daac72008-11-19 16:14:31 -08001732}
1733
Charles L. Doriana0690b62010-02-01 22:21:40 -08001734func TestAsinh(t *testing.T) {
1735 for i := 0; i < len(vf); i++ {
1736 if f := Asinh(vf[i]); !veryclose(asinh[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001737 t.Errorf("Asinh(%g) = %g, want %g", vf[i], f, asinh[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001738 }
1739 }
1740 for i := 0; i < len(vfasinhSC); i++ {
1741 if f := Asinh(vfasinhSC[i]); !alike(asinhSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001742 t.Errorf("Asinh(%g) = %g, want %g", vfasinhSC[i], f, asinhSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001743 }
1744 }
1745}
1746
Russ Cox839a6842009-01-20 14:40:40 -08001747func TestAtan(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08001748 for i := 0; i < len(vf); i++ {
Russ Cox04960402009-08-10 22:02:51 -07001749 if f := Atan(vf[i]); !veryclose(atan[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001750 t.Errorf("Atan(%g) = %g, want %g", vf[i], f, atan[i])
Russ Cox88daac72008-11-19 16:14:31 -08001751 }
1752 }
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001753 for i := 0; i < len(vfatanSC); i++ {
1754 if f := Atan(vfatanSC[i]); !alike(atanSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001755 t.Errorf("Atan(%g) = %g, want %g", vfatanSC[i], f, atanSC[i])
Charles L. Dorianfd1db672010-01-08 14:12:10 -08001756 }
1757 }
Russ Cox88daac72008-11-19 16:14:31 -08001758}
1759
Charles L. Doriana0690b62010-02-01 22:21:40 -08001760func TestAtanh(t *testing.T) {
1761 for i := 0; i < len(vf); i++ {
1762 a := vf[i] / 10
1763 if f := Atanh(a); !veryclose(atanh[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001764 t.Errorf("Atanh(%g) = %g, want %g", a, f, atanh[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001765 }
1766 }
1767 for i := 0; i < len(vfatanhSC); i++ {
1768 if f := Atanh(vfatanhSC[i]); !alike(atanhSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001769 t.Errorf("Atanh(%g) = %g, want %g", vfatanhSC[i], f, atanhSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001770 }
1771 }
1772}
1773
Charles L. Dorian072b5602010-02-05 14:55:19 -08001774func TestAtan2(t *testing.T) {
1775 for i := 0; i < len(vf); i++ {
1776 if f := Atan2(10, vf[i]); !veryclose(atan2[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001777 t.Errorf("Atan2(10, %g) = %g, want %g", vf[i], f, atan2[i])
Charles L. Dorian072b5602010-02-05 14:55:19 -08001778 }
1779 }
1780 for i := 0; i < len(vfatan2SC); i++ {
1781 if f := Atan2(vfatan2SC[i][0], vfatan2SC[i][1]); !alike(atan2SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001782 t.Errorf("Atan2(%g, %g) = %g, want %g", vfatan2SC[i][0], vfatan2SC[i][1], f, atan2SC[i])
Charles L. Dorian072b5602010-02-05 14:55:19 -08001783 }
1784 }
1785}
1786
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08001787func TestCbrt(t *testing.T) {
1788 for i := 0; i < len(vf); i++ {
1789 if f := Cbrt(vf[i]); !veryclose(cbrt[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001790 t.Errorf("Cbrt(%g) = %g, want %g", vf[i], f, cbrt[i])
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08001791 }
1792 }
1793 for i := 0; i < len(vfcbrtSC); i++ {
1794 if f := Cbrt(vfcbrtSC[i]); !alike(cbrtSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001795 t.Errorf("Cbrt(%g) = %g, want %g", vfcbrtSC[i], f, cbrtSC[i])
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08001796 }
1797 }
1798}
1799
Charles L. Dorian3c753412010-01-11 16:20:51 -08001800func TestCeil(t *testing.T) {
1801 for i := 0; i < len(vf); i++ {
1802 if f := Ceil(vf[i]); ceil[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10001803 t.Errorf("Ceil(%g) = %g, want %g", vf[i], f, ceil[i])
Charles L. Dorian3c753412010-01-11 16:20:51 -08001804 }
1805 }
Charles L. Dorian46206c52010-01-11 21:28:02 -08001806 for i := 0; i < len(vfceilSC); i++ {
1807 if f := Ceil(vfceilSC[i]); !alike(ceilSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001808 t.Errorf("Ceil(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08001809 }
1810 }
Charles L. Dorian3c753412010-01-11 16:20:51 -08001811}
1812
Charles L. Doriana0690b62010-02-01 22:21:40 -08001813func TestCopysign(t *testing.T) {
1814 for i := 0; i < len(vf); i++ {
1815 if f := Copysign(vf[i], -1); copysign[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10001816 t.Errorf("Copysign(%g, -1) = %g, want %g", vf[i], f, copysign[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001817 }
1818 }
Charles L. Dorianc8c2bdb2010-08-06 16:50:48 -07001819 for i := 0; i < len(vf); i++ {
1820 if f := Copysign(vf[i], 1); -copysign[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10001821 t.Errorf("Copysign(%g, 1) = %g, want %g", vf[i], f, -copysign[i])
Charles L. Dorianc8c2bdb2010-08-06 16:50:48 -07001822 }
1823 }
Charles L. Doriana0690b62010-02-01 22:21:40 -08001824 for i := 0; i < len(vfcopysignSC); i++ {
1825 if f := Copysign(vfcopysignSC[i], -1); !alike(copysignSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001826 t.Errorf("Copysign(%g, -1) = %g, want %g", vfcopysignSC[i], f, copysignSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001827 }
1828 }
1829}
1830
1831func TestCos(t *testing.T) {
1832 for i := 0; i < len(vf); i++ {
Charles L. Dorian739c4422011-10-31 14:26:05 -04001833 if f := Cos(vf[i]); !veryclose(cos[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001834 t.Errorf("Cos(%g) = %g, want %g", vf[i], f, cos[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001835 }
1836 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001837 for i := 0; i < len(vfcosSC); i++ {
1838 if f := Cos(vfcosSC[i]); !alike(cosSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001839 t.Errorf("Cos(%g) = %g, want %g", vfcosSC[i], f, cosSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001840 }
1841 }
Charles L. Doriana0690b62010-02-01 22:21:40 -08001842}
1843
1844func TestCosh(t *testing.T) {
1845 for i := 0; i < len(vf); i++ {
Russ Coxb13b80e2010-02-01 22:46:37 -08001846 if f := Cosh(vf[i]); !close(cosh[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001847 t.Errorf("Cosh(%g) = %g, want %g", vf[i], f, cosh[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001848 }
1849 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001850 for i := 0; i < len(vfcoshSC); i++ {
1851 if f := Cosh(vfcoshSC[i]); !alike(coshSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001852 t.Errorf("Cosh(%g) = %g, want %g", vfcoshSC[i], f, coshSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001853 }
1854 }
Charles L. Doriana0690b62010-02-01 22:21:40 -08001855}
1856
1857func TestErf(t *testing.T) {
1858 for i := 0; i < len(vf); i++ {
1859 a := vf[i] / 10
1860 if f := Erf(a); !veryclose(erf[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001861 t.Errorf("Erf(%g) = %g, want %g", a, f, erf[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001862 }
1863 }
1864 for i := 0; i < len(vferfSC); i++ {
1865 if f := Erf(vferfSC[i]); !alike(erfSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001866 t.Errorf("Erf(%g) = %g, want %g", vferfSC[i], f, erfSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001867 }
1868 }
1869}
1870
1871func TestErfc(t *testing.T) {
1872 for i := 0; i < len(vf); i++ {
1873 a := vf[i] / 10
1874 if f := Erfc(a); !veryclose(erfc[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001875 t.Errorf("Erfc(%g) = %g, want %g", a, f, erfc[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001876 }
1877 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001878 for i := 0; i < len(vferfcSC); i++ {
1879 if f := Erfc(vferfcSC[i]); !alike(erfcSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001880 t.Errorf("Erfc(%g) = %g, want %g", vferfcSC[i], f, erfcSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001881 }
1882 }
1883}
1884
Russ Cox839a6842009-01-20 14:40:40 -08001885func TestExp(t *testing.T) {
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05001886 testExp(t, Exp, "Exp")
1887 testExp(t, ExpGo, "ExpGo")
1888}
1889
1890func testExp(t *testing.T, Exp func(float64) float64, name string) {
Russ Cox88daac72008-11-19 16:14:31 -08001891 for i := 0; i < len(vf); i++ {
Devon H. O'Dell4ffbff12010-01-29 12:54:05 -08001892 if f := Exp(vf[i]); !close(exp[i], f) {
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05001893 t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp[i])
Russ Cox88daac72008-11-19 16:14:31 -08001894 }
1895 }
Charles L. Dorian46206c52010-01-11 21:28:02 -08001896 for i := 0; i < len(vfexpSC); i++ {
1897 if f := Exp(vfexpSC[i]); !alike(expSC[i], f) {
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05001898 t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08001899 }
1900 }
Russ Cox88daac72008-11-19 16:14:31 -08001901}
1902
Charles L. Doriana0690b62010-02-01 22:21:40 -08001903func TestExpm1(t *testing.T) {
1904 for i := 0; i < len(vf); i++ {
1905 a := vf[i] / 100
1906 if f := Expm1(a); !veryclose(expm1[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001907 t.Errorf("Expm1(%g) = %g, want %g", a, f, expm1[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001908 }
1909 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001910 for i := 0; i < len(vfexpm1SC); i++ {
1911 if f := Expm1(vfexpm1SC[i]); !alike(expm1SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001912 t.Errorf("Expm1(%g) = %g, want %g", vfexpm1SC[i], f, expm1SC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08001913 }
1914 }
1915}
1916
Charles L. Dorianaee14342010-02-10 00:06:41 -08001917func TestExp2(t *testing.T) {
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05001918 testExp2(t, Exp2, "Exp2")
1919 testExp2(t, Exp2Go, "Exp2Go")
1920}
1921
1922func testExp2(t *testing.T, Exp2 func(float64) float64, name string) {
Charles L. Dorianaee14342010-02-10 00:06:41 -08001923 for i := 0; i < len(vf); i++ {
1924 if f := Exp2(vf[i]); !close(exp2[i], f) {
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05001925 t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp2[i])
Charles L. Dorianaee14342010-02-10 00:06:41 -08001926 }
1927 }
1928 for i := 0; i < len(vfexpSC); i++ {
1929 if f := Exp2(vfexpSC[i]); !alike(expSC[i], f) {
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05001930 t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
1931 }
1932 }
1933 for n := -1074; n < 1024; n++ {
1934 f := Exp2(float64(n))
1935 vf := Ldexp(1, n)
1936 if f != vf {
1937 t.Errorf("%s(%d) = %g, want %g", name, n, f, vf)
Charles L. Dorianaee14342010-02-10 00:06:41 -08001938 }
1939 }
1940}
1941
Rob Pike1a13f9b2011-09-29 09:54:20 -07001942func TestAbs(t *testing.T) {
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001943 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07001944 if f := Abs(vf[i]); fabs[i] != f {
1945 t.Errorf("Abs(%g) = %g, want %g", vf[i], f, fabs[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001946 }
1947 }
1948 for i := 0; i < len(vffabsSC); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07001949 if f := Abs(vffabsSC[i]); !alike(fabsSC[i], f) {
1950 t.Errorf("Abs(%g) = %g, want %g", vffabsSC[i], f, fabsSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07001951 }
1952 }
1953}
1954
Rob Pike1a13f9b2011-09-29 09:54:20 -07001955func TestDim(t *testing.T) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08001956 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07001957 if f := Dim(vf[i], 0); fdim[i] != f {
1958 t.Errorf("Dim(%g, %g) = %g, want %g", vf[i], 0.0, f, fdim[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08001959 }
1960 }
Charles L. Doriane4de2e72011-12-07 14:52:17 -05001961 for i := 0; i < len(vffdimSC); i++ {
1962 if f := Dim(vffdimSC[i][0], vffdimSC[i][1]); !alike(fdimSC[i], f) {
1963 t.Errorf("Dim(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fdimSC[i])
1964 }
1965 }
Charles L. Dorianc4653312010-02-09 13:33:12 -08001966}
1967
Russ Cox839a6842009-01-20 14:40:40 -08001968func TestFloor(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08001969 for i := 0; i < len(vf); i++ {
Russ Cox04960402009-08-10 22:02:51 -07001970 if f := Floor(vf[i]); floor[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10001971 t.Errorf("Floor(%g) = %g, want %g", vf[i], f, floor[i])
Russ Cox88daac72008-11-19 16:14:31 -08001972 }
1973 }
Charles L. Dorian46206c52010-01-11 21:28:02 -08001974 for i := 0; i < len(vfceilSC); i++ {
1975 if f := Floor(vfceilSC[i]); !alike(ceilSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10001976 t.Errorf("Floor(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08001977 }
1978 }
Russ Cox88daac72008-11-19 16:14:31 -08001979}
1980
Rob Pike1a13f9b2011-09-29 09:54:20 -07001981func TestMax(t *testing.T) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08001982 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07001983 if f := Max(vf[i], ceil[i]); ceil[i] != f {
1984 t.Errorf("Max(%g, %g) = %g, want %g", vf[i], ceil[i], f, ceil[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08001985 }
1986 }
Charles L. Doriane4de2e72011-12-07 14:52:17 -05001987 for i := 0; i < len(vffdimSC); i++ {
1988 if f := Max(vffdimSC[i][0], vffdimSC[i][1]); !alike(fmaxSC[i], f) {
1989 t.Errorf("Max(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fmaxSC[i])
1990 }
1991 }
Charles L. Dorianc4653312010-02-09 13:33:12 -08001992}
1993
Rob Pike1a13f9b2011-09-29 09:54:20 -07001994func TestMin(t *testing.T) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08001995 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07001996 if f := Min(vf[i], floor[i]); floor[i] != f {
1997 t.Errorf("Min(%g, %g) = %g, want %g", vf[i], floor[i], f, floor[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08001998 }
1999 }
Charles L. Doriane4de2e72011-12-07 14:52:17 -05002000 for i := 0; i < len(vffdimSC); i++ {
2001 if f := Min(vffdimSC[i][0], vffdimSC[i][1]); !alike(fminSC[i], f) {
2002 t.Errorf("Min(%g, %g) = %g, want %g", vffdimSC[i][0], vffdimSC[i][1], f, fminSC[i])
2003 }
2004 }
Charles L. Dorianc4653312010-02-09 13:33:12 -08002005}
2006
Rob Pike1a13f9b2011-09-29 09:54:20 -07002007func TestMod(t *testing.T) {
Charles L. Dorian3c753412010-01-11 16:20:51 -08002008 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002009 if f := Mod(10, vf[i]); fmod[i] != f {
2010 t.Errorf("Mod(10, %g) = %g, want %g", vf[i], f, fmod[i])
Charles L. Dorian3c753412010-01-11 16:20:51 -08002011 }
2012 }
2013 for i := 0; i < len(vffmodSC); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002014 if f := Mod(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
2015 t.Errorf("Mod(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08002016 }
2017 }
2018}
2019
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002020func TestFrexp(t *testing.T) {
2021 for i := 0; i < len(vf); i++ {
2022 if f, j := Frexp(vf[i]); !veryclose(frexp[i].f, f) || frexp[i].i != j {
Rob Pike1959c3a2010-09-23 13:48:56 +10002023 t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vf[i], f, j, frexp[i].f, frexp[i].i)
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002024 }
2025 }
2026 for i := 0; i < len(vffrexpSC); i++ {
2027 if f, j := Frexp(vffrexpSC[i]); !alike(frexpSC[i].f, f) || frexpSC[i].i != j {
Rob Pike1959c3a2010-09-23 13:48:56 +10002028 t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpSC[i], f, j, frexpSC[i].f, frexpSC[i].i)
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002029 }
2030 }
Eoghan Sherry13c2e622011-01-19 14:23:59 -05002031 for i := 0; i < len(vffrexpBC); i++ {
2032 if f, j := Frexp(vffrexpBC[i]); !alike(frexpBC[i].f, f) || frexpBC[i].i != j {
2033 t.Errorf("Frexp(%g) = %g, %d, want %g, %d", vffrexpBC[i], f, j, frexpBC[i].f, frexpBC[i].i)
2034 }
2035 }
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002036}
2037
Charles L. Dorian26f0c832010-03-19 15:29:22 -07002038func TestGamma(t *testing.T) {
2039 for i := 0; i < len(vf); i++ {
2040 if f := Gamma(vf[i]); !close(gamma[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002041 t.Errorf("Gamma(%g) = %g, want %g", vf[i], f, gamma[i])
Charles L. Dorian26f0c832010-03-19 15:29:22 -07002042 }
2043 }
2044 for i := 0; i < len(vfgammaSC); i++ {
2045 if f := Gamma(vfgammaSC[i]); !alike(gammaSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002046 t.Errorf("Gamma(%g) = %g, want %g", vfgammaSC[i], f, gammaSC[i])
Charles L. Dorian26f0c832010-03-19 15:29:22 -07002047 }
2048 }
2049}
2050
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08002051func TestHypot(t *testing.T) {
2052 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002053 a := Abs(1e200 * tanh[i] * Sqrt(2))
Charles L. Doriand4ca0062010-01-26 12:53:02 -08002054 if f := Hypot(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002055 t.Errorf("Hypot(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08002056 }
2057 }
2058 for i := 0; i < len(vfhypotSC); i++ {
2059 if f := Hypot(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002060 t.Errorf("Hypot(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
Charles L. Dorian3c753412010-01-11 16:20:51 -08002061 }
2062 }
2063}
2064
Russ Cox25728032011-12-13 17:08:56 -05002065func TestHypotGo(t *testing.T) {
Russ Coxdd8dc6f2011-12-13 15:20:12 -05002066 for i := 0; i < len(vf); i++ {
2067 a := Abs(1e200 * tanh[i] * Sqrt(2))
Russ Cox25728032011-12-13 17:08:56 -05002068 if f := HypotGo(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
2069 t.Errorf("HypotGo(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
Russ Coxdd8dc6f2011-12-13 15:20:12 -05002070 }
2071 }
2072 for i := 0; i < len(vfhypotSC); i++ {
Russ Cox25728032011-12-13 17:08:56 -05002073 if f := HypotGo(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
2074 t.Errorf("HypotGo(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
Russ Coxdd8dc6f2011-12-13 15:20:12 -05002075 }
2076 }
2077}
2078
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002079func TestIlogb(t *testing.T) {
2080 for i := 0; i < len(vf); i++ {
Charles L. Dorianb233ac82010-09-28 10:15:21 -04002081 a := frexp[i].i - 1 // adjust because fr in the interval [½, 1)
2082 if e := Ilogb(vf[i]); a != e {
2083 t.Errorf("Ilogb(%g) = %d, want %d", vf[i], e, a)
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002084 }
2085 }
2086 for i := 0; i < len(vflogbSC); i++ {
2087 if e := Ilogb(vflogbSC[i]); ilogbSC[i] != e {
Rob Pike1959c3a2010-09-23 13:48:56 +10002088 t.Errorf("Ilogb(%g) = %d, want %d", vflogbSC[i], e, ilogbSC[i])
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002089 }
2090 }
Eoghan Sherry13c2e622011-01-19 14:23:59 -05002091 for i := 0; i < len(vffrexpBC); i++ {
2092 if e := Ilogb(vffrexpBC[i]); int(logbBC[i]) != e {
2093 t.Errorf("Ilogb(%g) = %d, want %d", vffrexpBC[i], e, int(logbBC[i]))
2094 }
2095 }
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002096}
2097
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002098func TestJ0(t *testing.T) {
2099 for i := 0; i < len(vf); i++ {
2100 if f := J0(vf[i]); !soclose(j0[i], f, 4e-14) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002101 t.Errorf("J0(%g) = %g, want %g", vf[i], f, j0[i])
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002102 }
2103 }
2104 for i := 0; i < len(vfj0SC); i++ {
2105 if f := J0(vfj0SC[i]); !alike(j0SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002106 t.Errorf("J0(%g) = %g, want %g", vfj0SC[i], f, j0SC[i])
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002107 }
2108 }
2109}
2110
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002111func TestJ1(t *testing.T) {
2112 for i := 0; i < len(vf); i++ {
2113 if f := J1(vf[i]); !close(j1[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002114 t.Errorf("J1(%g) = %g, want %g", vf[i], f, j1[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002115 }
2116 }
2117 for i := 0; i < len(vfj0SC); i++ {
2118 if f := J1(vfj0SC[i]); !alike(j1SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002119 t.Errorf("J1(%g) = %g, want %g", vfj0SC[i], f, j1SC[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002120 }
2121 }
2122}
2123
2124func TestJn(t *testing.T) {
2125 for i := 0; i < len(vf); i++ {
2126 if f := Jn(2, vf[i]); !close(j2[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002127 t.Errorf("Jn(2, %g) = %g, want %g", vf[i], f, j2[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002128 }
2129 if f := Jn(-3, vf[i]); !close(jM3[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002130 t.Errorf("Jn(-3, %g) = %g, want %g", vf[i], f, jM3[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002131 }
2132 }
2133 for i := 0; i < len(vfj0SC); i++ {
2134 if f := Jn(2, vfj0SC[i]); !alike(j2SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002135 t.Errorf("Jn(2, %g) = %g, want %g", vfj0SC[i], f, j2SC[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002136 }
2137 if f := Jn(-3, vfj0SC[i]); !alike(jM3SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002138 t.Errorf("Jn(-3, %g) = %g, want %g", vfj0SC[i], f, jM3SC[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002139 }
2140 }
2141}
2142
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002143func TestLdexp(t *testing.T) {
2144 for i := 0; i < len(vf); i++ {
2145 if f := Ldexp(frexp[i].f, frexp[i].i); !veryclose(vf[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002146 t.Errorf("Ldexp(%g, %d) = %g, want %g", frexp[i].f, frexp[i].i, f, vf[i])
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002147 }
2148 }
2149 for i := 0; i < len(vffrexpSC); i++ {
2150 if f := Ldexp(frexpSC[i].f, frexpSC[i].i); !alike(vffrexpSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002151 t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpSC[i].f, frexpSC[i].i, f, vffrexpSC[i])
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002152 }
2153 }
Eoghan Sherry13c2e622011-01-19 14:23:59 -05002154 for i := 0; i < len(vfldexpSC); i++ {
2155 if f := Ldexp(vfldexpSC[i].f, vfldexpSC[i].i); !alike(ldexpSC[i], f) {
2156 t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpSC[i].f, vfldexpSC[i].i, f, ldexpSC[i])
2157 }
2158 }
2159 for i := 0; i < len(vffrexpBC); i++ {
2160 if f := Ldexp(frexpBC[i].f, frexpBC[i].i); !alike(vffrexpBC[i], f) {
2161 t.Errorf("Ldexp(%g, %d) = %g, want %g", frexpBC[i].f, frexpBC[i].i, f, vffrexpBC[i])
2162 }
2163 }
2164 for i := 0; i < len(vfldexpBC); i++ {
2165 if f := Ldexp(vfldexpBC[i].f, vfldexpBC[i].i); !alike(ldexpBC[i], f) {
2166 t.Errorf("Ldexp(%g, %d) = %g, want %g", vfldexpBC[i].f, vfldexpBC[i].i, f, ldexpBC[i])
2167 }
2168 }
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002169}
2170
Charles L. Dorian78e918c2010-02-22 17:12:48 -08002171func TestLgamma(t *testing.T) {
2172 for i := 0; i < len(vf); i++ {
2173 if f, s := Lgamma(vf[i]); !close(lgamma[i].f, f) || lgamma[i].i != s {
Rob Pike1959c3a2010-09-23 13:48:56 +10002174 t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vf[i], f, s, lgamma[i].f, lgamma[i].i)
Charles L. Dorian78e918c2010-02-22 17:12:48 -08002175 }
2176 }
2177 for i := 0; i < len(vflgammaSC); i++ {
2178 if f, s := Lgamma(vflgammaSC[i]); !alike(lgammaSC[i].f, f) || lgammaSC[i].i != s {
Rob Pike1959c3a2010-09-23 13:48:56 +10002179 t.Errorf("Lgamma(%g) = %g, %d, want %g, %d", vflgammaSC[i], f, s, lgammaSC[i].f, lgammaSC[i].i)
Charles L. Dorian78e918c2010-02-22 17:12:48 -08002180 }
2181 }
2182}
2183
Russ Cox839a6842009-01-20 14:40:40 -08002184func TestLog(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002185 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002186 a := Abs(vf[i])
Russ Cox04960402009-08-10 22:02:51 -07002187 if f := Log(a); log[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002188 t.Errorf("Log(%g) = %g, want %g", a, f, log[i])
Russ Cox88daac72008-11-19 16:14:31 -08002189 }
2190 }
Russ Cox04960402009-08-10 22:02:51 -07002191 if f := Log(10); f != Ln10 {
Rob Pike1959c3a2010-09-23 13:48:56 +10002192 t.Errorf("Log(%g) = %g, want %g", 10.0, f, Ln10)
Charles L. Dorian46206c52010-01-11 21:28:02 -08002193 }
2194 for i := 0; i < len(vflogSC); i++ {
2195 if f := Log(vflogSC[i]); !alike(logSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002196 t.Errorf("Log(%g) = %g, want %g", vflogSC[i], f, logSC[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08002197 }
2198 }
2199}
2200
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002201func TestLogb(t *testing.T) {
2202 for i := 0; i < len(vf); i++ {
2203 if f := Logb(vf[i]); logb[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002204 t.Errorf("Logb(%g) = %g, want %g", vf[i], f, logb[i])
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002205 }
2206 }
2207 for i := 0; i < len(vflogbSC); i++ {
2208 if f := Logb(vflogbSC[i]); !alike(logbSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002209 t.Errorf("Logb(%g) = %g, want %g", vflogbSC[i], f, logbSC[i])
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002210 }
2211 }
Eoghan Sherry13c2e622011-01-19 14:23:59 -05002212 for i := 0; i < len(vffrexpBC); i++ {
2213 if e := Logb(vffrexpBC[i]); !alike(logbBC[i], e) {
2214 t.Errorf("Ilogb(%g) = %g, want %g", vffrexpBC[i], e, logbBC[i])
2215 }
2216 }
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002217}
2218
Charles L. Dorian46206c52010-01-11 21:28:02 -08002219func TestLog10(t *testing.T) {
2220 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002221 a := Abs(vf[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08002222 if f := Log10(a); !veryclose(log10[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002223 t.Errorf("Log10(%g) = %g, want %g", a, f, log10[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08002224 }
2225 }
2226 if f := Log10(E); f != Log10E {
Rob Pike1959c3a2010-09-23 13:48:56 +10002227 t.Errorf("Log10(%g) = %g, want %g", E, f, Log10E)
Charles L. Dorian46206c52010-01-11 21:28:02 -08002228 }
2229 for i := 0; i < len(vflogSC); i++ {
2230 if f := Log10(vflogSC[i]); !alike(logSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002231 t.Errorf("Log10(%g) = %g, want %g", vflogSC[i], f, logSC[i])
Charles L. Dorian46206c52010-01-11 21:28:02 -08002232 }
Russ Coxf379ea02008-11-20 10:54:02 -08002233 }
Russ Cox88daac72008-11-19 16:14:31 -08002234}
2235
Charles L. Doriana0690b62010-02-01 22:21:40 -08002236func TestLog1p(t *testing.T) {
2237 for i := 0; i < len(vf); i++ {
2238 a := vf[i] / 100
2239 if f := Log1p(a); !veryclose(log1p[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002240 t.Errorf("Log1p(%g) = %g, want %g", a, f, log1p[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08002241 }
2242 }
Russ Coxf2b5a072011-01-19 23:09:00 -05002243 a := 9.0
Charles L. Doriana0690b62010-02-01 22:21:40 -08002244 if f := Log1p(a); f != Ln10 {
Rob Pike1959c3a2010-09-23 13:48:56 +10002245 t.Errorf("Log1p(%g) = %g, want %g", a, f, Ln10)
Charles L. Doriana0690b62010-02-01 22:21:40 -08002246 }
2247 for i := 0; i < len(vflogSC); i++ {
2248 if f := Log1p(vflog1pSC[i]); !alike(log1pSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002249 t.Errorf("Log1p(%g) = %g, want %g", vflog1pSC[i], f, log1pSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08002250 }
2251 }
2252}
2253
Charles L. Dorianc4653312010-02-09 13:33:12 -08002254func TestLog2(t *testing.T) {
2255 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002256 a := Abs(vf[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002257 if f := Log2(a); !veryclose(log2[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002258 t.Errorf("Log2(%g) = %g, want %g", a, f, log2[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002259 }
2260 }
2261 if f := Log2(E); f != Log2E {
Rob Pike1959c3a2010-09-23 13:48:56 +10002262 t.Errorf("Log2(%g) = %g, want %g", E, f, Log2E)
Charles L. Dorianc4653312010-02-09 13:33:12 -08002263 }
2264 for i := 0; i < len(vflogSC); i++ {
2265 if f := Log2(vflogSC[i]); !alike(logSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002266 t.Errorf("Log2(%g) = %g, want %g", vflogSC[i], f, logSC[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002267 }
2268 }
2269}
2270
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002271func TestModf(t *testing.T) {
2272 for i := 0; i < len(vf); i++ {
2273 if f, g := Modf(vf[i]); !veryclose(modf[i][0], f) || !veryclose(modf[i][1], g) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002274 t.Errorf("Modf(%g) = %g, %g, want %g, %g", vf[i], f, g, modf[i][0], modf[i][1])
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002275 }
2276 }
2277 for i := 0; i < len(vfmodfSC); i++ {
2278 if f, g := Modf(vfmodfSC[i]); !alike(modfSC[i][0], f) || !alike(modfSC[i][1], g) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002279 t.Errorf("Modf(%g) = %g, %g, want %g, %g", vfmodfSC[i], f, g, modfSC[i][0], modfSC[i][1])
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002280 }
2281 }
2282}
2283
Charles L. Dorianc4653312010-02-09 13:33:12 -08002284func TestNextafter(t *testing.T) {
2285 for i := 0; i < len(vf); i++ {
2286 if f := Nextafter(vf[i], 10); nextafter[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002287 t.Errorf("Nextafter(%g, %g) = %g want %g", vf[i], 10.0, f, nextafter[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002288 }
2289 }
Charles L. Dorianf5c21112011-12-12 15:51:11 -05002290 for i := 0; i < len(vfnextafterSC); i++ {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002291 if f := Nextafter(vfnextafterSC[i][0], vfnextafterSC[i][1]); !alike(nextafterSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002292 t.Errorf("Nextafter(%g, %g) = %g want %g", vfnextafterSC[i][0], vfnextafterSC[i][1], f, nextafterSC[i])
Charles L. Dorianc4653312010-02-09 13:33:12 -08002293 }
2294 }
2295}
2296
Russ Cox839a6842009-01-20 14:40:40 -08002297func TestPow(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002298 for i := 0; i < len(vf); i++ {
Russ Cox04960402009-08-10 22:02:51 -07002299 if f := Pow(10, vf[i]); !close(pow[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002300 t.Errorf("Pow(10, %g) = %g, want %g", vf[i], f, pow[i])
Russ Cox88daac72008-11-19 16:14:31 -08002301 }
2302 }
Charles L. Dorianfd1db672010-01-08 14:12:10 -08002303 for i := 0; i < len(vfpowSC); i++ {
2304 if f := Pow(vfpowSC[i][0], vfpowSC[i][1]); !alike(powSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002305 t.Errorf("Pow(%g, %g) = %g, want %g", vfpowSC[i][0], vfpowSC[i][1], f, powSC[i])
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08002306 }
2307 }
Russ Cox88daac72008-11-19 16:14:31 -08002308}
2309
Volker Doblerf78e7d32011-08-24 13:59:52 -04002310func TestPow10(t *testing.T) {
2311 for i := 0; i < len(vfpow10SC); i++ {
2312 if f := Pow10(vfpow10SC[i]); !alike(pow10SC[i], f) {
2313 t.Errorf("Pow10(%d) = %g, want %g", vfpow10SC[i], f, pow10SC[i])
2314 }
2315 }
2316}
2317
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002318func TestRemainder(t *testing.T) {
2319 for i := 0; i < len(vf); i++ {
2320 if f := Remainder(10, vf[i]); remainder[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002321 t.Errorf("Remainder(10, %g) = %g, want %g", vf[i], f, remainder[i])
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002322 }
2323 }
2324 for i := 0; i < len(vffmodSC); i++ {
2325 if f := Remainder(vffmodSC[i][0], vffmodSC[i][1]); !alike(fmodSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002326 t.Errorf("Remainder(%g, %g) = %g, want %g", vffmodSC[i][0], vffmodSC[i][1], f, fmodSC[i])
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002327 }
2328 }
2329}
2330
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07002331func TestSignbit(t *testing.T) {
2332 for i := 0; i < len(vf); i++ {
2333 if f := Signbit(vf[i]); signbit[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002334 t.Errorf("Signbit(%g) = %t, want %t", vf[i], f, signbit[i])
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07002335 }
2336 }
2337 for i := 0; i < len(vfsignbitSC); i++ {
2338 if f := Signbit(vfsignbitSC[i]); signbitSC[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002339 t.Errorf("Signbit(%g) = %t, want %t", vfsignbitSC[i], f, signbitSC[i])
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07002340 }
2341 }
2342}
Russ Cox839a6842009-01-20 14:40:40 -08002343func TestSin(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002344 for i := 0; i < len(vf); i++ {
Charles L. Dorian739c4422011-10-31 14:26:05 -04002345 if f := Sin(vf[i]); !veryclose(sin[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002346 t.Errorf("Sin(%g) = %g, want %g", vf[i], f, sin[i])
Russ Cox88daac72008-11-19 16:14:31 -08002347 }
2348 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002349 for i := 0; i < len(vfsinSC); i++ {
2350 if f := Sin(vfsinSC[i]); !alike(sinSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002351 t.Errorf("Sin(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002352 }
2353 }
Russ Cox88daac72008-11-19 16:14:31 -08002354}
2355
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002356func TestSincos(t *testing.T) {
2357 for i := 0; i < len(vf); i++ {
Charles L. Dorian739c4422011-10-31 14:26:05 -04002358 if s, c := Sincos(vf[i]); !veryclose(sin[i], s) || !veryclose(cos[i], c) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002359 t.Errorf("Sincos(%g) = %g, %g want %g, %g", vf[i], s, c, sin[i], cos[i])
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002360 }
2361 }
2362}
2363
Russ Cox839a6842009-01-20 14:40:40 -08002364func TestSinh(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002365 for i := 0; i < len(vf); i++ {
Devon H. O'Dell4ffbff12010-01-29 12:54:05 -08002366 if f := Sinh(vf[i]); !close(sinh[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002367 t.Errorf("Sinh(%g) = %g, want %g", vf[i], f, sinh[i])
Russ Cox88daac72008-11-19 16:14:31 -08002368 }
2369 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002370 for i := 0; i < len(vfsinhSC); i++ {
2371 if f := Sinh(vfsinhSC[i]); !alike(sinhSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002372 t.Errorf("Sinh(%g) = %g, want %g", vfsinhSC[i], f, sinhSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002373 }
2374 }
Russ Cox88daac72008-11-19 16:14:31 -08002375}
2376
Russ Cox839a6842009-01-20 14:40:40 -08002377func TestSqrt(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002378 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002379 a := Abs(vf[i])
Russ Cox093146b2010-01-11 11:25:37 -08002380 if f := SqrtGo(a); sqrt[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002381 t.Errorf("SqrtGo(%g) = %g, want %g", a, f, sqrt[i])
Russ Cox093146b2010-01-11 11:25:37 -08002382 }
Rob Pike1a13f9b2011-09-29 09:54:20 -07002383 a = Abs(vf[i])
Russ Cox093146b2010-01-11 11:25:37 -08002384 if f := Sqrt(a); sqrt[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002385 t.Errorf("Sqrt(%g) = %g, want %g", a, f, sqrt[i])
Russ Cox88daac72008-11-19 16:14:31 -08002386 }
2387 }
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08002388 for i := 0; i < len(vfsqrtSC); i++ {
Charles L. Dorian879241d2010-05-18 22:16:01 -07002389 if f := SqrtGo(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002390 t.Errorf("SqrtGo(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
Charles L. Dorian879241d2010-05-18 22:16:01 -07002391 }
2392 if f := Sqrt(vfsqrtSC[i]); !alike(sqrtSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002393 t.Errorf("Sqrt(%g) = %g, want %g", vfsqrtSC[i], f, sqrtSC[i])
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08002394 }
2395 }
Russ Cox88daac72008-11-19 16:14:31 -08002396}
2397
Russ Cox839a6842009-01-20 14:40:40 -08002398func TestTan(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002399 for i := 0; i < len(vf); i++ {
Charles L. Doriancefee3c2011-11-02 14:01:21 -04002400 if f := Tan(vf[i]); !veryclose(tan[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002401 t.Errorf("Tan(%g) = %g, want %g", vf[i], f, tan[i])
Russ Cox88daac72008-11-19 16:14:31 -08002402 }
2403 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002404 // same special cases as Sin
2405 for i := 0; i < len(vfsinSC); i++ {
2406 if f := Tan(vfsinSC[i]); !alike(sinSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002407 t.Errorf("Tan(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002408 }
2409 }
Russ Cox88daac72008-11-19 16:14:31 -08002410}
2411
Russ Cox839a6842009-01-20 14:40:40 -08002412func TestTanh(t *testing.T) {
Russ Cox88daac72008-11-19 16:14:31 -08002413 for i := 0; i < len(vf); i++ {
Russ Cox04960402009-08-10 22:02:51 -07002414 if f := Tanh(vf[i]); !veryclose(tanh[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002415 t.Errorf("Tanh(%g) = %g, want %g", vf[i], f, tanh[i])
Russ Cox88daac72008-11-19 16:14:31 -08002416 }
2417 }
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002418 for i := 0; i < len(vftanhSC); i++ {
2419 if f := Tanh(vftanhSC[i]); !alike(tanhSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002420 t.Errorf("Tanh(%g) = %g, want %g", vftanhSC[i], f, tanhSC[i])
Charles L. Dorian22f84c52010-04-26 22:44:39 -07002421 }
2422 }
Russ Cox88daac72008-11-19 16:14:31 -08002423}
2424
Charles L. Doriana0690b62010-02-01 22:21:40 -08002425func TestTrunc(t *testing.T) {
2426 for i := 0; i < len(vf); i++ {
2427 if f := Trunc(vf[i]); trunc[i] != f {
Rob Pike1959c3a2010-09-23 13:48:56 +10002428 t.Errorf("Trunc(%g) = %g, want %g", vf[i], f, trunc[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08002429 }
2430 }
2431 for i := 0; i < len(vfceilSC); i++ {
2432 if f := Trunc(vfceilSC[i]); !alike(ceilSC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002433 t.Errorf("Trunc(%g) = %g, want %g", vfceilSC[i], f, ceilSC[i])
Charles L. Doriana0690b62010-02-01 22:21:40 -08002434 }
2435 }
2436}
2437
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002438func TestY0(t *testing.T) {
2439 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002440 a := Abs(vf[i])
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002441 if f := Y0(a); !close(y0[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002442 t.Errorf("Y0(%g) = %g, want %g", a, f, y0[i])
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002443 }
2444 }
2445 for i := 0; i < len(vfy0SC); i++ {
2446 if f := Y0(vfy0SC[i]); !alike(y0SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002447 t.Errorf("Y0(%g) = %g, want %g", vfy0SC[i], f, y0SC[i])
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002448 }
2449 }
2450}
2451
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002452func TestY1(t *testing.T) {
2453 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002454 a := Abs(vf[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002455 if f := Y1(a); !soclose(y1[i], f, 2e-14) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002456 t.Errorf("Y1(%g) = %g, want %g", a, f, y1[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002457 }
2458 }
2459 for i := 0; i < len(vfy0SC); i++ {
2460 if f := Y1(vfy0SC[i]); !alike(y1SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002461 t.Errorf("Y1(%g) = %g, want %g", vfy0SC[i], f, y1SC[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002462 }
2463 }
2464}
2465
2466func TestYn(t *testing.T) {
2467 for i := 0; i < len(vf); i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002468 a := Abs(vf[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002469 if f := Yn(2, a); !close(y2[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002470 t.Errorf("Yn(2, %g) = %g, want %g", a, f, y2[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002471 }
2472 if f := Yn(-3, a); !close(yM3[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002473 t.Errorf("Yn(-3, %g) = %g, want %g", a, f, yM3[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002474 }
2475 }
2476 for i := 0; i < len(vfy0SC); i++ {
2477 if f := Yn(2, vfy0SC[i]); !alike(y2SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002478 t.Errorf("Yn(2, %g) = %g, want %g", vfy0SC[i], f, y2SC[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002479 }
2480 if f := Yn(-3, vfy0SC[i]); !alike(yM3SC[i], f) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002481 t.Errorf("Yn(-3, %g) = %g, want %g", vfy0SC[i], f, yM3SC[i])
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002482 }
2483 }
2484}
2485
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002486// Check that math functions of high angle values
Charles L. Dorian377ac332011-11-04 15:35:59 -04002487// return accurate results. [Since (vf[i] + large) - large != vf[i],
2488// testing for Trig(vf[i] + large) == Trig(vf[i]), where large is
2489// a multiple of 2*Pi, is misleading.]
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002490func TestLargeCos(t *testing.T) {
2491 large := float64(100000 * Pi)
2492 for i := 0; i < len(vf); i++ {
Charles L. Dorian377ac332011-11-04 15:35:59 -04002493 f1 := cosLarge[i]
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002494 f2 := Cos(vf[i] + large)
Charles L. Dorian377ac332011-11-04 15:35:59 -04002495 if !close(f1, f2) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002496 t.Errorf("Cos(%g) = %g, want %g", vf[i]+large, f2, f1)
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002497 }
2498 }
2499}
2500
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002501func TestLargeSin(t *testing.T) {
Robert Griesemera3d10452009-12-15 15:35:38 -08002502 large := float64(100000 * Pi)
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002503 for i := 0; i < len(vf); i++ {
Charles L. Dorian377ac332011-11-04 15:35:59 -04002504 f1 := sinLarge[i]
Robert Griesemera3d10452009-12-15 15:35:38 -08002505 f2 := Sin(vf[i] + large)
Charles L. Dorian377ac332011-11-04 15:35:59 -04002506 if !close(f1, f2) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002507 t.Errorf("Sin(%g) = %g, want %g", vf[i]+large, f2, f1)
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002508 }
2509 }
2510}
2511
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002512func TestLargeSincos(t *testing.T) {
Robert Griesemera3d10452009-12-15 15:35:38 -08002513 large := float64(100000 * Pi)
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002514 for i := 0; i < len(vf); i++ {
Charles L. Dorian377ac332011-11-04 15:35:59 -04002515 f1, g1 := sinLarge[i], cosLarge[i]
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002516 f2, g2 := Sincos(vf[i] + large)
Charles L. Dorian377ac332011-11-04 15:35:59 -04002517 if !close(f1, f2) || !close(g1, g2) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002518 t.Errorf("Sincos(%g) = %g, %g, want %g, %g", vf[i]+large, f2, g2, f1, g1)
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002519 }
2520 }
2521}
2522
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002523func TestLargeTan(t *testing.T) {
Robert Griesemera3d10452009-12-15 15:35:38 -08002524 large := float64(100000 * Pi)
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002525 for i := 0; i < len(vf); i++ {
Charles L. Dorian377ac332011-11-04 15:35:59 -04002526 f1 := tanLarge[i]
Robert Griesemera3d10452009-12-15 15:35:38 -08002527 f2 := Tan(vf[i] + large)
Charles L. Dorian377ac332011-11-04 15:35:59 -04002528 if !close(f1, f2) {
Rob Pike1959c3a2010-09-23 13:48:56 +10002529 t.Errorf("Tan(%g) = %g, want %g", vf[i]+large, f2, f1)
Ken Thompsonbd80b5a2009-11-24 15:42:46 -08002530 }
2531 }
2532}
2533
Russ Coxa3382312009-11-15 12:57:09 -08002534// Check that math constants are accepted by compiler
2535// and have right value (assumes strconv.Atof works).
2536// http://code.google.com/p/go/issues/detail?id=201
2537
2538type floatTest struct {
Robert Griesemera3d10452009-12-15 15:35:38 -08002539 val interface{}
2540 name string
2541 str string
Russ Coxa3382312009-11-15 12:57:09 -08002542}
2543
2544var floatTests = []floatTest{
Robert Griesemer34788912010-10-22 10:06:33 -07002545 {float64(MaxFloat64), "MaxFloat64", "1.7976931348623157e+308"},
Russ Cox9282a762010-12-10 11:39:09 -08002546 {float64(SmallestNonzeroFloat64), "SmallestNonzeroFloat64", "5e-324"},
Robert Griesemer34788912010-10-22 10:06:33 -07002547 {float32(MaxFloat32), "MaxFloat32", "3.4028235e+38"},
Russ Cox9282a762010-12-10 11:39:09 -08002548 {float32(SmallestNonzeroFloat32), "SmallestNonzeroFloat32", "1e-45"},
Russ Coxa3382312009-11-15 12:57:09 -08002549}
2550
2551func TestFloatMinMax(t *testing.T) {
2552 for _, tt := range floatTests {
Robert Griesemera3d10452009-12-15 15:35:38 -08002553 s := fmt.Sprint(tt.val)
Russ Coxa3382312009-11-15 12:57:09 -08002554 if s != tt.str {
2555 t.Errorf("Sprint(%v) = %s, want %s", tt.name, s, tt.str)
2556 }
2557 }
2558}
Charles L. Doriand5bcf7b2009-12-15 20:43:12 -08002559
2560// Benchmarks
2561
Charles L. Doriana0690b62010-02-01 22:21:40 -08002562func BenchmarkAcos(b *testing.B) {
Charles L. Dorianfd1db672010-01-08 14:12:10 -08002563 for i := 0; i < b.N; i++ {
Charles L. Doriana0690b62010-02-01 22:21:40 -08002564 Acos(.5)
2565 }
2566}
2567
2568func BenchmarkAcosh(b *testing.B) {
2569 for i := 0; i < b.N; i++ {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002570 Acosh(1.5)
Charles L. Dorianfd1db672010-01-08 14:12:10 -08002571 }
2572}
2573
2574func BenchmarkAsin(b *testing.B) {
2575 for i := 0; i < b.N; i++ {
2576 Asin(.5)
2577 }
2578}
2579
Charles L. Doriana0690b62010-02-01 22:21:40 -08002580func BenchmarkAsinh(b *testing.B) {
Charles L. Dorianfd1db672010-01-08 14:12:10 -08002581 for i := 0; i < b.N; i++ {
Charles L. Doriana0690b62010-02-01 22:21:40 -08002582 Asinh(.5)
2583 }
2584}
2585
2586func BenchmarkAtan(b *testing.B) {
2587 for i := 0; i < b.N; i++ {
2588 Atan(.5)
2589 }
2590}
2591
2592func BenchmarkAtanh(b *testing.B) {
2593 for i := 0; i < b.N; i++ {
2594 Atanh(.5)
2595 }
2596}
2597
Charles L. Dorian072b5602010-02-05 14:55:19 -08002598func BenchmarkAtan2(b *testing.B) {
2599 for i := 0; i < b.N; i++ {
2600 Atan2(.5, 1)
2601 }
2602}
2603
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002604func BenchmarkCbrt(b *testing.B) {
2605 for i := 0; i < b.N; i++ {
2606 Cbrt(10)
2607 }
2608}
2609
Charles L. Doriana0690b62010-02-01 22:21:40 -08002610func BenchmarkCeil(b *testing.B) {
2611 for i := 0; i < b.N; i++ {
2612 Ceil(.5)
2613 }
2614}
2615
2616func BenchmarkCopysign(b *testing.B) {
2617 for i := 0; i < b.N; i++ {
2618 Copysign(.5, -1)
2619 }
2620}
2621
2622func BenchmarkCos(b *testing.B) {
2623 for i := 0; i < b.N; i++ {
2624 Cos(.5)
2625 }
2626}
2627
2628func BenchmarkCosh(b *testing.B) {
2629 for i := 0; i < b.N; i++ {
2630 Cosh(2.5)
2631 }
2632}
2633
2634func BenchmarkErf(b *testing.B) {
2635 for i := 0; i < b.N; i++ {
2636 Erf(.5)
2637 }
2638}
2639
2640func BenchmarkErfc(b *testing.B) {
2641 for i := 0; i < b.N; i++ {
2642 Erfc(.5)
2643 }
2644}
2645
2646func BenchmarkExp(b *testing.B) {
2647 for i := 0; i < b.N; i++ {
2648 Exp(.5)
2649 }
2650}
2651
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05002652func BenchmarkExpGo(b *testing.B) {
2653 for i := 0; i < b.N; i++ {
2654 ExpGo(.5)
2655 }
2656}
2657
Charles L. Doriana0690b62010-02-01 22:21:40 -08002658func BenchmarkExpm1(b *testing.B) {
2659 for i := 0; i < b.N; i++ {
2660 Expm1(.5)
2661 }
2662}
2663
Charles L. Dorianaee14342010-02-10 00:06:41 -08002664func BenchmarkExp2(b *testing.B) {
2665 for i := 0; i < b.N; i++ {
Charles L. Dorian3fb8d2a2010-06-03 15:04:22 -07002666 Exp2(.5)
Charles L. Dorianaee14342010-02-10 00:06:41 -08002667 }
2668}
2669
Eoghan Sherryff4e08f2010-12-06 16:24:51 -05002670func BenchmarkExp2Go(b *testing.B) {
2671 for i := 0; i < b.N; i++ {
2672 Exp2Go(.5)
2673 }
2674}
2675
Rob Pike1a13f9b2011-09-29 09:54:20 -07002676func BenchmarkAbs(b *testing.B) {
Charles L. Doriana0690b62010-02-01 22:21:40 -08002677 for i := 0; i < b.N; i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002678 Abs(.5)
Charles L. Doriana0690b62010-02-01 22:21:40 -08002679 }
2680}
2681
Rob Pike1a13f9b2011-09-29 09:54:20 -07002682func BenchmarkDim(b *testing.B) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002683 for i := 0; i < b.N; i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002684 Dim(10, 3)
Charles L. Dorianc4653312010-02-09 13:33:12 -08002685 }
2686}
2687
Charles L. Doriana0117ba2010-06-30 14:44:27 -07002688func BenchmarkFloor(b *testing.B) {
2689 for i := 0; i < b.N; i++ {
2690 Floor(.5)
2691 }
2692}
2693
Rob Pike1a13f9b2011-09-29 09:54:20 -07002694func BenchmarkMax(b *testing.B) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002695 for i := 0; i < b.N; i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002696 Max(10, 3)
Charles L. Dorianc4653312010-02-09 13:33:12 -08002697 }
2698}
2699
Rob Pike1a13f9b2011-09-29 09:54:20 -07002700func BenchmarkMin(b *testing.B) {
Charles L. Dorianc4653312010-02-09 13:33:12 -08002701 for i := 0; i < b.N; i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002702 Min(10, 3)
Charles L. Dorianc4653312010-02-09 13:33:12 -08002703 }
2704}
2705
Rob Pike1a13f9b2011-09-29 09:54:20 -07002706func BenchmarkMod(b *testing.B) {
Charles L. Doriana0690b62010-02-01 22:21:40 -08002707 for i := 0; i < b.N; i++ {
Rob Pike1a13f9b2011-09-29 09:54:20 -07002708 Mod(10, 3)
Charles L. Doriana0690b62010-02-01 22:21:40 -08002709 }
2710}
2711
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002712func BenchmarkFrexp(b *testing.B) {
2713 for i := 0; i < b.N; i++ {
2714 Frexp(8)
2715 }
2716}
2717
Charles L. Dorian26f0c832010-03-19 15:29:22 -07002718func BenchmarkGamma(b *testing.B) {
2719 for i := 0; i < b.N; i++ {
2720 Gamma(2.5)
2721 }
2722}
2723
Charles L. Doriana0690b62010-02-01 22:21:40 -08002724func BenchmarkHypot(b *testing.B) {
2725 for i := 0; i < b.N; i++ {
2726 Hypot(3, 4)
2727 }
2728}
2729
Russ Cox25728032011-12-13 17:08:56 -05002730func BenchmarkHypotGo(b *testing.B) {
Charles L. Dorian067fe282010-03-05 16:45:39 -08002731 for i := 0; i < b.N; i++ {
Russ Cox25728032011-12-13 17:08:56 -05002732 HypotGo(3, 4)
Charles L. Dorian067fe282010-03-05 16:45:39 -08002733 }
2734}
2735
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002736func BenchmarkIlogb(b *testing.B) {
2737 for i := 0; i < b.N; i++ {
2738 Ilogb(.5)
2739 }
2740}
2741
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002742func BenchmarkJ0(b *testing.B) {
2743 for i := 0; i < b.N; i++ {
2744 J0(2.5)
2745 }
2746}
2747
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002748func BenchmarkJ1(b *testing.B) {
2749 for i := 0; i < b.N; i++ {
2750 J1(2.5)
2751 }
2752}
2753
2754func BenchmarkJn(b *testing.B) {
2755 for i := 0; i < b.N; i++ {
2756 Jn(2, 2.5)
2757 }
2758}
2759
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002760func BenchmarkLdexp(b *testing.B) {
2761 for i := 0; i < b.N; i++ {
2762 Ldexp(.5, 2)
2763 }
2764}
2765
Charles L. Dorian78e918c2010-02-22 17:12:48 -08002766func BenchmarkLgamma(b *testing.B) {
2767 for i := 0; i < b.N; i++ {
2768 Lgamma(2.5)
2769 }
2770}
2771
Charles L. Doriana0690b62010-02-01 22:21:40 -08002772func BenchmarkLog(b *testing.B) {
2773 for i := 0; i < b.N; i++ {
2774 Log(.5)
2775 }
2776}
2777
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002778func BenchmarkLogb(b *testing.B) {
2779 for i := 0; i < b.N; i++ {
2780 Logb(.5)
2781 }
2782}
2783
Charles L. Doriana0690b62010-02-01 22:21:40 -08002784func BenchmarkLog1p(b *testing.B) {
2785 for i := 0; i < b.N; i++ {
2786 Log1p(.5)
Charles L. Dorianfd1db672010-01-08 14:12:10 -08002787 }
2788}
Charles L. Dorian5336cd82010-01-10 15:41:07 -08002789
Charles L. Doriana0117ba2010-06-30 14:44:27 -07002790func BenchmarkLog10(b *testing.B) {
2791 for i := 0; i < b.N; i++ {
2792 Log10(.5)
2793 }
2794}
2795
Charles L. Dorianc4653312010-02-09 13:33:12 -08002796func BenchmarkLog2(b *testing.B) {
2797 for i := 0; i < b.N; i++ {
2798 Log2(.5)
2799 }
2800}
2801
Charles L. Dorian04217ee2010-02-05 00:41:30 -08002802func BenchmarkModf(b *testing.B) {
2803 for i := 0; i < b.N; i++ {
2804 Modf(1.5)
2805 }
2806}
2807
Charles L. Dorianc4653312010-02-09 13:33:12 -08002808func BenchmarkNextafter(b *testing.B) {
2809 for i := 0; i < b.N; i++ {
2810 Nextafter(.5, 1)
2811 }
2812}
2813
Charles L. Dorian9a6b8e22010-01-15 13:21:47 -08002814func BenchmarkPowInt(b *testing.B) {
2815 for i := 0; i < b.N; i++ {
2816 Pow(2, 2)
2817 }
2818}
2819
2820func BenchmarkPowFrac(b *testing.B) {
2821 for i := 0; i < b.N; i++ {
2822 Pow(2.5, 1.5)
2823 }
2824}
2825
Volker Doblerf78e7d32011-08-24 13:59:52 -04002826func BenchmarkPow10Pos(b *testing.B) {
2827 for i := 0; i < b.N; i++ {
2828 Pow10(300)
2829 }
2830}
2831
2832func BenchmarkPow10Neg(b *testing.B) {
2833 for i := 0; i < b.N; i++ {
2834 Pow10(-300)
2835 }
2836}
2837
Charles L. Dorian6b80a5f2010-03-03 18:17:13 -08002838func BenchmarkRemainder(b *testing.B) {
2839 for i := 0; i < b.N; i++ {
2840 Remainder(10, 3)
2841 }
2842}
2843
Charles L. Dorian9aa8f952010-04-08 13:24:04 -07002844func BenchmarkSignbit(b *testing.B) {
2845 for i := 0; i < b.N; i++ {
2846 Signbit(2.5)
2847 }
2848}
2849
Charles L. Doriana0690b62010-02-01 22:21:40 -08002850func BenchmarkSin(b *testing.B) {
2851 for i := 0; i < b.N; i++ {
2852 Sin(.5)
2853 }
2854}
2855
Charles L. Dorianc3fa32c2010-02-18 23:33:15 -08002856func BenchmarkSincos(b *testing.B) {
2857 for i := 0; i < b.N; i++ {
2858 Sincos(.5)
2859 }
2860}
2861
Charles L. Doriana0690b62010-02-01 22:21:40 -08002862func BenchmarkSinh(b *testing.B) {
2863 for i := 0; i < b.N; i++ {
2864 Sinh(2.5)
2865 }
2866}
2867
Charles L. Dorian5336cd82010-01-10 15:41:07 -08002868func BenchmarkSqrt(b *testing.B) {
2869 for i := 0; i < b.N; i++ {
2870 Sqrt(10)
2871 }
2872}
Charles L. Doriana0690b62010-02-01 22:21:40 -08002873
2874func BenchmarkSqrtGo(b *testing.B) {
2875 for i := 0; i < b.N; i++ {
2876 SqrtGo(10)
2877 }
2878}
2879
2880func BenchmarkTan(b *testing.B) {
2881 for i := 0; i < b.N; i++ {
2882 Tan(.5)
2883 }
2884}
2885
2886func BenchmarkTanh(b *testing.B) {
2887 for i := 0; i < b.N; i++ {
2888 Tanh(2.5)
2889 }
2890}
2891func BenchmarkTrunc(b *testing.B) {
2892 for i := 0; i < b.N; i++ {
2893 Trunc(.5)
2894 }
2895}
Charles L. Dorian6b6c3992010-03-24 09:25:49 -07002896
2897func BenchmarkY0(b *testing.B) {
2898 for i := 0; i < b.N; i++ {
2899 Y0(2.5)
2900 }
2901}
Charles L. Dorian1ec91c82010-03-26 14:09:39 -07002902
2903func BenchmarkY1(b *testing.B) {
2904 for i := 0; i < b.N; i++ {
2905 Y1(2.5)
2906 }
2907}
2908
2909func BenchmarkYn(b *testing.B) {
2910 for i := 0; i < b.N; i++ {
2911 Yn(2, 2.5)
2912 }
2913}