OLD | NEW |
(Empty) | |
| 1 // Copyright 2010 The Go Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style |
| 3 // license that can be found in the LICENSE file. |
| 4 |
| 5 package cmath_test |
| 6 |
| 7 import ( |
| 8 . "cmath" |
| 9 "math" |
| 10 "testing" |
| 11 ) |
| 12 |
| 13 var vc26 = []complex128{ |
| 14 (4.97901192488367350108546816 + 7.73887247457810456552351752i), |
| 15 (7.73887247457810456552351752 - 0.27688005719200159404635997i), |
| 16 (-0.27688005719200159404635997 - 5.01060361827107492160848778i), |
| 17 (-5.01060361827107492160848778 + 9.63629370719841737980004837i), |
| 18 (9.63629370719841737980004837 + 2.92637723924396464525443662i), |
| 19 (2.92637723924396464525443662 + 5.22908343145930665230025625i), |
| 20 (5.22908343145930665230025625 + 2.72793991043601025126008608i), |
| 21 (2.72793991043601025126008608 + 1.82530809168085506044576505i), |
| 22 (1.82530809168085506044576505 - 8.68592476857560136238589621i), |
| 23 (-8.68592476857560136238589621 + 4.97901192488367350108546816i), |
| 24 } |
| 25 var vc = []complex128{ |
| 26 (4.9790119248836735e+00 + 7.7388724745781045e+00i), |
| 27 (7.7388724745781045e+00 - 2.7688005719200159e-01i), |
| 28 (-2.7688005719200159e-01 - 5.0106036182710749e+00i), |
| 29 (-5.0106036182710749e+00 + 9.6362937071984173e+00i), |
| 30 (9.6362937071984173e+00 + 2.9263772392439646e+00i), |
| 31 (2.9263772392439646e+00 + 5.2290834314593066e+00i), |
| 32 (5.2290834314593066e+00 + 2.7279399104360102e+00i), |
| 33 (2.7279399104360102e+00 + 1.8253080916808550e+00i), |
| 34 (1.8253080916808550e+00 - 8.6859247685756013e+00i), |
| 35 (-8.6859247685756013e+00 + 4.9790119248836735e+00i), |
| 36 } |
| 37 |
| 38 // The expected results below were computed by the high precision calculators |
| 39 // at http://keisan.casio.com/. More exact input values (array vc[], above) |
| 40 // were obtained by printing them with "%.26f". The answers were calculated |
| 41 // to 26 digits (by using the "Digit number" drop-down control of each |
| 42 // calculator). Twenty-six digits were chosen so that the answers would be |
| 43 // accurate even for a float128 type. |
| 44 |
| 45 var abs = []float64{ |
| 46 9.2022120669932650313380972e+00, |
| 47 7.7438239742296106616261394e+00, |
| 48 5.0182478202557746902556648e+00, |
| 49 1.0861137372799545160704002e+01, |
| 50 1.0070841084922199607011905e+01, |
| 51 5.9922447613166942183705192e+00, |
| 52 5.8978784056736762299945176e+00, |
| 53 3.2822866700678709020367184e+00, |
| 54 8.8756430028990417290744307e+00, |
| 55 1.0011785496777731986390856e+01, |
| 56 } |
| 57 |
| 58 var acos = []complex128{ |
| 59 (1.0017679804707456328694569 - 2.9138232718554953784519807i), |
| 60 (0.03606427612041407369636057 + 2.7358584434576260925091256i), |
| 61 (1.6249365462333796703711823 + 2.3159537454335901187730929i), |
| 62 (2.0485650849650740120660391 - 3.0795576791204117911123886i), |
| 63 (0.29621132089073067282488147 - 3.0007392508200622519398814i), |
| 64 (1.0664555914934156601503632 - 2.4872865024796011364747111i), |
| 65 (0.48681307452231387690013905 - 2.463655912283054555225301i), |
| 66 (0.6116977071277574248407752 - 1.8734458851737055262693056i), |
| 67 (1.3649311280370181331184214 + 2.8793528632328795424123832i), |
| 68 (2.6189310485682988308904501 - 2.9956543302898767795858704i), |
| 69 } |
| 70 var acosh = []complex128{ |
| 71 (2.9138232718554953784519807 + 1.0017679804707456328694569i), |
| 72 (2.7358584434576260925091256 - 0.03606427612041407369636057i), |
| 73 (2.3159537454335901187730929 - 1.6249365462333796703711823i), |
| 74 (3.0795576791204117911123886 + 2.0485650849650740120660391i), |
| 75 (3.0007392508200622519398814 + 0.29621132089073067282488147i), |
| 76 (2.4872865024796011364747111 + 1.0664555914934156601503632i), |
| 77 (2.463655912283054555225301 + 0.48681307452231387690013905i), |
| 78 (1.8734458851737055262693056 + 0.6116977071277574248407752i), |
| 79 (2.8793528632328795424123832 - 1.3649311280370181331184214i), |
| 80 (2.9956543302898767795858704 + 2.6189310485682988308904501i), |
| 81 } |
| 82 var asin = []complex128{ |
| 83 (0.56902834632415098636186476 + 2.9138232718554953784519807i), |
| 84 (1.5347320506744825455349611 - 2.7358584434576260925091256i), |
| 85 (-0.054140219438483051139860579 - 2.3159537454335901187730929i), |
| 86 (-0.47776875817017739283471738 + 3.0795576791204117911123886i), |
| 87 (1.2745850059041659464064402 + 3.0007392508200622519398814i), |
| 88 (0.50434073530148095908095852 + 2.4872865024796011364747111i), |
| 89 (1.0839832522725827423311826 + 2.463655912283054555225301i), |
| 90 (0.9590986196671391943905465 + 1.8734458851737055262693056i), |
| 91 (0.20586519875787848611290031 - 2.8793528632328795424123832i), |
| 92 (-1.0481347217734022116591284 + 2.9956543302898767795858704i), |
| 93 } |
| 94 var asinh = []complex128{ |
| 95 (2.9113760469415295679342185 + 0.99639459545704326759805893i), |
| 96 (2.7441755423994259061579029 - 0.035468308789000500601119392i), |
| 97 (-2.2962136462520690506126678 - 1.5144663565690151885726707i), |
| 98 (-3.0771233459295725965402455 + 1.0895577967194013849422294i), |
| 99 (3.0048366100923647417557027 + 0.29346979169819220036454168i), |
| 100 (2.4800059370795363157364643 + 1.0545868606049165710424232i), |
| 101 (2.4718773838309585611141821 + 0.47502344364250803363708842i), |
| 102 (1.8910743588080159144378396 + 0.56882925572563602341139174i), |
| 103 (2.8735426423367341878069406 - 1.362376149648891420997548i), |
| 104 (-2.9981750586172477217567878 + 0.5183571985225367505624207i), |
| 105 } |
| 106 var atan = []complex128{ |
| 107 (1.5115747079332741358607654 + 0.091324403603954494382276776i), |
| 108 (1.4424504323482602560806727 - 0.0045416132642803911503770933i), |
| 109 (-1.5593488703630532674484026 - 0.20163295409248362456446431i), |
| 110 (-1.5280619472445889867794105 + 0.081721556230672003746956324i), |
| 111 (1.4759909163240799678221039 + 0.028602969320691644358773586i), |
| 112 (1.4877353772046548932715555 + 0.14566877153207281663773599i), |
| 113 (1.4206983927779191889826 + 0.076830486127880702249439993i), |
| 114 (1.3162236060498933364869556 + 0.16031313000467530644933363i), |
| 115 (1.5473450684303703578810093 - 0.11064907507939082484935782i), |
| 116 (-1.4841462340185253987375812 + 0.049341850305024399493142411i), |
| 117 } |
| 118 var atanh = []complex128{ |
| 119 (0.058375027938968509064640438 + 1.4793488495105334458167782i), |
| 120 (0.12977343497790381229915667 - 1.5661009410463561327262499i), |
| 121 (-0.010576456067347252072200088 - 1.3743698658402284549750563i), |
| 122 (-0.042218595678688358882784918 + 1.4891433968166405606692604i), |
| 123 (0.095218997991316722061828397 + 1.5416884098777110330499698i), |
| 124 (0.079965459366890323857556487 + 1.4252510353873192700350435i), |
| 125 (0.15051245471980726221708301 + 1.4907432533016303804884461i), |
| 126 (0.25082072933993987714470373 + 1.392057665392187516442986i), |
| 127 (0.022896108815797135846276662 - 1.4609224989282864208963021i), |
| 128 (-0.08665624101841876130537396 + 1.5207902036935093480142159i), |
| 129 } |
| 130 var conj = []complex128{ |
| 131 (4.9790119248836735e+00 - 7.7388724745781045e+00i), |
| 132 (7.7388724745781045e+00 + 2.7688005719200159e-01i), |
| 133 (-2.7688005719200159e-01 + 5.0106036182710749e+00i), |
| 134 (-5.0106036182710749e+00 - 9.6362937071984173e+00i), |
| 135 (9.6362937071984173e+00 - 2.9263772392439646e+00i), |
| 136 (2.9263772392439646e+00 - 5.2290834314593066e+00i), |
| 137 (5.2290834314593066e+00 - 2.7279399104360102e+00i), |
| 138 (2.7279399104360102e+00 - 1.8253080916808550e+00i), |
| 139 (1.8253080916808550e+00 + 8.6859247685756013e+00i), |
| 140 (-8.6859247685756013e+00 - 4.9790119248836735e+00i), |
| 141 } |
| 142 var cos = []complex128{ |
| 143 (3.024540920601483938336569e+02 + 1.1073797572517071650045357e+03i), |
| 144 (1.192858682649064973252758e-01 + 2.7857554122333065540970207e-01i), |
| 145 (7.2144394304528306603857962e+01 - 2.0500129667076044169954205e+01i), |
| 146 (2.24921952538403984190541e+03 - 7.317363745602773587049329e+03i), |
| 147 (-9.148222970032421760015498e+00 + 1.953124661113563541862227e+00i), |
| 148 (-9.116081175857732248227078e+01 - 1.992669213569952232487371e+01i), |
| 149 (3.795639179042704640002918e+00 + 6.623513350981458399309662e+00i), |
| 150 (-2.9144840732498869560679084e+00 - 1.214620271628002917638748e+00i), |
| 151 (-7.45123482501299743872481e+02 + 2.8641692314488080814066734e+03i), |
| 152 (-5.371977967039319076416747e+01 + 4.893348341339375830564624e+01i), |
| 153 } |
| 154 var cosh = []complex128{ |
| 155 (8.34638383523018249366948e+00 + 7.2181057886425846415112064e+01i), |
| 156 (1.10421967379919366952251e+03 - 3.1379638689277575379469861e+02i), |
| 157 (3.051485206773701584738512e-01 - 2.6805384730105297848044485e-01i), |
| 158 (-7.33294728684187933370938e+01 + 1.574445942284918251038144e+01i), |
| 159 (-7.478643293945957535757355e+03 + 1.6348382209913353929473321e+03i), |
| 160 (4.622316522966235701630926e+00 - 8.088695185566375256093098e+00i), |
| 161 (-8.544333183278877406197712e+01 + 3.7505836120128166455231717e+01i), |
| 162 (-1.934457815021493925115198e+00 + 7.3725859611767228178358673e+00i), |
| 163 (-2.352958770061749348353548e+00 - 2.034982010440878358915409e+00i), |
| 164 (7.79756457532134748165069e+02 + 2.8549350716819176560377717e+03i), |
| 165 } |
| 166 var exp = []complex128{ |
| 167 (1.669197736864670815125146e+01 + 1.4436895109507663689174096e+02i), |
| 168 (2.2084389286252583447276212e+03 - 6.2759289284909211238261917e+02i), |
| 169 (2.227538273122775173434327e-01 + 7.2468284028334191250470034e-01i), |
| 170 (-6.5182985958153548997881627e-03 - 1.39965837915193860879044e-03i), |
| 171 (-1.4957286524084015746110777e+04 + 3.269676455931135688988042e+03i), |
| 172 (9.218158701983105935659273e+00 - 1.6223985291084956009304582e+01i), |
| 173 (-1.7088175716853040841444505e+02 + 7.501382609870410713795546e+01i), |
| 174 (-3.852461315830959613132505e+00 + 1.4808420423156073221970892e+01i), |
| 175 (-4.586775503301407379786695e+00 - 4.178501081246873415144744e+00i), |
| 176 (4.451337963005453491095747e-05 - 1.62977574205442915935263e-04i), |
| 177 } |
| 178 var log = []complex128{ |
| 179 (2.2194438972179194425697051e+00 + 9.9909115046919291062461269e-01i), |
| 180 (2.0468956191154167256337289e+00 - 3.5762575021856971295156489e-02i), |
| 181 (1.6130808329853860438751244e+00 - 1.6259990074019058442232221e+00i), |
| 182 (2.3851910394823008710032651e+00 + 2.0502936359659111755031062e+00i), |
| 183 (2.3096442270679923004800651e+00 + 2.9483213155446756211881774e-01i), |
| 184 (1.7904660933974656106951860e+00 + 1.0605860367252556281902109e+00i), |
| 185 (1.7745926939841751666177512e+00 + 4.8084556083358307819310911e-01i), |
| 186 (1.1885403350045342425648780e+00 + 5.8969634164776659423195222e-01i), |
| 187 (2.1833107837679082586772505e+00 - 1.3636647724582455028314573e+00i), |
| 188 (2.3037629487273259170991671e+00 + 2.6210913895386013290915234e+00i), |
| 189 } |
| 190 var log10 = []complex128{ |
| 191 (9.6389223745559042474184943e-01 + 4.338997735671419492599631e-01i), |
| 192 (8.8895547241376579493490892e-01 - 1.5531488990643548254864806e-02i), |
| 193 (7.0055210462945412305244578e-01 - 7.0616239649481243222248404e-01i), |
| 194 (1.0358753067322445311676952e+00 + 8.9043121238134980156490909e-01i), |
| 195 (1.003065742975330237172029e+00 + 1.2804396782187887479857811e-01i), |
| 196 (7.7758954439739162532085157e-01 + 4.6060666333341810869055108e-01i), |
| 197 (7.7069581462315327037689152e-01 + 2.0882857371769952195512475e-01i), |
| 198 (5.1617650901191156135137239e-01 + 2.5610186717615977620363299e-01i), |
| 199 (9.4819982567026639742663212e-01 - 5.9223208584446952284914289e-01i), |
| 200 (1.0005115362454417135973429e+00 + 1.1383255270407412817250921e+00i), |
| 201 } |
| 202 var pow = []complex128{ |
| 203 (-2.499956739197529585028819e+00 + 1.759751724335650228957144e+00i), |
| 204 (7.357094338218116311191939e+04 - 5.089973412479151648145882e+04i), |
| 205 (1.320777296067768517259592e+01 - 3.165621914333901498921986e+01i), |
| 206 (-3.123287828297300934072149e-07 - 1.9849567521490553032502223E-7i), |
| 207 (8.0622651468477229614813e+04 - 7.80028727944573092944363e+04i), |
| 208 (-1.0268824572103165858577141e+00 - 4.716844738244989776610672e-01i), |
| 209 (-4.35953819012244175753187e+01 + 2.2036445974645306917648585e+02i), |
| 210 (8.3556092283250594950239e-01 - 1.2261571947167240272593282e+01i), |
| 211 (1.582292972120769306069625e+03 + 1.273564263524278244782512e+04i), |
| 212 (6.592208301642122149025369e-08 + 2.584887236651661903526389e-08i), |
| 213 } |
| 214 var sin = []complex128{ |
| 215 (-1.1073801774240233539648544e+03 + 3.024539773002502192425231e+02i), |
| 216 (1.0317037521400759359744682e+00 - 3.2208979799929570242818e-02i), |
| 217 (-2.0501952097271429804261058e+01 - 7.2137981348240798841800967e+01i), |
| 218 (7.3173638080346338642193078e+03 + 2.249219506193664342566248e+03i), |
| 219 (-1.964375633631808177565226e+00 - 9.0958264713870404464159683e+00i), |
| 220 (1.992783647158514838337674e+01 - 9.11555769410191350416942e+01i), |
| 221 (-6.680335650741921444300349e+00 + 3.763353833142432513086117e+00i), |
| 222 (1.2794028166657459148245993e+00 - 2.7669092099795781155109602e+00i), |
| 223 (2.8641693949535259594188879e+03 + 7.451234399649871202841615e+02i), |
| 224 (-4.893811726244659135553033e+01 - 5.371469305562194635957655e+01i), |
| 225 } |
| 226 var sinh = []complex128{ |
| 227 (8.34559353341652565758198e+00 + 7.2187893208650790476628899e+01i), |
| 228 (1.1042192548260646752051112e+03 - 3.1379650595631635858792056e+02i), |
| 229 (-8.239469336509264113041849e-02 + 9.9273668758439489098514519e-01i), |
| 230 (7.332295456982297798219401e+01 - 1.574585908122833444899023e+01i), |
| 231 (-7.4786432301380582103534216e+03 + 1.63483823493980029604071e+03i), |
| 232 (4.595842179016870234028347e+00 - 8.135290105518580753211484e+00i), |
| 233 (-8.543842533574163435246793e+01 + 3.750798997857594068272375e+01i), |
| 234 (-1.918003500809465688017307e+00 + 7.4358344619793504041350251e+00i), |
| 235 (-2.233816733239658031433147e+00 - 2.143519070805995056229335e+00i), |
| 236 (-7.797564130187551181105341e+02 - 2.8549352346594918614806877e+03i), |
| 237 } |
| 238 var sqrt = []complex128{ |
| 239 (2.6628203086086130543813948e+00 + 1.4531345674282185229796902e+00i), |
| 240 (2.7823278427251986247149295e+00 - 4.9756907317005224529115567e-02i), |
| 241 (1.5397025302089642757361015e+00 - 1.6271336573016637535695727e+00i), |
| 242 (1.7103411581506875260277898e+00 + 2.8170677122737589676157029e+00i), |
| 243 (3.1390392472953103383607947e+00 + 4.6612625849858653248980849e-01i), |
| 244 (2.1117080764822417640789287e+00 + 1.2381170223514273234967850e+00i), |
| 245 (2.3587032281672256703926939e+00 + 5.7827111903257349935720172e-01i), |
| 246 (1.7335262588873410476661577e+00 + 5.2647258220721269141550382e-01i), |
| 247 (2.3131094974708716531499282e+00 - 1.8775429304303785570775490e+00i), |
| 248 (8.1420535745048086240947359e-01 + 3.0575897587277248522656113e+00i), |
| 249 } |
| 250 var tan = []complex128{ |
| 251 (-1.928757919086441129134525e-07 + 1.0000003267499169073251826e+00i), |
| 252 (1.242412685364183792138948e+00 - 3.17149693883133370106696e+00i), |
| 253 (-4.6745126251587795225571826e-05 - 9.9992439225263959286114298e-01i), |
| 254 (4.792363401193648192887116e-09 + 1.0000000070589333451557723e+00i), |
| 255 (2.345740824080089140287315e-03 + 9.947733046570988661022763e-01i), |
| 256 (-2.396030789494815566088809e-05 + 9.9994781345418591429826779e-01i), |
| 257 (-7.370204836644931340905303e-03 + 1.0043553413417138987717748e+00i), |
| 258 (-3.691803847992048527007457e-02 + 9.6475071993469548066328894e-01i), |
| 259 (-2.781955256713729368401878e-08 - 1.000000049848910609006646e+00i), |
| 260 (9.4281590064030478879791249e-05 + 9.9999119340863718183758545e-01i), |
| 261 } |
| 262 var tanh = []complex128{ |
| 263 (1.0000921981225144748819918e+00 + 2.160986245871518020231507e-05i), |
| 264 (9.9999967727531993209562591e-01 - 1.9953763222959658873657676e-07i), |
| 265 (-1.765485739548037260789686e+00 + 1.7024216325552852445168471e+00i), |
| 266 (-9.999189442732736452807108e-01 + 3.64906070494473701938098e-05i), |
| 267 (9.9999999224622333738729767e-01 - 3.560088949517914774813046e-09i), |
| 268 (1.0029324933367326862499343e+00 - 4.948790309797102353137528e-03i), |
| 269 (9.9996113064788012488693567e-01 - 4.226995742097032481451259e-05i), |
| 270 (1.0074784189316340029873945e+00 - 4.194050814891697808029407e-03i), |
| 271 (9.9385534229718327109131502e-01 + 5.144217985914355502713437e-02i), |
| 272 (-1.0000000491604982429364892e+00 - 2.901873195374433112227349e-08i), |
| 273 } |
| 274 |
| 275 // special cases |
| 276 var vcAbsSC = []complex128{ |
| 277 NaN(), |
| 278 } |
| 279 var absSC = []float64{ |
| 280 math.NaN(), |
| 281 } |
| 282 var vcAcosSC = []complex128{ |
| 283 NaN(), |
| 284 } |
| 285 var acosSC = []complex128{ |
| 286 NaN(), |
| 287 } |
| 288 var vcAcoshSC = []complex128{ |
| 289 NaN(), |
| 290 } |
| 291 var acoshSC = []complex128{ |
| 292 NaN(), |
| 293 } |
| 294 var vcAsinSC = []complex128{ |
| 295 NaN(), |
| 296 } |
| 297 var asinSC = []complex128{ |
| 298 NaN(), |
| 299 } |
| 300 var vcAsinhSC = []complex128{ |
| 301 NaN(), |
| 302 } |
| 303 var asinhSC = []complex128{ |
| 304 NaN(), |
| 305 } |
| 306 var vcAtanSC = []complex128{ |
| 307 NaN(), |
| 308 } |
| 309 var atanSC = []complex128{ |
| 310 NaN(), |
| 311 } |
| 312 var vcAtanhSC = []complex128{ |
| 313 NaN(), |
| 314 } |
| 315 var atanhSC = []complex128{ |
| 316 NaN(), |
| 317 } |
| 318 var vcConjSC = []complex128{ |
| 319 NaN(), |
| 320 } |
| 321 var conjSC = []complex128{ |
| 322 NaN(), |
| 323 } |
| 324 var vcCosSC = []complex128{ |
| 325 NaN(), |
| 326 } |
| 327 var cosSC = []complex128{ |
| 328 NaN(), |
| 329 } |
| 330 var vcCoshSC = []complex128{ |
| 331 NaN(), |
| 332 } |
| 333 var coshSC = []complex128{ |
| 334 NaN(), |
| 335 } |
| 336 var vcExpSC = []complex128{ |
| 337 NaN(), |
| 338 } |
| 339 var expSC = []complex128{ |
| 340 NaN(), |
| 341 } |
| 342 var vcLogSC = []complex128{ |
| 343 NaN(), |
| 344 } |
| 345 var logSC = []complex128{ |
| 346 NaN(), |
| 347 } |
| 348 var vcLog10SC = []complex128{ |
| 349 NaN(), |
| 350 } |
| 351 var log10SC = []complex128{ |
| 352 NaN(), |
| 353 } |
| 354 var vcPowSC = [][2]complex128{ |
| 355 [2]complex128{NaN(), NaN()}, |
| 356 } |
| 357 var powSC = []complex128{ |
| 358 NaN(), |
| 359 } |
| 360 var vcSinSC = []complex128{ |
| 361 NaN(), |
| 362 } |
| 363 var sinSC = []complex128{ |
| 364 NaN(), |
| 365 } |
| 366 var vcSinhSC = []complex128{ |
| 367 NaN(), |
| 368 } |
| 369 var sinhSC = []complex128{ |
| 370 NaN(), |
| 371 } |
| 372 var vcSqrtSC = []complex128{ |
| 373 NaN(), |
| 374 } |
| 375 var sqrtSC = []complex128{ |
| 376 NaN(), |
| 377 } |
| 378 var vcTanSC = []complex128{ |
| 379 NaN(), |
| 380 } |
| 381 var tanSC = []complex128{ |
| 382 NaN(), |
| 383 } |
| 384 var vcTanhSC = []complex128{ |
| 385 NaN(), |
| 386 } |
| 387 var tanhSC = []complex128{ |
| 388 NaN(), |
| 389 } |
| 390 |
| 391 // functions borrowed from pkg/math/all_test.go |
| 392 func tolerance(a, b, e float64) bool { |
| 393 d := a - b |
| 394 if d < 0 { |
| 395 d = -d |
| 396 } |
| 397 |
| 398 if a != 0 { |
| 399 e = e * a |
| 400 if e < 0 { |
| 401 e = -e |
| 402 } |
| 403 } |
| 404 return d < e |
| 405 } |
| 406 func soclose(a, b, e float64) bool { return tolerance(a, b, e) } |
| 407 func veryclose(a, b float64) bool { return tolerance(a, b, 4e-16) } |
| 408 func alike(a, b float64) bool { |
| 409 switch { |
| 410 case a != a && b != b: // math.IsNaN(a) && math.IsNaN(b): |
| 411 return true |
| 412 case a == b: |
| 413 return true |
| 414 } |
| 415 return false |
| 416 } |
| 417 |
| 418 func cTolerance(a, b complex128, e float64) bool { |
| 419 d := Abs(a - b) |
| 420 if a != 0 { |
| 421 e = e * Abs(a) |
| 422 if e < 0 { |
| 423 e = -e |
| 424 } |
| 425 } |
| 426 return d < e |
| 427 } |
| 428 func cSoclose(a, b complex128, e float64) bool { return cTolerance(a, b, e) } |
| 429 func cVeryclose(a, b complex128) bool { return cTolerance(a, b, 4e-16)
} |
| 430 func cAlike(a, b complex128) bool { |
| 431 switch { |
| 432 case IsNaN(a) && IsNaN(b): |
| 433 return true |
| 434 case a == b: |
| 435 return true |
| 436 } |
| 437 return false |
| 438 } |
| 439 |
| 440 func TestAbs(t *testing.T) { |
| 441 for i := 0; i < len(vc); i++ { |
| 442 if f := Abs(vc[i]); !veryclose(abs[i], f) { |
| 443 t.Errorf("Abs(%g) = %g, want %g\n", vc[i], f, abs[i]) |
| 444 } |
| 445 } |
| 446 for i := 0; i < len(vcAbsSC); i++ { |
| 447 if f := Abs(vcAbsSC[i]); !alike(absSC[i], f) { |
| 448 t.Errorf("Abs(%g) = %g, want %g\n", vcAbsSC[i], f, absSC
[i]) |
| 449 } |
| 450 } |
| 451 } |
| 452 func TestAcos(t *testing.T) { |
| 453 for i := 0; i < len(vc); i++ { |
| 454 if f := Acos(vc[i]); !cSoclose(acos[i], f, 1e-14) { |
| 455 t.Errorf("Acos(%g) = %g, want %g\n", vc[i], f, acos[i]) |
| 456 } |
| 457 } |
| 458 for i := 0; i < len(vcAcosSC); i++ { |
| 459 if f := Acos(vcAcosSC[i]); !cAlike(acosSC[i], f) { |
| 460 t.Errorf("Acos(%g) = %g, want %g\n", vcAcosSC[i], f, aco
sSC[i]) |
| 461 } |
| 462 } |
| 463 } |
| 464 func TestAcosh(t *testing.T) { |
| 465 for i := 0; i < len(vc); i++ { |
| 466 if f := Acosh(vc[i]); !cSoclose(acosh[i], f, 1e-14) { |
| 467 t.Errorf("Acosh(%g) = %g, want %g\n", vc[i], f, acosh[i]
) |
| 468 } |
| 469 } |
| 470 for i := 0; i < len(vcAcoshSC); i++ { |
| 471 if f := Acosh(vcAcoshSC[i]); !cAlike(acoshSC[i], f) { |
| 472 t.Errorf("Acosh(%g) = %g, want %g\n", vcAcoshSC[i], f, a
coshSC[i]) |
| 473 } |
| 474 } |
| 475 } |
| 476 func TestAsin(t *testing.T) { |
| 477 for i := 0; i < len(vc); i++ { |
| 478 if f := Asin(vc[i]); !cSoclose(asin[i], f, 1e-14) { |
| 479 t.Errorf("Asin(%g) = %g, want %g\n", vc[i], f, asin[i]) |
| 480 } |
| 481 } |
| 482 for i := 0; i < len(vcAsinSC); i++ { |
| 483 if f := Asin(vcAsinSC[i]); !cAlike(asinSC[i], f) { |
| 484 t.Errorf("Asin(%g) = %g, want %g\n", vcAsinSC[i], f, asi
nSC[i]) |
| 485 } |
| 486 } |
| 487 } |
| 488 func TestAsinh(t *testing.T) { |
| 489 for i := 0; i < len(vc); i++ { |
| 490 if f := Asinh(vc[i]); !cSoclose(asinh[i], f, 4e-15) { |
| 491 t.Errorf("Asinh(%g) = %g, want %g\n", vc[i], f, asinh[i]
) |
| 492 } |
| 493 } |
| 494 for i := 0; i < len(vcAsinhSC); i++ { |
| 495 if f := Asinh(vcAsinhSC[i]); !cAlike(asinhSC[i], f) { |
| 496 t.Errorf("Asinh(%g) = %g, want %g\n", vcAsinhSC[i], f, a
sinhSC[i]) |
| 497 } |
| 498 } |
| 499 } |
| 500 func TestAtan(t *testing.T) { |
| 501 for i := 0; i < len(vc); i++ { |
| 502 if f := Atan(vc[i]); !cVeryclose(atan[i], f) { |
| 503 t.Errorf("Atan(%g) = %g, want %g\n", vc[i], f, atan[i]) |
| 504 } |
| 505 } |
| 506 for i := 0; i < len(vcAtanSC); i++ { |
| 507 if f := Atan(vcAtanSC[i]); !cAlike(atanSC[i], f) { |
| 508 t.Errorf("Atan(%g) = %g, want %g\n", vcAtanSC[i], f, ata
nSC[i]) |
| 509 } |
| 510 } |
| 511 } |
| 512 func TestAtanh(t *testing.T) { |
| 513 for i := 0; i < len(vc); i++ { |
| 514 if f := Atanh(vc[i]); !cVeryclose(atanh[i], f) { |
| 515 t.Errorf("Atanh(%g) = %g, want %g\n", vc[i], f, atanh[i]
) |
| 516 } |
| 517 } |
| 518 for i := 0; i < len(vcAtanhSC); i++ { |
| 519 if f := Atanh(vcAtanhSC[i]); !cAlike(atanhSC[i], f) { |
| 520 t.Errorf("Atanh(%g) = %g, want %g\n", vcAtanhSC[i], f, a
tanhSC[i]) |
| 521 } |
| 522 } |
| 523 } |
| 524 func TestConj(t *testing.T) { |
| 525 for i := 0; i < len(vc); i++ { |
| 526 if f := Conj(vc[i]); !cVeryclose(conj[i], f) { |
| 527 t.Errorf("Conj(%g) = %g, want %g\n", vc[i], f, conj[i]) |
| 528 } |
| 529 } |
| 530 for i := 0; i < len(vcConjSC); i++ { |
| 531 if f := Conj(vcConjSC[i]); !cAlike(conjSC[i], f) { |
| 532 t.Errorf("Conj(%g) = %g, want %g\n", vcConjSC[i], f, con
jSC[i]) |
| 533 } |
| 534 } |
| 535 } |
| 536 func TestCos(t *testing.T) { |
| 537 for i := 0; i < len(vc); i++ { |
| 538 if f := Cos(vc[i]); !cSoclose(cos[i], f, 3e-15) { |
| 539 t.Errorf("Cos(%g) = %g, want %g\n", vc[i], f, cos[i]) |
| 540 } |
| 541 } |
| 542 for i := 0; i < len(vcCosSC); i++ { |
| 543 if f := Cos(vcCosSC[i]); !cAlike(cosSC[i], f) { |
| 544 t.Errorf("Cos(%g) = %g, want %g\n", vcCosSC[i], f, cosSC
[i]) |
| 545 } |
| 546 } |
| 547 } |
| 548 func TestCosh(t *testing.T) { |
| 549 for i := 0; i < len(vc); i++ { |
| 550 if f := Cosh(vc[i]); !cSoclose(cosh[i], f, 2e-15) { |
| 551 t.Errorf("Cosh(%g) = %g, want %g\n", vc[i], f, cosh[i]) |
| 552 } |
| 553 } |
| 554 for i := 0; i < len(vcCoshSC); i++ { |
| 555 if f := Cosh(vcCoshSC[i]); !cAlike(coshSC[i], f) { |
| 556 t.Errorf("Cosh(%g) = %g, want %g\n", vcCoshSC[i], f, cos
hSC[i]) |
| 557 } |
| 558 } |
| 559 } |
| 560 func TestExp(t *testing.T) { |
| 561 for i := 0; i < len(vc); i++ { |
| 562 if f := Exp(vc[i]); !cSoclose(exp[i], f, 1e-15) { |
| 563 t.Errorf("Exp(%g) = %g, want %g\n", vc[i], f, exp[i]) |
| 564 } |
| 565 } |
| 566 for i := 0; i < len(vcExpSC); i++ { |
| 567 if f := Exp(vcExpSC[i]); !cAlike(expSC[i], f) { |
| 568 t.Errorf("Exp(%g) = %g, want %g\n", vcExpSC[i], f, expSC
[i]) |
| 569 } |
| 570 } |
| 571 } |
| 572 func TestLog(t *testing.T) { |
| 573 for i := 0; i < len(vc); i++ { |
| 574 if f := Log(vc[i]); !cVeryclose(log[i], f) { |
| 575 t.Errorf("Log(%g) = %g, want %g\n", vc[i], f, log[i]) |
| 576 } |
| 577 } |
| 578 for i := 0; i < len(vcLogSC); i++ { |
| 579 if f := Log(vcLogSC[i]); !cAlike(logSC[i], f) { |
| 580 t.Errorf("Log(%g) = %g, want %g\n", vcLogSC[i], f, logSC
[i]) |
| 581 } |
| 582 } |
| 583 } |
| 584 func TestLog10(t *testing.T) { |
| 585 for i := 0; i < len(vc); i++ { |
| 586 if f := Log10(vc[i]); !cVeryclose(log10[i], f) { |
| 587 t.Errorf("Log10(%g) = %g, want %g\n", vc[i], f, log10[i]
) |
| 588 } |
| 589 } |
| 590 for i := 0; i < len(vcLog10SC); i++ { |
| 591 if f := Log10(vcLog10SC[i]); !cAlike(log10SC[i], f) { |
| 592 t.Errorf("Log10(%g) = %g, want %g\n", vcLog10SC[i], f, l
og10SC[i]) |
| 593 } |
| 594 } |
| 595 } |
| 596 func TestPow(t *testing.T) { |
| 597 var a = cmplx(float64(3), float64(3)) |
| 598 for i := 0; i < len(vc); i++ { |
| 599 if f := Pow(a, vc[i]); !cSoclose(pow[i], f, 4e-15) { |
| 600 t.Errorf("Pow(%g, %g) = %g, want %g\n", a, vc[i], f, pow
[i]) |
| 601 } |
| 602 } |
| 603 for i := 0; i < len(vcPowSC); i++ { |
| 604 if f := Pow(vcPowSC[i][0], vcPowSC[i][0]); !cAlike(powSC[i], f)
{ |
| 605 t.Errorf("Pow(%g, %g) = %g, want %g\n", vcPowSC[i][0], v
cPowSC[i][0], f, powSC[i]) |
| 606 } |
| 607 } |
| 608 } |
| 609 func TestSin(t *testing.T) { |
| 610 for i := 0; i < len(vc); i++ { |
| 611 if f := Sin(vc[i]); !cSoclose(sin[i], f, 2e-15) { |
| 612 t.Errorf("Sin(%g) = %g, want %g\n", vc[i], f, sin[i]) |
| 613 } |
| 614 } |
| 615 for i := 0; i < len(vcSinSC); i++ { |
| 616 if f := Sin(vcSinSC[i]); !cAlike(sinSC[i], f) { |
| 617 t.Errorf("Sin(%g) = %g, want %g\n", vcSinSC[i], f, sinSC
[i]) |
| 618 } |
| 619 } |
| 620 } |
| 621 func TestSinh(t *testing.T) { |
| 622 for i := 0; i < len(vc); i++ { |
| 623 if f := Sinh(vc[i]); !cSoclose(sinh[i], f, 2e-15) { |
| 624 t.Errorf("Sinh(%g) = %g, want %g\n", vc[i], f, sinh[i]) |
| 625 } |
| 626 } |
| 627 for i := 0; i < len(vcSinhSC); i++ { |
| 628 if f := Sinh(vcSinhSC[i]); !cAlike(sinhSC[i], f) { |
| 629 t.Errorf("Sinh(%g) = %g, want %g\n", vcSinhSC[i], f, sin
hSC[i]) |
| 630 } |
| 631 } |
| 632 } |
| 633 func TestSqrt(t *testing.T) { |
| 634 for i := 0; i < len(vc); i++ { |
| 635 if f := Sqrt(vc[i]); !cVeryclose(sqrt[i], f) { |
| 636 t.Errorf("Sqrt(%g) = %g, want %g\n", vc[i], f, sqrt[i]) |
| 637 } |
| 638 } |
| 639 for i := 0; i < len(vcSqrtSC); i++ { |
| 640 if f := Sqrt(vcSqrtSC[i]); !cAlike(sqrtSC[i], f) { |
| 641 t.Errorf("Sqrt(%g) = %g, want %g\n", vcSqrtSC[i], f, sqr
tSC[i]) |
| 642 } |
| 643 } |
| 644 } |
| 645 func TestTan(t *testing.T) { |
| 646 for i := 0; i < len(vc); i++ { |
| 647 if f := Tan(vc[i]); !cSoclose(tan[i], f, 3e-15) { |
| 648 t.Errorf("Tan(%g) = %g, want %g\n", vc[i], f, tan[i]) |
| 649 } |
| 650 } |
| 651 for i := 0; i < len(vcTanSC); i++ { |
| 652 if f := Tan(vcTanSC[i]); !cAlike(tanSC[i], f) { |
| 653 t.Errorf("Tan(%g) = %g, want %g\n", vcTanSC[i], f, tanSC
[i]) |
| 654 } |
| 655 } |
| 656 } |
| 657 func TestTanh(t *testing.T) { |
| 658 for i := 0; i < len(vc); i++ { |
| 659 if f := Tanh(vc[i]); !cSoclose(tanh[i], f, 2e-15) { |
| 660 t.Errorf("Tanh(%g) = %g, want %g\n", vc[i], f, tanh[i]) |
| 661 } |
| 662 } |
| 663 for i := 0; i < len(vcTanhSC); i++ { |
| 664 if f := Tanh(vcTanhSC[i]); !cAlike(tanhSC[i], f) { |
| 665 t.Errorf("Tanh(%g) = %g, want %g\n", vcTanhSC[i], f, tan
hSC[i]) |
| 666 } |
| 667 } |
| 668 } |
| 669 |
| 670 func BenchmarkAbs(b *testing.B) { |
| 671 for i := 0; i < b.N; i++ { |
| 672 Abs(cmplx(2.5, 3.5)) |
| 673 } |
| 674 } |
| 675 func BenchmarkAcos(b *testing.B) { |
| 676 for i := 0; i < b.N; i++ { |
| 677 Acos(cmplx(2.5, 3.5)) |
| 678 } |
| 679 } |
| 680 func BenchmarkAcosh(b *testing.B) { |
| 681 for i := 0; i < b.N; i++ { |
| 682 Acosh(cmplx(2.5, 3.5)) |
| 683 } |
| 684 } |
| 685 func BenchmarkAsin(b *testing.B) { |
| 686 for i := 0; i < b.N; i++ { |
| 687 Asin(cmplx(2.5, 3.5)) |
| 688 } |
| 689 } |
| 690 func BenchmarkAsinh(b *testing.B) { |
| 691 for i := 0; i < b.N; i++ { |
| 692 Asinh(cmplx(2.5, 3.5)) |
| 693 } |
| 694 } |
| 695 func BenchmarkAtan(b *testing.B) { |
| 696 for i := 0; i < b.N; i++ { |
| 697 Atan(cmplx(2.5, 3.5)) |
| 698 } |
| 699 } |
| 700 func BenchmarkAtanh(b *testing.B) { |
| 701 for i := 0; i < b.N; i++ { |
| 702 Atanh(cmplx(2.5, 3.5)) |
| 703 } |
| 704 } |
| 705 func BenchmarkConj(b *testing.B) { |
| 706 for i := 0; i < b.N; i++ { |
| 707 Conj(cmplx(2.5, 3.5)) |
| 708 } |
| 709 } |
| 710 func BenchmarkCos(b *testing.B) { |
| 711 for i := 0; i < b.N; i++ { |
| 712 Cos(cmplx(2.5, 3.5)) |
| 713 } |
| 714 } |
| 715 func BenchmarkCosh(b *testing.B) { |
| 716 for i := 0; i < b.N; i++ { |
| 717 Cosh(cmplx(2.5, 3.5)) |
| 718 } |
| 719 } |
| 720 func BenchmarkExp(b *testing.B) { |
| 721 for i := 0; i < b.N; i++ { |
| 722 Exp(cmplx(2.5, 3.5)) |
| 723 } |
| 724 } |
| 725 func BenchmarkLog(b *testing.B) { |
| 726 for i := 0; i < b.N; i++ { |
| 727 Log(cmplx(2.5, 3.5)) |
| 728 } |
| 729 } |
| 730 func BenchmarkLog10(b *testing.B) { |
| 731 for i := 0; i < b.N; i++ { |
| 732 Log10(cmplx(2.5, 3.5)) |
| 733 } |
| 734 } |
| 735 func BenchmarkPhase(b *testing.B) { |
| 736 for i := 0; i < b.N; i++ { |
| 737 Phase(cmplx(2.5, 3.5)) |
| 738 } |
| 739 } |
| 740 func BenchmarkPolar(b *testing.B) { |
| 741 for i := 0; i < b.N; i++ { |
| 742 Polar(cmplx(2.5, 3.5)) |
| 743 } |
| 744 } |
| 745 func BenchmarkPow(b *testing.B) { |
| 746 for i := 0; i < b.N; i++ { |
| 747 Pow(cmplx(2.5, 3.5), cmplx(2.5, 3.5)) |
| 748 } |
| 749 } |
| 750 func BenchmarkRect(b *testing.B) { |
| 751 for i := 0; i < b.N; i++ { |
| 752 Rect(2.5, 1.5) |
| 753 } |
| 754 } |
| 755 func BenchmarkSin(b *testing.B) { |
| 756 for i := 0; i < b.N; i++ { |
| 757 Sin(cmplx(2.5, 3.5)) |
| 758 } |
| 759 } |
| 760 func BenchmarkSinh(b *testing.B) { |
| 761 for i := 0; i < b.N; i++ { |
| 762 Sinh(cmplx(2.5, 3.5)) |
| 763 } |
| 764 } |
| 765 func BenchmarkSqrt(b *testing.B) { |
| 766 for i := 0; i < b.N; i++ { |
| 767 Sqrt(cmplx(2.5, 3.5)) |
| 768 } |
| 769 } |
| 770 func BenchmarkTan(b *testing.B) { |
| 771 for i := 0; i < b.N; i++ { |
| 772 Tan(cmplx(2.5, 3.5)) |
| 773 } |
| 774 } |
| 775 func BenchmarkTanh(b *testing.B) { |
| 776 for i := 0; i < b.N; i++ { |
| 777 Tanh(cmplx(2.5, 3.5)) |
| 778 } |
| 779 } |
OLD | NEW |