Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 1 | // Copyright 2009 The Go Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
Russ Cox | 3b864e4 | 2009-08-12 13:18:37 -0700 | [diff] [blame] | 5 | package math_test |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 6 | |
| 7 | import ( |
Russ Cox | a338231 | 2009-11-15 12:57:09 -0800 | [diff] [blame] | 8 | "fmt"; |
Robert Griesemer | 3630bfb | 2009-11-05 09:08:08 -0800 | [diff] [blame] | 9 | . "math"; |
| 10 | "testing"; |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 11 | ) |
| 12 | |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 13 | var vf = []float64{ |
| 14 | 4.9790119248836735e+00, |
| 15 | 7.7388724745781045e+00, |
| 16 | -2.7688005719200159e-01, |
| 17 | -5.0106036182710749e+00, |
| 18 | 9.6362937071984173e+00, |
| 19 | 2.9263772392439646e+00, |
| 20 | 5.2290834314593066e+00, |
| 21 | 2.7279399104360102e+00, |
| 22 | 1.8253080916808550e+00, |
| 23 | -8.6859247685756013e+00, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 24 | } |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 25 | var asin = []float64{ |
| 26 | 5.2117697218417440e-01, |
| 27 | 8.8495619865825236e-01, |
| 28 | -2.7691544662819413e-02, |
| 29 | -5.2482360935268932e-01, |
| 30 | 1.3002662421166553e+00, |
| 31 | 2.9698415875871901e-01, |
| 32 | 5.5025938468083364e-01, |
| 33 | 2.7629597861677200e-01, |
| 34 | 1.8355989225745148e-01, |
| 35 | -1.0523547536021498e+00, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 36 | } |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 37 | var atan = []float64{ |
| 38 | 1.3725902621296217e+00, |
| 39 | 1.4422906096452980e+00, |
| 40 | -2.7011324359471755e-01, |
| 41 | -1.3738077684543379e+00, |
| 42 | 1.4673921193587666e+00, |
| 43 | 1.2415173565870167e+00, |
| 44 | 1.3818396865615167e+00, |
| 45 | 1.2194305844639670e+00, |
| 46 | 1.0696031952318783e+00, |
| 47 | -1.4561721938838085e+00, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 48 | } |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 49 | var exp = []float64{ |
| 50 | 1.4533071302642137e+02, |
| 51 | 2.2958822575694450e+03, |
| 52 | 7.5814542574851666e-01, |
| 53 | 6.6668778421791010e-03, |
| 54 | 1.5310493273896035e+04, |
| 55 | 1.8659907517999329e+01, |
| 56 | 1.8662167355098713e+02, |
| 57 | 1.5301332413189379e+01, |
| 58 | 6.2047063430646876e+00, |
| 59 | 1.6894712385826522e-04, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 60 | } |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 61 | var floor = []float64{ |
| 62 | 4.0000000000000000e+00, |
| 63 | 7.0000000000000000e+00, |
| 64 | -1.0000000000000000e+00, |
| 65 | -6.0000000000000000e+00, |
| 66 | 9.0000000000000000e+00, |
| 67 | 2.0000000000000000e+00, |
| 68 | 5.0000000000000000e+00, |
| 69 | 2.0000000000000000e+00, |
| 70 | 1.0000000000000000e+00, |
| 71 | -9.0000000000000000e+00, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 72 | } |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 73 | var log = []float64{ |
| 74 | 1.6052314626930630e+00, |
| 75 | 2.0462560018708768e+00, |
| 76 | -1.2841708730962657e+00, |
| 77 | 1.6115563905281544e+00, |
| 78 | 2.2655365644872018e+00, |
| 79 | 1.0737652208918380e+00, |
| 80 | 1.6542360106073545e+00, |
| 81 | 1.0035467127723465e+00, |
| 82 | 6.0174879014578053e-01, |
| 83 | 2.1617038728473527e+00, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 84 | } |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 85 | var pow = []float64{ |
| 86 | 9.5282232631648415e+04, |
| 87 | 5.4811599352999900e+07, |
| 88 | 5.2859121715894400e-01, |
| 89 | 9.7587991957286472e-06, |
| 90 | 4.3280643293460450e+09, |
| 91 | 8.4406761805034551e+02, |
| 92 | 1.6946633276191194e+05, |
| 93 | 5.3449040147551940e+02, |
| 94 | 6.6881821384514159e+01, |
| 95 | 2.0609869004248744e-09, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 96 | } |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 97 | var sin = []float64{ |
| 98 | -9.6466616586009283e-01, |
| 99 | 9.9338225271646543e-01, |
| 100 | -2.7335587039794395e-01, |
| 101 | 9.5586257685042800e-01, |
| 102 | -2.0994210667799692e-01, |
| 103 | 2.1355787807998605e-01, |
| 104 | -8.6945689711673619e-01, |
| 105 | 4.0195666811555783e-01, |
| 106 | 9.6778633541688000e-01, |
| 107 | -6.7344058690503452e-01, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 108 | } |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 109 | var sinh = []float64{ |
| 110 | 7.2661916084208533e+01, |
| 111 | 1.1479409110035194e+03, |
| 112 | -2.8043136512812520e-01, |
| 113 | -7.4994290911815868e+01, |
| 114 | 7.6552466042906761e+03, |
| 115 | 9.3031583421672010e+00, |
| 116 | 9.3308157558281088e+01, |
| 117 | 7.6179893137269143e+00, |
| 118 | 3.0217691805496156e+00, |
| 119 | -2.9595057572444951e+03, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 120 | } |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 121 | var sqrt = []float64{ |
| 122 | 2.2313699659365484e+00, |
| 123 | 2.7818829009464263e+00, |
| 124 | 5.2619393496314792e-01, |
| 125 | 2.2384377628763938e+00, |
| 126 | 3.1042380236055380e+00, |
| 127 | 1.7106657298385224e+00, |
| 128 | 2.2867189227054791e+00, |
| 129 | 1.6516476350711160e+00, |
| 130 | 1.3510396336454586e+00, |
| 131 | 2.9471892997524950e+00, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 132 | } |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 133 | var tan = []float64{ |
| 134 | -3.6613165650402277e+00, |
| 135 | 8.6490023264859754e+00, |
| 136 | -2.8417941955033615e-01, |
| 137 | 3.2532901859747287e+00, |
| 138 | 2.1472756403802937e-01, |
| 139 | -2.1860091071106700e-01, |
| 140 | -1.7600028178723679e+00, |
| 141 | -4.3898089147528178e-01, |
| 142 | -3.8438855602011305e+00, |
| 143 | 9.1098879337768517e-01, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 144 | } |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 145 | var tanh = []float64{ |
| 146 | 9.9990531206936328e-01, |
| 147 | 9.9999962057085307e-01, |
| 148 | -2.7001505097318680e-01, |
| 149 | -9.9991110943061700e-01, |
| 150 | 9.9999999146798441e-01, |
| 151 | 9.9427249436125233e-01, |
| 152 | 9.9994257600983156e-01, |
| 153 | 9.9149409509772863e-01, |
| 154 | 9.4936501296239700e-01, |
| 155 | -9.9999994291374019e-01, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 156 | } |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 157 | |
Russ Cox | 2c5ec1e | 2009-10-06 19:40:35 -0700 | [diff] [blame] | 158 | func tolerance(a, b, e float64) bool { |
Robert Griesemer | 3bb0032 | 2009-11-09 21:23:52 -0800 | [diff] [blame] | 159 | d := a - b; |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 160 | if d < 0 { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 161 | d = -d |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 162 | } |
| 163 | |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 164 | if a != 0 { |
Robert Griesemer | 3bb0032 | 2009-11-09 21:23:52 -0800 | [diff] [blame] | 165 | e = e * a; |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 166 | if e < 0 { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 167 | e = -e |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 168 | } |
| 169 | } |
| 170 | return d < e; |
| 171 | } |
Ken Thompson | bd80b5a | 2009-11-24 15:42:46 -0800 | [diff] [blame^] | 172 | func kindaclose(a, b float64) bool { return tolerance(a, b, 1e-8) } |
Robert Griesemer | 368f8cb | 2009-11-06 14:24:38 -0800 | [diff] [blame] | 173 | func close(a, b float64) bool { return tolerance(a, b, 1e-14) } |
| 174 | func veryclose(a, b float64) bool { return tolerance(a, b, 4e-16) } |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 175 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 176 | func TestAsin(t *testing.T) { |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 177 | for i := 0; i < len(vf); i++ { |
Robert Griesemer | 3bb0032 | 2009-11-09 21:23:52 -0800 | [diff] [blame] | 178 | if f := Asin(vf[i] / 10); !veryclose(asin[i], f) { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 179 | t.Errorf("Asin(%g) = %g, want %g\n", vf[i]/10, f, asin[i]) |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 180 | } |
| 181 | } |
| 182 | } |
| 183 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 184 | func TestAtan(t *testing.T) { |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 185 | for i := 0; i < len(vf); i++ { |
Russ Cox | 0496040 | 2009-08-10 22:02:51 -0700 | [diff] [blame] | 186 | if f := Atan(vf[i]); !veryclose(atan[i], f) { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 187 | t.Errorf("Atan(%g) = %g, want %g\n", vf[i], f, atan[i]) |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 188 | } |
| 189 | } |
| 190 | } |
| 191 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 192 | func TestExp(t *testing.T) { |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 193 | for i := 0; i < len(vf); i++ { |
Russ Cox | 0496040 | 2009-08-10 22:02:51 -0700 | [diff] [blame] | 194 | if f := Exp(vf[i]); !veryclose(exp[i], f) { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 195 | t.Errorf("Exp(%g) = %g, want %g\n", vf[i], f, exp[i]) |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 196 | } |
| 197 | } |
| 198 | } |
| 199 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 200 | func TestFloor(t *testing.T) { |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 201 | for i := 0; i < len(vf); i++ { |
Russ Cox | 0496040 | 2009-08-10 22:02:51 -0700 | [diff] [blame] | 202 | if f := Floor(vf[i]); floor[i] != f { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 203 | t.Errorf("Floor(%g) = %g, want %g\n", vf[i], f, floor[i]) |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 204 | } |
| 205 | } |
| 206 | } |
| 207 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 208 | func TestLog(t *testing.T) { |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 209 | for i := 0; i < len(vf); i++ { |
Russ Cox | 0496040 | 2009-08-10 22:02:51 -0700 | [diff] [blame] | 210 | a := Fabs(vf[i]); |
| 211 | if f := Log(a); log[i] != f { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 212 | t.Errorf("Log(%g) = %g, want %g\n", a, f, log[i]) |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 213 | } |
| 214 | } |
Russ Cox | 0496040 | 2009-08-10 22:02:51 -0700 | [diff] [blame] | 215 | if f := Log(10); f != Ln10 { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 216 | t.Errorf("Log(%g) = %g, want %g\n", 10, f, Ln10) |
Russ Cox | f379ea0 | 2008-11-20 10:54:02 -0800 | [diff] [blame] | 217 | } |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 218 | } |
| 219 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 220 | func TestPow(t *testing.T) { |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 221 | for i := 0; i < len(vf); i++ { |
Russ Cox | 0496040 | 2009-08-10 22:02:51 -0700 | [diff] [blame] | 222 | if f := Pow(10, vf[i]); !close(pow[i], f) { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 223 | t.Errorf("Pow(10, %.17g) = %.17g, want %.17g\n", vf[i], f, pow[i]) |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 224 | } |
| 225 | } |
| 226 | } |
| 227 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 228 | func TestSin(t *testing.T) { |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 229 | for i := 0; i < len(vf); i++ { |
Russ Cox | 0496040 | 2009-08-10 22:02:51 -0700 | [diff] [blame] | 230 | if f := Sin(vf[i]); !close(sin[i], f) { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 231 | t.Errorf("Sin(%g) = %g, want %g\n", vf[i], f, sin[i]) |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 232 | } |
| 233 | } |
| 234 | } |
| 235 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 236 | func TestSinh(t *testing.T) { |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 237 | for i := 0; i < len(vf); i++ { |
Russ Cox | 0496040 | 2009-08-10 22:02:51 -0700 | [diff] [blame] | 238 | if f := Sinh(vf[i]); !veryclose(sinh[i], f) { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 239 | t.Errorf("Sinh(%g) = %g, want %g\n", vf[i], f, sinh[i]) |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 240 | } |
| 241 | } |
| 242 | } |
| 243 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 244 | func TestSqrt(t *testing.T) { |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 245 | for i := 0; i < len(vf); i++ { |
Russ Cox | 0496040 | 2009-08-10 22:02:51 -0700 | [diff] [blame] | 246 | a := Fabs(vf[i]); |
| 247 | if f := Sqrt(a); !veryclose(sqrt[i], f) { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 248 | t.Errorf("Sqrt(%g) = %g, want %g\n", a, f, floor[i]) |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 249 | } |
| 250 | } |
| 251 | } |
| 252 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 253 | func TestTan(t *testing.T) { |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 254 | for i := 0; i < len(vf); i++ { |
Russ Cox | 0496040 | 2009-08-10 22:02:51 -0700 | [diff] [blame] | 255 | if f := Tan(vf[i]); !close(tan[i], f) { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 256 | t.Errorf("Tan(%g) = %g, want %g\n", vf[i], f, tan[i]) |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 257 | } |
| 258 | } |
| 259 | } |
| 260 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 261 | func TestTanh(t *testing.T) { |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 262 | for i := 0; i < len(vf); i++ { |
Russ Cox | 0496040 | 2009-08-10 22:02:51 -0700 | [diff] [blame] | 263 | if f := Tanh(vf[i]); !veryclose(tanh[i], f) { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 264 | t.Errorf("Tanh(%g) = %g, want %g\n", vf[i], f, tanh[i]) |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 265 | } |
| 266 | } |
| 267 | } |
| 268 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 269 | func TestHypot(t *testing.T) { |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 270 | for i := 0; i < len(vf); i++ { |
Robert Griesemer | 3bb0032 | 2009-11-09 21:23:52 -0800 | [diff] [blame] | 271 | a := Fabs(tanh[i] * Sqrt(2)); |
Russ Cox | 0496040 | 2009-08-10 22:02:51 -0700 | [diff] [blame] | 272 | if f := Hypot(tanh[i], tanh[i]); !veryclose(a, f) { |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 273 | t.Errorf("Hypot(%g, %g) = %g, want %g\n", tanh[i], tanh[i], f, a) |
Russ Cox | 88daac7 | 2008-11-19 16:14:31 -0800 | [diff] [blame] | 274 | } |
| 275 | } |
| 276 | } |
Russ Cox | a338231 | 2009-11-15 12:57:09 -0800 | [diff] [blame] | 277 | |
Ken Thompson | bd80b5a | 2009-11-24 15:42:46 -0800 | [diff] [blame^] | 278 | // Check that math functions of high angle values |
| 279 | // return similar results to low angle values |
| 280 | func TestLargeSin(t *testing.T) { |
| 281 | large := float64(100000 * Pi); |
| 282 | for i := 0; i < len(vf); i++ { |
| 283 | f1 := Sin(vf[i]); |
| 284 | f2 := Sin(vf[i] + large); |
| 285 | if !kindaclose(f1, f2) { |
| 286 | t.Errorf("Sin(%g) = %g, want %g\n", vf[i]+large, f1, f2) |
| 287 | } |
| 288 | } |
| 289 | } |
| 290 | |
| 291 | func TestLargeCos(t *testing.T) { |
| 292 | large := float64(100000 * Pi); |
| 293 | for i := 0; i < len(vf); i++ { |
| 294 | f1 := Cos(vf[i]); |
| 295 | f2 := Cos(vf[i] + large); |
| 296 | if !kindaclose(f1, f2) { |
| 297 | t.Errorf("Cos(%g) = %g, want %g\n", vf[i]+large, f1, f2) |
| 298 | } |
| 299 | } |
| 300 | } |
| 301 | |
| 302 | |
| 303 | func TestLargeTan(t *testing.T) { |
| 304 | large := float64(100000 * Pi); |
| 305 | for i := 0; i < len(vf); i++ { |
| 306 | f1 := Tan(vf[i]); |
| 307 | f2 := Tan(vf[i] + large); |
| 308 | if !kindaclose(f1, f2) { |
| 309 | t.Errorf("Tan(%g) = %g, want %g\n", vf[i]+large, f1, f2) |
| 310 | } |
| 311 | } |
| 312 | } |
| 313 | |
Russ Cox | a338231 | 2009-11-15 12:57:09 -0800 | [diff] [blame] | 314 | // Check that math constants are accepted by compiler |
| 315 | // and have right value (assumes strconv.Atof works). |
| 316 | // http://code.google.com/p/go/issues/detail?id=201 |
| 317 | |
| 318 | type floatTest struct { |
| 319 | val interface{}; |
| 320 | name string; |
| 321 | str string; |
| 322 | } |
| 323 | |
| 324 | var floatTests = []floatTest{ |
| 325 | floatTest{float64(MaxFloat64), "MaxFloat64", "1.7976931348623157e+308"}, |
| 326 | floatTest{float64(MinFloat64), "MinFloat64", "5e-324"}, |
| 327 | floatTest{float32(MaxFloat32), "MaxFloat32", "3.4028235e+38"}, |
| 328 | floatTest{float32(MinFloat32), "MinFloat32", "1e-45"}, |
| 329 | } |
| 330 | |
| 331 | func TestFloatMinMax(t *testing.T) { |
| 332 | for _, tt := range floatTests { |
| 333 | s := fmt.Sprint(tt.val); |
| 334 | if s != tt.str { |
| 335 | t.Errorf("Sprint(%v) = %s, want %s", tt.name, s, tt.str) |
| 336 | } |
| 337 | } |
| 338 | } |