File indexing completed on 2024-05-12 16:35:59

0001 /* This file is part of the KDE project
0002    Copyright 2007 Ariya Hidayat <ariya@kde.org>
0003 
0004    This library is free software; you can redistribute it and/or
0005    modify it under the terms of the GNU Library General Public
0006    License as published by the Free Software Foundation; only
0007    version 2 of the License.
0008 
0009    This library is distributed in the hope that it will be useful,
0010    but WITHOUT ANY WARRANTY; without even the implied warranty of
0011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012    Library General Public License for more details.
0013 
0014    You should have received a copy of the GNU Library General Public License
0015    along with this library; see the file COPYING.LIB.  If not, write to
0016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0017    Boston, MA 02110-1301, USA.
0018 */
0019 #include "TestTrigFunctions.h"
0020 
0021 #include "TestKspreadCommon.h"
0022 
0023 void TestTrigFunctions::initTestCase()
0024 {
0025     FunctionModuleRegistry::instance()->loadFunctionModules();
0026 }
0027 
0028 // NOTE: we do not compare the numbers _exactly_ because it is difficult
0029 // to get one "true correct" expected values for the functions due to:
0030 //  - different algorithms among spreadsheet programs
0031 //  - precision limitation of floating-point number representation
0032 //  - accuracy problem due to propagated error in the implementation
0033 #define CHECK_EVAL(x,y) QCOMPARE(evaluate(x),RoundNumber(y))
0034 #define ROUND(x) (roundf(1e10 * x) / 1e10)
0035 
0036 // round to get at most 10-digits number
0037 static Value RoundNumber(double f)
0038 {
0039     return Value(ROUND(f));
0040 }
0041 
0042 // round to get at most 10-digits number
0043 static Value RoundNumber(const Value& v)
0044 {
0045     if (v.isNumber()) {
0046         double d = numToDouble(v.asFloat());
0047         if (fabs(d) < DBL_EPSILON)
0048             d = 0.0;
0049         return Value(ROUND(d));
0050     } else
0051         return v;
0052 }
0053 
0054 Value TestTrigFunctions::evaluate(const QString& formula)
0055 {
0056     Formula f;
0057     QString expr = formula;
0058     if (expr[0] != '=')
0059         expr.prepend('=');
0060     f.setExpression(expr);
0061     Value result = f.eval();
0062 
0063 #if 0
0064     // this magically generates the CHECKs
0065     printf("  CHECK_EVAL( \"%s\",  %15g) );\n", qPrintable(formula), result.asFloat());
0066 #endif
0067 
0068     return RoundNumber(result);
0069 }
0070 
0071 void TestTrigFunctions::testCOS()
0072 {
0073     // some trivial cases
0074     CHECK_EVAL("COS(0)", 1);
0075     CHECK_EVAL("COS(PI()/2)", 0);
0076     CHECK_EVAL("COS(PI())", -1);
0077     CHECK_EVAL("COS(-PI()/2)", 0);
0078 
0079     // 128 points in a circle
0080     CHECK_EVAL("COS(   0*2*PI()/128 )", 1.000000000000000);
0081     CHECK_EVAL("COS(   1*2*PI()/128 )", 0.998795456205172);
0082     CHECK_EVAL("COS(   2*2*PI()/128 )", 0.995184726672197);
0083     CHECK_EVAL("COS(   3*2*PI()/128 )", 0.989176509964781);
0084     CHECK_EVAL("COS(   4*2*PI()/128 )", 0.980785280403230);
0085     CHECK_EVAL("COS(   5*2*PI()/128 )", 0.970031253194544);
0086     CHECK_EVAL("COS(   6*2*PI()/128 )", 0.956940335732209);
0087     CHECK_EVAL("COS(   7*2*PI()/128 )", 0.941544065183021);
0088     CHECK_EVAL("COS(   8*2*PI()/128 )", 0.923879532511287);
0089     CHECK_EVAL("COS(   9*2*PI()/128 )", 0.903989293123443);
0090     CHECK_EVAL("COS(  10*2*PI()/128 )", 0.881921264348355);
0091     CHECK_EVAL("COS(  11*2*PI()/128 )", 0.857728610000272);
0092     CHECK_EVAL("COS(  12*2*PI()/128 )", 0.831469612302545);
0093     CHECK_EVAL("COS(  13*2*PI()/128 )", 0.803207531480645);
0094     CHECK_EVAL("COS(  14*2*PI()/128 )", 0.773010453362737);
0095     CHECK_EVAL("COS(  15*2*PI()/128 )", 0.740951125354959);
0096     CHECK_EVAL("COS(  16*2*PI()/128 )", 0.707106781186548);
0097     CHECK_EVAL("COS(  17*2*PI()/128 )", 0.671558954847018);
0098     CHECK_EVAL("COS(  18*2*PI()/128 )", 0.634393284163645);
0099     CHECK_EVAL("COS(  19*2*PI()/128 )", 0.595699304492433);
0100     CHECK_EVAL("COS(  20*2*PI()/128 )", 0.555570233019602);
0101     CHECK_EVAL("COS(  21*2*PI()/128 )", 0.514102744193222);
0102     CHECK_EVAL("COS(  22*2*PI()/128 )", 0.471396736825998);
0103     CHECK_EVAL("COS(  23*2*PI()/128 )", 0.427555093430282);
0104     CHECK_EVAL("COS(  24*2*PI()/128 )", 0.382683432365090);
0105     CHECK_EVAL("COS(  25*2*PI()/128 )", 0.336889853392220);
0106     CHECK_EVAL("COS(  26*2*PI()/128 )", 0.290284677254462);
0107     CHECK_EVAL("COS(  27*2*PI()/128 )", 0.242980179903264);
0108     CHECK_EVAL("COS(  28*2*PI()/128 )", 0.195090322016128);
0109     CHECK_EVAL("COS(  29*2*PI()/128 )", 0.146730474455362);
0110     CHECK_EVAL("COS(  30*2*PI()/128 )", 0.0980171403295608);
0111     CHECK_EVAL("COS(  31*2*PI()/128 )", 0.0490676743274181);
0112     CHECK_EVAL("COS(  32*2*PI()/128 )", 0.000000000000000);
0113     CHECK_EVAL("COS(  33*2*PI()/128 )", -0.0490676743274180);
0114     CHECK_EVAL("COS(  34*2*PI()/128 )", -0.0980171403295606);
0115     CHECK_EVAL("COS(  35*2*PI()/128 )", -0.146730474455362);
0116     CHECK_EVAL("COS(  36*2*PI()/128 )", -0.195090322016128);
0117     CHECK_EVAL("COS(  37*2*PI()/128 )", -0.242980179903264);
0118     CHECK_EVAL("COS(  38*2*PI()/128 )", -0.290284677254462);
0119     CHECK_EVAL("COS(  39*2*PI()/128 )", -0.336889853392220);
0120     CHECK_EVAL("COS(  40*2*PI()/128 )", -0.382683432365090);
0121     CHECK_EVAL("COS(  41*2*PI()/128 )", -0.427555093430282);
0122     CHECK_EVAL("COS(  42*2*PI()/128 )", -0.471396736825998);
0123     CHECK_EVAL("COS(  43*2*PI()/128 )", -0.514102744193222);
0124     CHECK_EVAL("COS(  44*2*PI()/128 )", -0.555570233019602);
0125     CHECK_EVAL("COS(  45*2*PI()/128 )", -0.595699304492433);
0126     CHECK_EVAL("COS(  46*2*PI()/128 )", -0.634393284163645);
0127     CHECK_EVAL("COS(  47*2*PI()/128 )", -0.671558954847018);
0128     CHECK_EVAL("COS(  48*2*PI()/128 )", -0.707106781186547);
0129     CHECK_EVAL("COS(  49*2*PI()/128 )", -0.740951125354959);
0130     CHECK_EVAL("COS(  50*2*PI()/128 )", -0.773010453362737);
0131     CHECK_EVAL("COS(  51*2*PI()/128 )", -0.803207531480645);
0132     CHECK_EVAL("COS(  52*2*PI()/128 )", -0.831469612302545);
0133     CHECK_EVAL("COS(  53*2*PI()/128 )", -0.857728610000272);
0134     CHECK_EVAL("COS(  54*2*PI()/128 )", -0.881921264348355);
0135     CHECK_EVAL("COS(  55*2*PI()/128 )", -0.903989293123443);
0136     CHECK_EVAL("COS(  56*2*PI()/128 )", -0.923879532511287);
0137     CHECK_EVAL("COS(  57*2*PI()/128 )", -0.941544065183021);
0138     CHECK_EVAL("COS(  58*2*PI()/128 )", -0.956940335732209);
0139     CHECK_EVAL("COS(  59*2*PI()/128 )", -0.970031253194544);
0140     CHECK_EVAL("COS(  60*2*PI()/128 )", -0.980785280403230);
0141     CHECK_EVAL("COS(  61*2*PI()/128 )", -0.989176509964781);
0142     CHECK_EVAL("COS(  62*2*PI()/128 )", -0.995184726672197);
0143     CHECK_EVAL("COS(  63*2*PI()/128 )", -0.998795456205172);
0144     CHECK_EVAL("COS(  64*2*PI()/128 )", -1.000000000000000);
0145     CHECK_EVAL("COS(  65*2*PI()/128 )", -0.998795456205172);
0146     CHECK_EVAL("COS(  66*2*PI()/128 )", -0.995184726672197);
0147     CHECK_EVAL("COS(  67*2*PI()/128 )", -0.989176509964781);
0148     CHECK_EVAL("COS(  68*2*PI()/128 )", -0.980785280403230);
0149     CHECK_EVAL("COS(  69*2*PI()/128 )", -0.970031253194544);
0150     CHECK_EVAL("COS(  70*2*PI()/128 )", -0.956940335732209);
0151     CHECK_EVAL("COS(  71*2*PI()/128 )", -0.941544065183021);
0152     CHECK_EVAL("COS(  72*2*PI()/128 )", -0.923879532511287);
0153     CHECK_EVAL("COS(  73*2*PI()/128 )", -0.903989293123443);
0154     CHECK_EVAL("COS(  74*2*PI()/128 )", -0.881921264348355);
0155     CHECK_EVAL("COS(  75*2*PI()/128 )", -0.857728610000272);
0156     CHECK_EVAL("COS(  76*2*PI()/128 )", -0.831469612302545);
0157     CHECK_EVAL("COS(  77*2*PI()/128 )", -0.803207531480645);
0158     CHECK_EVAL("COS(  78*2*PI()/128 )", -0.773010453362737);
0159     CHECK_EVAL("COS(  79*2*PI()/128 )", -0.740951125354959);
0160     CHECK_EVAL("COS(  80*2*PI()/128 )", -0.707106781186548);
0161     CHECK_EVAL("COS(  81*2*PI()/128 )", -0.671558954847019);
0162     CHECK_EVAL("COS(  82*2*PI()/128 )", -0.634393284163646);
0163     CHECK_EVAL("COS(  83*2*PI()/128 )", -0.595699304492433);
0164     CHECK_EVAL("COS(  84*2*PI()/128 )", -0.555570233019602);
0165     CHECK_EVAL("COS(  85*2*PI()/128 )", -0.514102744193222);
0166     CHECK_EVAL("COS(  86*2*PI()/128 )", -0.471396736825998);
0167     CHECK_EVAL("COS(  87*2*PI()/128 )", -0.427555093430282);
0168     CHECK_EVAL("COS(  88*2*PI()/128 )", -0.382683432365090);
0169     CHECK_EVAL("COS(  89*2*PI()/128 )", -0.336889853392220);
0170     CHECK_EVAL("COS(  90*2*PI()/128 )", -0.290284677254462);
0171     CHECK_EVAL("COS(  91*2*PI()/128 )", -0.242980179903264);
0172     CHECK_EVAL("COS(  92*2*PI()/128 )", -0.195090322016129);
0173     CHECK_EVAL("COS(  93*2*PI()/128 )", -0.146730474455362);
0174     CHECK_EVAL("COS(  94*2*PI()/128 )", -0.0980171403295605);
0175     CHECK_EVAL("COS(  95*2*PI()/128 )", -0.0490676743274180);
0176     CHECK_EVAL("COS(  96*2*PI()/128 )", -0.000000000000000);
0177     CHECK_EVAL("COS(  97*2*PI()/128 )", 0.0490676743274177);
0178     CHECK_EVAL("COS(  98*2*PI()/128 )", 0.0980171403295601);
0179     CHECK_EVAL("COS(  99*2*PI()/128 )", 0.146730474455362);
0180     CHECK_EVAL("COS( 100*2*PI()/128 )", 0.195090322016128);
0181     CHECK_EVAL("COS( 101*2*PI()/128 )", 0.242980179903264);
0182     CHECK_EVAL("COS( 102*2*PI()/128 )", 0.290284677254462);
0183     CHECK_EVAL("COS( 103*2*PI()/128 )", 0.336889853392220);
0184     CHECK_EVAL("COS( 104*2*PI()/128 )", 0.382683432365090);
0185     CHECK_EVAL("COS( 105*2*PI()/128 )", 0.427555093430282);
0186     CHECK_EVAL("COS( 106*2*PI()/128 )", 0.471396736825998);
0187     CHECK_EVAL("COS( 107*2*PI()/128 )", 0.514102744193222);
0188     CHECK_EVAL("COS( 108*2*PI()/128 )", 0.555570233019602);
0189     CHECK_EVAL("COS( 109*2*PI()/128 )", 0.595699304492433);
0190     CHECK_EVAL("COS( 110*2*PI()/128 )", 0.634393284163646);
0191     CHECK_EVAL("COS( 111*2*PI()/128 )", 0.671558954847018);
0192     CHECK_EVAL("COS( 112*2*PI()/128 )", 0.707106781186547);
0193     CHECK_EVAL("COS( 113*2*PI()/128 )", 0.740951125354959);
0194     CHECK_EVAL("COS( 114*2*PI()/128 )", 0.773010453362737);
0195     CHECK_EVAL("COS( 115*2*PI()/128 )", 0.803207531480645);
0196     CHECK_EVAL("COS( 116*2*PI()/128 )", 0.831469612302545);
0197     CHECK_EVAL("COS( 117*2*PI()/128 )", 0.857728610000272);
0198     CHECK_EVAL("COS( 118*2*PI()/128 )", 0.881921264348355);
0199     CHECK_EVAL("COS( 119*2*PI()/128 )", 0.903989293123443);
0200     CHECK_EVAL("COS( 120*2*PI()/128 )", 0.923879532511287);
0201     CHECK_EVAL("COS( 121*2*PI()/128 )", 0.941544065183021);
0202     CHECK_EVAL("COS( 122*2*PI()/128 )", 0.956940335732209);
0203     CHECK_EVAL("COS( 123*2*PI()/128 )", 0.970031253194544);
0204     CHECK_EVAL("COS( 124*2*PI()/128 )", 0.980785280403230);
0205     CHECK_EVAL("COS( 125*2*PI()/128 )", 0.989176509964781);
0206     CHECK_EVAL("COS( 126*2*PI()/128 )", 0.995184726672197);
0207     CHECK_EVAL("COS( 127*2*PI()/128 )", 0.998795456205172);
0208 
0209     // Cosinus needs to be a numeric value
0210     CHECK_EVAL("COS(raghu)", Value::errorVALUE());
0211     CHECK_EVAL("COS()", Value::errorVALUE());
0212 
0213     CHECK_EVAL("1+COS(0.2)", Value(1.980066578));
0214 }
0215 
0216 // hyperbolic cosine
0217 void TestTrigFunctions::testCOSH()
0218 {
0219     CHECK_EVAL("COSH(   0*PI()/64 )", 1.00000000000000);
0220     CHECK_EVAL("COSH(   1*PI()/64 )", 1.00120502763102);
0221     CHECK_EVAL("COSH(   2*PI()/64 )", 1.00482301470726);
0222     CHECK_EVAL("COSH(   3*PI()/64 )", 1.01086268077751);
0223     CHECK_EVAL("COSH(   4*PI()/64 )", 1.01933858177076);
0224     CHECK_EVAL("COSH(   5*PI()/64 )", 1.03027114507681);
0225     CHECK_EVAL("COSH(   6*PI()/64 )", 1.04368671877737);
0226     CHECK_EVAL("COSH(   7*PI()/64 )", 1.05961763514644);
0227     CHECK_EVAL("COSH(   8*PI()/64 )", 1.07810228857284);
0228     CHECK_EVAL("COSH(   9*PI()/64 )", 1.09918522809284);
0229     CHECK_EVAL("COSH(  10*PI()/64 )", 1.12291726475574);
0230     CHECK_EVAL("COSH(  11*PI()/64 )", 1.14935559408141);
0231     CHECK_EVAL("COSH(  12*PI()/64 )", 1.17856393390454);
0232     CHECK_EVAL("COSH(  13*PI()/64 )", 1.21061267793823);
0233     CHECK_EVAL("COSH(  14*PI()/64 )", 1.24557906542667);
0234     CHECK_EVAL("COSH(  15*PI()/64 )", 1.28354736729603);
0235     CHECK_EVAL("COSH(  16*PI()/64 )", 1.32460908925201);
0236     CHECK_EVAL("COSH(  17*PI()/64 )", 1.36886319231368);
0237     CHECK_EVAL("COSH(  18*PI()/64 )", 1.41641633131500);
0238     CHECK_EVAL("COSH(  19*PI()/64 )", 1.46738311194883);
0239     CHECK_EVAL("COSH(  20*PI()/64 )", 1.52188636697305);
0240     CHECK_EVAL("COSH(  21*PI()/64 )", 1.58005745224421);
0241     CHECK_EVAL("COSH(  22*PI()/64 )", 1.64203656329247);
0242     CHECK_EVAL("COSH(  23*PI()/64 )", 1.70797307320055);
0243     CHECK_EVAL("COSH(  24*PI()/64 )", 1.77802589260111);
0244     CHECK_EVAL("COSH(  25*PI()/64 )", 1.85236385266018);
0245     CHECK_EVAL("COSH(  26*PI()/64 )", 1.93116611196955);
0246     CHECK_EVAL("COSH(  27*PI()/64 )", 2.01462258832895);
0247     CHECK_EVAL("COSH(  28*PI()/64 )", 2.10293441645836);
0248     CHECK_EVAL("COSH(  29*PI()/64 )", 2.19631443274388);
0249     CHECK_EVAL("COSH(  30*PI()/64 )", 2.29498768818512);
0250     CHECK_EVAL("COSH(  31*PI()/64 )", 2.39919199078058);
0251     CHECK_EVAL("COSH(  32*PI()/64 )", 2.50917847865806);
0252     CHECK_EVAL("COSH(  33*PI()/64 )", 2.62521222533141);
0253     CHECK_EVAL("COSH(  34*PI()/64 )", 2.74757287854239);
0254     CHECK_EVAL("COSH(  35*PI()/64 )", 2.87655533422713);
0255     CHECK_EVAL("COSH(  36*PI()/64 )", 3.01247044723167);
0256     CHECK_EVAL("COSH(  37*PI()/64 )", 3.15564578048928);
0257     CHECK_EVAL("COSH(  38*PI()/64 )", 3.30642639446529);
0258     CHECK_EVAL("COSH(  39*PI()/64 )", 3.46517567877181);
0259     CHECK_EVAL("COSH(  40*PI()/64 )", 3.63227622795684);
0260     CHECK_EVAL("COSH(  41*PI()/64 )", 3.80813076357823);
0261     CHECK_EVAL("COSH(  42*PI()/64 )", 3.99316310478491);
0262     CHECK_EVAL("COSH(  43*PI()/64 )", 4.18781918974444);
0263     CHECK_EVAL("COSH(  44*PI()/64 )", 4.39256815037867);
0264     CHECK_EVAL("COSH(  45*PI()/64 )", 4.60790344299758);
0265     CHECK_EVAL("COSH(  46*PI()/64 )", 4.83434403755624);
0266     CHECK_EVAL("COSH(  47*PI()/64 )", 5.07243566840111);
0267     CHECK_EVAL("COSH(  48*PI()/64 )", 5.32275214951996);
0268     CHECK_EVAL("COSH(  49*PI()/64 )", 5.58589675746527);
0269     CHECK_EVAL("COSH(  50*PI()/64 )", 5.86250368528411);
0270     CHECK_EVAL("COSH(  51*PI()/64 )", 6.15323957095837);
0271     CHECK_EVAL("COSH(  52*PI()/64 )", 6.45880510403919);
0272     CHECK_EVAL("COSH(  53*PI()/64 )", 6.77993671434747);
0273     CHECK_EVAL("COSH(  54*PI()/64 )", 7.11740834681045);
0274     CHECK_EVAL("COSH(  55*PI()/64 )", 7.47203332671172);
0275     CHECK_EVAL("COSH(  56*PI()/64 )", 7.84466631985014);
0276     CHECK_EVAL("COSH(  57*PI()/64 )", 8.23620539233163);
0277     CHECK_EVAL("COSH(  58*PI()/64 )", 8.64759417495814);
0278     CHECK_EVAL("COSH(  59*PI()/64 )", 9.07982413742996);
0279     CHECK_EVAL("COSH(  60*PI()/64 )", 9.53393697784256);
0280     CHECK_EVAL("COSH(  61*PI()/64 )", 10.0110271332365);
0281     CHECK_EVAL("COSH(  62*PI()/64 )", 10.5122444172514);
0282     CHECK_EVAL("COSH(  63*PI()/64 )", 11.0387967912398);
0283 }
0284 
0285 void TestTrigFunctions::testPI()
0286 {
0287     CHECK_EVAL("PI()", 3.14159265358979);
0288     CHECK_EVAL("2*PI()", 6.28318530717959);
0289     CHECK_EVAL("3*PI()", 9.42477796076938);
0290     CHECK_EVAL("PI()/2", 1.57079632679490);
0291     CHECK_EVAL("PI()/PI()", 1.0);
0292     CHECK_EVAL("PI()/(2*PI())", 0.5);
0293     CHECK_EVAL("(2*PI())/(2*PI())", 1.0);
0294 }
0295 
0296 void TestTrigFunctions::testSIN()
0297 {
0298     // some trivial cases
0299     CHECK_EVAL("SIN(0)", 0);
0300     CHECK_EVAL("SIN(PI()/2)", 1);
0301     CHECK_EVAL("SIN(PI())", 0);
0302     CHECK_EVAL("SIN(-PI()/2)", -1);
0303 
0304     // 128 points in a circle
0305     CHECK_EVAL("SIN(   0*2*PI()/128 )", 0.000000000000000);
0306     CHECK_EVAL("SIN(   1*2*PI()/128 )", 0.049067674327418);
0307     CHECK_EVAL("SIN(   2*2*PI()/128 )", 0.0980171403295606);
0308     CHECK_EVAL("SIN(   3*2*PI()/128 )", 0.146730474455362);
0309     CHECK_EVAL("SIN(   4*2*PI()/128 )", 0.195090322016128);
0310     CHECK_EVAL("SIN(   5*2*PI()/128 )", 0.242980179903264);
0311     CHECK_EVAL("SIN(   6*2*PI()/128 )", 0.290284677254462);
0312     CHECK_EVAL("SIN(   7*2*PI()/128 )", 0.336889853392220);
0313     CHECK_EVAL("SIN(   8*2*PI()/128 )", 0.382683432365090);
0314     CHECK_EVAL("SIN(   9*2*PI()/128 )", 0.427555093430282);
0315     CHECK_EVAL("SIN(  10*2*PI()/128 )", 0.471396736825998);
0316     CHECK_EVAL("SIN(  11*2*PI()/128 )", 0.514102744193222);
0317     CHECK_EVAL("SIN(  12*2*PI()/128 )", 0.555570233019602);
0318     CHECK_EVAL("SIN(  13*2*PI()/128 )", 0.595699304492433);
0319     CHECK_EVAL("SIN(  14*2*PI()/128 )", 0.634393284163645);
0320     CHECK_EVAL("SIN(  15*2*PI()/128 )", 0.671558954847018);
0321     CHECK_EVAL("SIN(  16*2*PI()/128 )", 0.707106781186547);
0322     CHECK_EVAL("SIN(  17*2*PI()/128 )", 0.740951125354959);
0323     CHECK_EVAL("SIN(  18*2*PI()/128 )", 0.773010453362737);
0324     CHECK_EVAL("SIN(  19*2*PI()/128 )", 0.803207531480645);
0325     CHECK_EVAL("SIN(  20*2*PI()/128 )", 0.831469612302545);
0326     CHECK_EVAL("SIN(  21*2*PI()/128 )", 0.857728610000272);
0327     CHECK_EVAL("SIN(  22*2*PI()/128 )", 0.881921264348355);
0328     CHECK_EVAL("SIN(  23*2*PI()/128 )", 0.903989293123443);
0329     CHECK_EVAL("SIN(  24*2*PI()/128 )", 0.923879532511287);
0330     CHECK_EVAL("SIN(  25*2*PI()/128 )", 0.941544065183021);
0331     CHECK_EVAL("SIN(  26*2*PI()/128 )", 0.956940335732209);
0332     CHECK_EVAL("SIN(  27*2*PI()/128 )", 0.970031253194544);
0333     CHECK_EVAL("SIN(  28*2*PI()/128 )", 0.980785280403230);
0334     CHECK_EVAL("SIN(  29*2*PI()/128 )", 0.989176509964781);
0335     CHECK_EVAL("SIN(  30*2*PI()/128 )", 0.995184726672197);
0336     CHECK_EVAL("SIN(  31*2*PI()/128 )", 0.998795456205172);
0337     CHECK_EVAL("SIN(  32*2*PI()/128 )", 1.000000000000000);
0338     CHECK_EVAL("SIN(  33*2*PI()/128 )", 0.998795456205172);
0339     CHECK_EVAL("SIN(  34*2*PI()/128 )", 0.995184726672197);
0340     CHECK_EVAL("SIN(  35*2*PI()/128 )", 0.989176509964781);
0341     CHECK_EVAL("SIN(  36*2*PI()/128 )", 0.980785280403230);
0342     CHECK_EVAL("SIN(  37*2*PI()/128 )", 0.970031253194544);
0343     CHECK_EVAL("SIN(  38*2*PI()/128 )", 0.956940335732209);
0344     CHECK_EVAL("SIN(  39*2*PI()/128 )", 0.941544065183021);
0345     CHECK_EVAL("SIN(  40*2*PI()/128 )", 0.923879532511287);
0346     CHECK_EVAL("SIN(  41*2*PI()/128 )", 0.903989293123443);
0347     CHECK_EVAL("SIN(  42*2*PI()/128 )", 0.881921264348355);
0348     CHECK_EVAL("SIN(  43*2*PI()/128 )", 0.857728610000272);
0349     CHECK_EVAL("SIN(  44*2*PI()/128 )", 0.831469612302545);
0350     CHECK_EVAL("SIN(  45*2*PI()/128 )", 0.803207531480645);
0351     CHECK_EVAL("SIN(  46*2*PI()/128 )", 0.773010453362737);
0352     CHECK_EVAL("SIN(  47*2*PI()/128 )", 0.740951125354959);
0353     CHECK_EVAL("SIN(  48*2*PI()/128 )", 0.707106781186548);
0354     CHECK_EVAL("SIN(  49*2*PI()/128 )", 0.671558954847019);
0355     CHECK_EVAL("SIN(  50*2*PI()/128 )", 0.634393284163645);
0356     CHECK_EVAL("SIN(  51*2*PI()/128 )", 0.595699304492433);
0357     CHECK_EVAL("SIN(  52*2*PI()/128 )", 0.555570233019602);
0358     CHECK_EVAL("SIN(  53*2*PI()/128 )", 0.514102744193222);
0359     CHECK_EVAL("SIN(  54*2*PI()/128 )", 0.471396736825998);
0360     CHECK_EVAL("SIN(  55*2*PI()/128 )", 0.427555093430282);
0361     CHECK_EVAL("SIN(  56*2*PI()/128 )", 0.382683432365090);
0362     CHECK_EVAL("SIN(  57*2*PI()/128 )", 0.336889853392220);
0363     CHECK_EVAL("SIN(  58*2*PI()/128 )", 0.290284677254462);
0364     CHECK_EVAL("SIN(  59*2*PI()/128 )", 0.242980179903264);
0365     CHECK_EVAL("SIN(  60*2*PI()/128 )", 0.195090322016129);
0366     CHECK_EVAL("SIN(  61*2*PI()/128 )", 0.146730474455362);
0367     CHECK_EVAL("SIN(  62*2*PI()/128 )", 0.0980171403295608);
0368     CHECK_EVAL("SIN(  63*2*PI()/128 )", 0.049067674327418);
0369     CHECK_EVAL("SIN(  64*2*PI()/128 )", 0.000000000000000);
0370     CHECK_EVAL("SIN(  65*2*PI()/128 )", -0.0490676743274177);
0371     CHECK_EVAL("SIN(  66*2*PI()/128 )", -0.0980171403295606);
0372     CHECK_EVAL("SIN(  67*2*PI()/128 )", -0.146730474455362);
0373     CHECK_EVAL("SIN(  68*2*PI()/128 )", -0.195090322016128);
0374     CHECK_EVAL("SIN(  69*2*PI()/128 )", -0.242980179903264);
0375     CHECK_EVAL("SIN(  70*2*PI()/128 )", -0.290284677254462);
0376     CHECK_EVAL("SIN(  71*2*PI()/128 )", -0.336889853392220);
0377     CHECK_EVAL("SIN(  72*2*PI()/128 )", -0.382683432365090);
0378     CHECK_EVAL("SIN(  73*2*PI()/128 )", -0.427555093430282);
0379     CHECK_EVAL("SIN(  74*2*PI()/128 )", -0.471396736825998);
0380     CHECK_EVAL("SIN(  75*2*PI()/128 )", -0.514102744193222);
0381     CHECK_EVAL("SIN(  76*2*PI()/128 )", -0.555570233019602);
0382     CHECK_EVAL("SIN(  77*2*PI()/128 )", -0.595699304492433);
0383     CHECK_EVAL("SIN(  78*2*PI()/128 )", -0.634393284163645);
0384     CHECK_EVAL("SIN(  79*2*PI()/128 )", -0.671558954847018);
0385     CHECK_EVAL("SIN(  80*2*PI()/128 )", -0.707106781186547);
0386     CHECK_EVAL("SIN(  81*2*PI()/128 )", -0.740951125354959);
0387     CHECK_EVAL("SIN(  82*2*PI()/128 )", -0.773010453362737);
0388     CHECK_EVAL("SIN(  83*2*PI()/128 )", -0.803207531480645);
0389     CHECK_EVAL("SIN(  84*2*PI()/128 )", -0.831469612302545);
0390     CHECK_EVAL("SIN(  85*2*PI()/128 )", -0.857728610000272);
0391     CHECK_EVAL("SIN(  86*2*PI()/128 )", -0.881921264348355);
0392     CHECK_EVAL("SIN(  87*2*PI()/128 )", -0.903989293123443);
0393     CHECK_EVAL("SIN(  88*2*PI()/128 )", -0.923879532511287);
0394     CHECK_EVAL("SIN(  89*2*PI()/128 )", -0.941544065183021);
0395     CHECK_EVAL("SIN(  90*2*PI()/128 )", -0.956940335732209);
0396     CHECK_EVAL("SIN(  91*2*PI()/128 )", -0.970031253194544);
0397     CHECK_EVAL("SIN(  92*2*PI()/128 )", -0.980785280403230);
0398     CHECK_EVAL("SIN(  93*2*PI()/128 )", -0.989176509964781);
0399     CHECK_EVAL("SIN(  94*2*PI()/128 )", -0.995184726672197);
0400     CHECK_EVAL("SIN(  95*2*PI()/128 )", -0.998795456205172);
0401     CHECK_EVAL("SIN(  96*2*PI()/128 )", -1.000000000000000);
0402     CHECK_EVAL("SIN(  97*2*PI()/128 )", -0.998795456205172);
0403     CHECK_EVAL("SIN(  98*2*PI()/128 )", -0.995184726672197);
0404     CHECK_EVAL("SIN(  99*2*PI()/128 )", -0.989176509964781);
0405     CHECK_EVAL("SIN( 100*2*PI()/128 )", -0.980785280403230);
0406     CHECK_EVAL("SIN( 101*2*PI()/128 )", -0.970031253194544);
0407     CHECK_EVAL("SIN( 102*2*PI()/128 )", -0.956940335732209);
0408     CHECK_EVAL("SIN( 103*2*PI()/128 )", -0.941544065183021);
0409     CHECK_EVAL("SIN( 104*2*PI()/128 )", -0.923879532511287);
0410     CHECK_EVAL("SIN( 105*2*PI()/128 )", -0.903989293123443);
0411     CHECK_EVAL("SIN( 106*2*PI()/128 )", -0.881921264348355);
0412     CHECK_EVAL("SIN( 107*2*PI()/128 )", -0.857728610000272);
0413     CHECK_EVAL("SIN( 108*2*PI()/128 )", -0.831469612302545);
0414     CHECK_EVAL("SIN( 109*2*PI()/128 )", -0.803207531480645);
0415     CHECK_EVAL("SIN( 110*2*PI()/128 )", -0.773010453362737);
0416     CHECK_EVAL("SIN( 111*2*PI()/128 )", -0.740951125354959);
0417     CHECK_EVAL("SIN( 112*2*PI()/128 )", -0.707106781186548);
0418     CHECK_EVAL("SIN( 113*2*PI()/128 )", -0.671558954847019);
0419     CHECK_EVAL("SIN( 114*2*PI()/128 )", -0.634393284163646);
0420     CHECK_EVAL("SIN( 115*2*PI()/128 )", -0.595699304492433);
0421     CHECK_EVAL("SIN( 116*2*PI()/128 )", -0.555570233019602);
0422     CHECK_EVAL("SIN( 117*2*PI()/128 )", -0.514102744193222);
0423     CHECK_EVAL("SIN( 118*2*PI()/128 )", -0.471396736825998);
0424     CHECK_EVAL("SIN( 119*2*PI()/128 )", -0.427555093430283);
0425     CHECK_EVAL("SIN( 120*2*PI()/128 )", -0.382683432365090);
0426     CHECK_EVAL("SIN( 121*2*PI()/128 )", -0.336889853392220);
0427     CHECK_EVAL("SIN( 122*2*PI()/128 )", -0.290284677254462);
0428     CHECK_EVAL("SIN( 123*2*PI()/128 )", -0.242980179903264);
0429     CHECK_EVAL("SIN( 124*2*PI()/128 )", -0.195090322016129);
0430     CHECK_EVAL("SIN( 125*2*PI()/128 )", -0.146730474455362);
0431     CHECK_EVAL("SIN( 126*2*PI()/128 )", -0.0980171403295605);
0432     CHECK_EVAL("SIN( 127*2*PI()/128 )", -0.0490676743274181);
0433 }
0434 
0435 // hyperbolic sine
0436 void TestTrigFunctions::testSINH()
0437 {
0438     CHECK_EVAL("SINH(   0*PI()/64 )", 0.00000000000000);
0439     CHECK_EVAL("SINH(   1*PI()/64 )", 0.0491071008473137);
0440     CHECK_EVAL("SINH(   2*PI()/64 )", 0.0983325525214279);
0441     CHECK_EVAL("SINH(   3*PI()/64 )", 0.147794991081176);
0442     CHECK_EVAL("SINH(   4*PI()/64 )", 0.197613623736882);
0443     CHECK_EVAL("SINH(   5*PI()/64 )", 0.247908516146325);
0444     CHECK_EVAL("SINH(   6*PI()/64 )", 0.298800881779610);
0445     CHECK_EVAL("SINH(   7*PI()/64 )", 0.350413374050329);
0446     CHECK_EVAL("SINH(   8*PI()/64 )", 0.402870381917066);
0447     CHECK_EVAL("SINH(   9*PI()/64 )", 0.456298329667662);
0448     CHECK_EVAL("SINH(  10*PI()/64 )", 0.510825981608731);
0449     CHECK_EVAL("SINH(  11*PI()/64 )", 0.566584752394762);
0450     CHECK_EVAL("SINH(  12*PI()/64 )", 0.623709023744691);
0451     CHECK_EVAL("SINH(  13*PI()/64 )", 0.682336468309276);
0452     CHECK_EVAL("SINH(  14*PI()/64 )", 0.742608381469790);
0453     CHECK_EVAL("SINH(  15*PI()/64 )", 0.804670021867697);
0454     CHECK_EVAL("SINH(  16*PI()/64 )", 0.868670961486010);
0455     CHECK_EVAL("SINH(  17*PI()/64 )", 0.934765446126030);
0456     CHECK_EVAL("SINH(  18*PI()/64 )", 1.00311276714826);
0457     CHECK_EVAL("SINH(  19*PI()/64 )", 1.07387764537337);
0458     CHECK_EVAL("SINH(  20*PI()/64 )", 1.14723062806849);
0459     CHECK_EVAL("SINH(  21*PI()/64 )", 1.22334849997556);
0460     CHECK_EVAL("SINH(  22*PI()/64 )", 1.30241470937230);
0461     CHECK_EVAL("SINH(  23*PI()/64 )", 1.38461981019272);
0462     CHECK_EVAL("SINH(  24*PI()/64 )", 1.47016192127261);
0463     CHECK_EVAL("SINH(  25*PI()/64 )", 1.55924720382691);
0464     CHECK_EVAL("SINH(  26*PI()/64 )", 1.65209035830962);
0465     CHECK_EVAL("SINH(  27*PI()/64 )", 1.74891514185372);
0466     CHECK_EVAL("SINH(  28*PI()/64 )", 1.84995490753831);
0467     CHECK_EVAL("SINH(  29*PI()/64 )", 1.95545316678234);
0468     CHECK_EVAL("SINH(  30*PI()/64 )", 2.06566417622064);
0469     CHECK_EVAL("SINH(  31*PI()/64 )", 2.18085355047644);
0470     CHECK_EVAL("SINH(  32*PI()/64 )", 2.30129890230729);
0471     CHECK_EVAL("SINH(  33*PI()/64 )", 2.42729051166718);
0472     CHECK_EVAL("SINH(  34*PI()/64 )", 2.55913202529720);
0473     CHECK_EVAL("SINH(  35*PI()/64 )", 2.69714118853103);
0474     CHECK_EVAL("SINH(  36*PI()/64 )", 2.84165061107874);
0475     CHECK_EVAL("SINH(  37*PI()/64 )", 2.99300856863454);
0476     CHECK_EVAL("SINH(  38*PI()/64 )", 3.15157984224051);
0477     CHECK_EVAL("SINH(  39*PI()/64 )", 3.31774659742900);
0478     CHECK_EVAL("SINH(  40*PI()/64 )", 3.49190930526272);
0479     CHECK_EVAL("SINH(  41*PI()/64 )", 3.67448770749215);
0480     CHECK_EVAL("SINH(  42*PI()/64 )", 3.86592182815631);
0481     CHECK_EVAL("SINH(  43*PI()/64 )", 4.06667303406504);
0482     CHECK_EVAL("SINH(  44*PI()/64 )", 4.27722514671850);
0483     CHECK_EVAL("SINH(  45*PI()/64 )", 4.49808560834373);
0484     CHECK_EVAL("SINH(  46*PI()/64 )", 4.72978670485843);
0485     CHECK_EVAL("SINH(  47*PI()/64 )", 4.97288684870950);
0486     CHECK_EVAL("SINH(  48*PI()/64 )", 5.22797192467780);
0487     CHECK_EVAL("SINH(  49*PI()/64 )", 5.49565670189296);
0488     CHECK_EVAL("SINH(  50*PI()/64 )", 5.77658631546086);
0489     CHECK_EVAL("SINH(  51*PI()/64 )", 6.07143782127495);
0490     CHECK_EVAL("SINH(  52*PI()/64 )", 6.38092182775833);
0491     CHECK_EVAL("SINH(  53*PI()/64 )", 6.70578420846934);
0492     CHECK_EVAL("SINH(  54*PI()/64 )", 7.04680789969806);
0493     CHECK_EVAL("SINH(  55*PI()/64 )", 7.40481478738601);
0494     CHECK_EVAL("SINH(  56*PI()/64 )", 7.78066768791671);
0495     CHECK_EVAL("SINH(  57*PI()/64 )", 8.17527242755082);
0496     CHECK_EVAL("SINH(  58*PI()/64 )", 8.58958002551754);
0497     CHECK_EVAL("SINH(  59*PI()/64 )", 9.02458898602345);
0498     CHECK_EVAL("SINH(  60*PI()/64 )", 9.48134770470283);
0499     CHECK_EVAL("SINH(  61*PI()/64 )", 9.96095699530914);
0500     CHECK_EVAL("SINH(  62*PI()/64 )", 10.4645727427369);
0501     CHECK_EVAL("SINH(  63*PI()/64 )", 10.9934086887683);
0502 }
0503 
0504 void TestTrigFunctions::testTAN()
0505 {
0506     // some trivial cases
0507     CHECK_EVAL("TAN(0)", 0);
0508     CHECK_EVAL("TAN(PI()/4)", 1);
0509     CHECK_EVAL("TAN(PI())", 0);
0510     CHECK_EVAL("TAN(-PI()/4)", -1);
0511 
0512     // 128 points in a circle, except where the result is infinity
0513     CHECK_EVAL("TAN(   0*2*PI()/128 )", 0.000000000000000);
0514     CHECK_EVAL("TAN(   1*2*PI()/128 )", 0.0491268497694673);
0515     CHECK_EVAL("TAN(   2*2*PI()/128 )", 0.0984914033571642);
0516     CHECK_EVAL("TAN(   3*2*PI()/128 )", 0.148335987538347);
0517     CHECK_EVAL("TAN(   4*2*PI()/128 )", 0.198912367379658);
0518     CHECK_EVAL("TAN(   5*2*PI()/128 )", 0.250486960191305);
0519     CHECK_EVAL("TAN(   6*2*PI()/128 )", 0.303346683607342);
0520     CHECK_EVAL("TAN(   7*2*PI()/128 )", 0.357805721314524);
0521     CHECK_EVAL("TAN(   8*2*PI()/128 )", 0.414213562373095);
0522     CHECK_EVAL("TAN(   9*2*PI()/128 )", 0.472964775891320);
0523     CHECK_EVAL("TAN(  10*2*PI()/128 )", 0.534511135950792);
0524     CHECK_EVAL("TAN(  11*2*PI()/128 )", 0.599376933681924);
0525     CHECK_EVAL("TAN(  12*2*PI()/128 )", 0.668178637919299);
0526     CHECK_EVAL("TAN(  13*2*PI()/128 )", 0.741650546272035);
0527     CHECK_EVAL("TAN(  14*2*PI()/128 )", 0.820678790828660);
0528     CHECK_EVAL("TAN(  15*2*PI()/128 )", 0.906347169019147);
0529     CHECK_EVAL("TAN(  16*2*PI()/128 )", 1.000000000000000);
0530     CHECK_EVAL("TAN(  17*2*PI()/128 )", 1.103329975733476);
0531     CHECK_EVAL("TAN(  18*2*PI()/128 )", 1.218503525587976);
0532     CHECK_EVAL("TAN(  19*2*PI()/128 )", 1.348343913486720);
0533     CHECK_EVAL("TAN(  20*2*PI()/128 )", 1.496605762665489);
0534     CHECK_EVAL("TAN(  21*2*PI()/128 )", 1.668399205583507);
0535     CHECK_EVAL("TAN(  22*2*PI()/128 )", 1.870868411789389);
0536     CHECK_EVAL("TAN(  23*2*PI()/128 )", 2.114322357548640);
0537     CHECK_EVAL("TAN(  24*2*PI()/128 )", 2.414213562373095);
0538     CHECK_EVAL("TAN(  25*2*PI()/128 )", 2.794812772490477);
0539     CHECK_EVAL("TAN(  26*2*PI()/128 )", 3.296558208938321);
0540     CHECK_EVAL("TAN(  27*2*PI()/128 )", 3.992223783770083);
0541     CHECK_EVAL("TAN(  28*2*PI()/128 )", 5.027339492125846);
0542     CHECK_EVAL("TAN(  29*2*PI()/128 )", 6.741452405414988);
0543     CHECK_EVAL("TAN(  30*2*PI()/128 )", 10.153170387608842);
0544     CHECK_EVAL("TAN(  31*2*PI()/128 )", 20.355467624987138);
0545     CHECK_EVAL("TAN(  33*2*PI()/128 )", -20.355467624987192);
0546     CHECK_EVAL("TAN(  34*2*PI()/128 )", -10.153170387608855);
0547     CHECK_EVAL("TAN(  35*2*PI()/128 )", -6.741452405414994);
0548     CHECK_EVAL("TAN(  36*2*PI()/128 )", -5.027339492125850);
0549     CHECK_EVAL("TAN(  37*2*PI()/128 )", -3.992223783770084);
0550     CHECK_EVAL("TAN(  38*2*PI()/128 )", -3.296558208938323);
0551     CHECK_EVAL("TAN(  39*2*PI()/128 )", -2.794812772490478);
0552     CHECK_EVAL("TAN(  40*2*PI()/128 )", -2.4142135623731);
0553     CHECK_EVAL("TAN(  41*2*PI()/128 )", -2.114322357548642);
0554     CHECK_EVAL("TAN(  42*2*PI()/128 )", -1.870868411789389);
0555     CHECK_EVAL("TAN(  43*2*PI()/128 )", -1.668399205583508);
0556     CHECK_EVAL("TAN(  44*2*PI()/128 )", -1.496605762665490);
0557     CHECK_EVAL("TAN(  45*2*PI()/128 )", -1.348343913486720);
0558     CHECK_EVAL("TAN(  46*2*PI()/128 )", -1.218503525587977);
0559     CHECK_EVAL("TAN(  47*2*PI()/128 )", -1.103329975733476);
0560     CHECK_EVAL("TAN(  48*2*PI()/128 )", -1.000000000000000);
0561     CHECK_EVAL("TAN(  49*2*PI()/128 )", -0.906347169019148);
0562     CHECK_EVAL("TAN(  50*2*PI()/128 )", -0.820678790828660);
0563     CHECK_EVAL("TAN(  51*2*PI()/128 )", -0.741650546272036);
0564     CHECK_EVAL("TAN(  52*2*PI()/128 )", -0.668178637919299);
0565     CHECK_EVAL("TAN(  53*2*PI()/128 )", -0.599376933681924);
0566     CHECK_EVAL("TAN(  54*2*PI()/128 )", -0.534511135950792);
0567     CHECK_EVAL("TAN(  55*2*PI()/128 )", -0.472964775891320);
0568     CHECK_EVAL("TAN(  56*2*PI()/128 )", -0.414213562373095);
0569     CHECK_EVAL("TAN(  57*2*PI()/128 )", -0.357805721314524);
0570     CHECK_EVAL("TAN(  58*2*PI()/128 )", -0.303346683607342);
0571     CHECK_EVAL("TAN(  59*2*PI()/128 )", -0.250486960191306);
0572     CHECK_EVAL("TAN(  60*2*PI()/128 )", -0.198912367379658);
0573     CHECK_EVAL("TAN(  61*2*PI()/128 )", -0.148335987538347);
0574     CHECK_EVAL("TAN(  62*2*PI()/128 )", -0.0984914033571645);
0575     CHECK_EVAL("TAN(  63*2*PI()/128 )", -0.0491268497694672);
0576     CHECK_EVAL("TAN(  64*2*PI()/128 )", -0.000000000000000);
0577     CHECK_EVAL("TAN(  65*2*PI()/128 )", 0.049126849769467);
0578     CHECK_EVAL("TAN(  66*2*PI()/128 )", 0.0984914033571642);
0579     CHECK_EVAL("TAN(  67*2*PI()/128 )", 0.148335987538347);
0580     CHECK_EVAL("TAN(  68*2*PI()/128 )", 0.198912367379658);
0581     CHECK_EVAL("TAN(  69*2*PI()/128 )", 0.250486960191305);
0582     CHECK_EVAL("TAN(  70*2*PI()/128 )", 0.303346683607342);
0583     CHECK_EVAL("TAN(  71*2*PI()/128 )", 0.357805721314524);
0584     CHECK_EVAL("TAN(  72*2*PI()/128 )", 0.414213562373095);
0585     CHECK_EVAL("TAN(  73*2*PI()/128 )", 0.472964775891320);
0586     CHECK_EVAL("TAN(  74*2*PI()/128 )", 0.534511135950792);
0587     CHECK_EVAL("TAN(  75*2*PI()/128 )", 0.599376933681923);
0588     CHECK_EVAL("TAN(  76*2*PI()/128 )", 0.668178637919298);
0589     CHECK_EVAL("TAN(  77*2*PI()/128 )", 0.741650546272035);
0590     CHECK_EVAL("TAN(  78*2*PI()/128 )", 0.820678790828660);
0591     CHECK_EVAL("TAN(  79*2*PI()/128 )", 0.906347169019147);
0592     CHECK_EVAL("TAN(  80*2*PI()/128 )", 1.000000000000000);
0593     CHECK_EVAL("TAN(  81*2*PI()/128 )", 1.103329975733475);
0594     CHECK_EVAL("TAN(  82*2*PI()/128 )", 1.218503525587975);
0595     CHECK_EVAL("TAN(  83*2*PI()/128 )", 1.348343913486721);
0596     CHECK_EVAL("TAN(  84*2*PI()/128 )", 1.496605762665489);
0597     CHECK_EVAL("TAN(  85*2*PI()/128 )", 1.668399205583507);
0598     CHECK_EVAL("TAN(  86*2*PI()/128 )", 1.870868411789388);
0599     CHECK_EVAL("TAN(  87*2*PI()/128 )", 2.114322357548638);
0600     CHECK_EVAL("TAN(  88*2*PI()/128 )", 2.414213562373091);
0601     CHECK_EVAL("TAN(  89*2*PI()/128 )", 2.794812772490478);
0602     CHECK_EVAL("TAN(  90*2*PI()/128 )", 3.296558208938320);
0603     CHECK_EVAL("TAN(  91*2*PI()/128 )", 3.992223783770080);
0604     CHECK_EVAL("TAN(  92*2*PI()/128 )", 5.027339492125837);
0605     CHECK_EVAL("TAN(  93*2*PI()/128 )", 6.741452405414962);
0606     CHECK_EVAL("TAN(  94*2*PI()/128 )", 10.1531703876089);
0607     CHECK_EVAL("TAN(  95*2*PI()/128 )", 20.3554676249872);
0608     CHECK_EVAL("TAN(  97*2*PI()/128 )", -20.3554676249873);
0609     CHECK_EVAL("TAN(  98*2*PI()/128 )", -10.1531703876089);
0610     CHECK_EVAL("TAN(  99*2*PI()/128 )", -6.741452405414980);
0611     CHECK_EVAL("TAN( 100*2*PI()/128 )", -5.027339492125847);
0612     CHECK_EVAL("TAN( 101*2*PI()/128 )", -3.992223783770086);
0613     CHECK_EVAL("TAN( 102*2*PI()/128 )", -3.296558208938324);
0614     CHECK_EVAL("TAN( 103*2*PI()/128 )", -2.794812772490481);
0615     CHECK_EVAL("TAN( 104*2*PI()/128 )", -2.414213562373094);
0616     CHECK_EVAL("TAN( 105*2*PI()/128 )", -2.114322357548640);
0617     CHECK_EVAL("TAN( 106*2*PI()/128 )", -1.870868411789390);
0618     CHECK_EVAL("TAN( 107*2*PI()/128 )", -1.668399205583508);
0619     CHECK_EVAL("TAN( 108*2*PI()/128 )", -1.496605762665490);
0620     CHECK_EVAL("TAN( 109*2*PI()/128 )", -1.348343913486722);
0621     CHECK_EVAL("TAN( 110*2*PI()/128 )", -1.218503525587976);
0622     CHECK_EVAL("TAN( 111*2*PI()/128 )", -1.103329975733476);
0623     CHECK_EVAL("TAN( 112*2*PI()/128 )", -1.000000000000000);
0624     CHECK_EVAL("TAN( 113*2*PI()/128 )", -0.906347169019148);
0625     CHECK_EVAL("TAN( 114*2*PI()/128 )", -0.820678790828661);
0626     CHECK_EVAL("TAN( 115*2*PI()/128 )", -0.741650546272035);
0627     CHECK_EVAL("TAN( 116*2*PI()/128 )", -0.668178637919299);
0628     CHECK_EVAL("TAN( 117*2*PI()/128 )", -0.599376933681924);
0629     CHECK_EVAL("TAN( 118*2*PI()/128 )", -0.534511135950792);
0630     CHECK_EVAL("TAN( 119*2*PI()/128 )", -0.472964775891321);
0631     CHECK_EVAL("TAN( 120*2*PI()/128 )", -0.414213562373096);
0632     CHECK_EVAL("TAN( 121*2*PI()/128 )", -0.357805721314524);
0633     CHECK_EVAL("TAN( 122*2*PI()/128 )", -0.303346683607343);
0634     CHECK_EVAL("TAN( 123*2*PI()/128 )", -0.250486960191306);
0635     CHECK_EVAL("TAN( 124*2*PI()/128 )", -0.198912367379658);
0636     CHECK_EVAL("TAN( 125*2*PI()/128 )", -0.148335987538348);
0637     CHECK_EVAL("TAN( 126*2*PI()/128 )", -0.0984914033571642);
0638     CHECK_EVAL("TAN( 127*2*PI()/128 )", -0.0491268497694673);
0639 }
0640 
0641 void TestTrigFunctions::testCSC()
0642 {
0643     CHECK_EVAL("CSC(1)", 1.1883951057781212);
0644 }
0645 
0646 void TestTrigFunctions::testCSCH()
0647 {
0648     CHECK_EVAL("CSCH(1)", 0.8509181282393215);
0649 }
0650 
0651 void TestTrigFunctions::testSEC()
0652 {
0653     CHECK_EVAL("SEC(1)", 1.850815717680925617);
0654 }
0655 
0656 void TestTrigFunctions::testSECH()
0657 {
0658     CHECK_EVAL("SECH(1)", 0.6480542736638853996);
0659 }
0660 
0661 QTEST_MAIN(TestTrigFunctions)