test.c

来自「math library from gnu」· C语言 代码 · 共 594 行 · 第 1/2 页

C
594
字号
  y = gsl_ldexp (1.0, 2);  y_expected = 4.000000;  gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp(1.0,2)");  y = gsl_ldexp (0.0, 2);  y_expected = 0.0;  gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp(0.0,2)");  y = gsl_ldexp (9.999999999999998890e-01, 1024);  y_expected = GSL_DBL_MAX;  gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp DBL_MAX");  y = gsl_ldexp (1e308, -2000);  y_expected = 8.7098098162172166755761e-295;  gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp(1e308,-2000)");  y = gsl_ldexp (GSL_DBL_MIN, 2000);  y_expected = 2.554675596204441378334779940e294;  gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp(DBL_MIN,2000)");  /* Test subnormals */  {    int i = 0;    volatile double x = GSL_DBL_MIN;    y_expected = 2.554675596204441378334779940e294;        while ((x /= 2) > 0)      {        i++ ;        y = gsl_ldexp (x, 2000 + i);        gsl_test_rel (y, y_expected, 1e-15, "gsl_ldexp(DBL_MIN/2**%d,%d)",i,2000+i);      }  }  /* Test for frexp */  y = gsl_frexp (0.0, &e);  y_expected = 0;  e_expected = 0;  gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(0) fraction");  gsl_test_int (e, e_expected, "gsl_frexp(0) exponent");  y = gsl_frexp (M_PI, &e);  y_expected = M_PI_4;  e_expected = 2;  gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(pi) fraction");  gsl_test_int (e, e_expected, "gsl_frexp(pi) exponent");  y = gsl_frexp (2.0, &e);  y_expected = 0.5;  e_expected = 2;  gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(2.0) fraction");  gsl_test_int (e, e_expected, "gsl_frexp(2.0) exponent");  y = gsl_frexp (1.0 / 4.0, &e);  y_expected = 0.5;  e_expected = -1;  gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(0.25) fraction");  gsl_test_int (e, e_expected, "gsl_frexp(0.25) exponent");  y = gsl_frexp (1.0 / 4.0 - 4.0 * GSL_DBL_EPSILON, &e);  y_expected = 0.999999999999996447;  e_expected = -2;  gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(0.25-eps) fraction");  gsl_test_int (e, e_expected, "gsl_frexp(0.25-eps) exponent");  y = gsl_frexp (GSL_DBL_MAX, &e);  y_expected = 9.999999999999998890e-01;  e_expected = 1024;  gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(DBL_MAX) fraction");  gsl_test_int (e, e_expected, "gsl_frexp(DBL_MAX) exponent");  y = gsl_frexp (-GSL_DBL_MAX, &e);  y_expected = -9.999999999999998890e-01;  e_expected = 1024;  gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(-DBL_MAX) fraction");  gsl_test_int (e, e_expected, "gsl_frexp(-DBL_MAX) exponent");  y = gsl_frexp (GSL_DBL_MIN, &e);  y_expected = 0.5;  e_expected = -1021;  gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(DBL_MIN) fraction");  gsl_test_int (e, e_expected, "gsl_frexp(DBL_MIN) exponent");  y = gsl_frexp (-GSL_DBL_MIN, &e);  y_expected = -0.5;  e_expected = -1021;  gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(-DBL_MIN) fraction");  gsl_test_int (e, e_expected, "gsl_frexp(-DBL_MIN) exponent");  /* Test subnormals */  {    int i = 0;    volatile double x = GSL_DBL_MIN;    y_expected = 0.5;    e_expected = -1021;        while ((x /= 2) > 0)      {        e_expected--;        i++ ;                y = gsl_frexp (x, &e);        gsl_test_rel (y, y_expected, 1e-15, "gsl_frexp(DBL_MIN/2**%d) fraction",i);        gsl_test_int (e, e_expected, "gsl_frexp(DBL_MIN/2**%d) exponent", i);      }  }  /* Test for approximate floating point comparison */  {    double x, y;    int i;    x = M_PI;    y = 22.0 / 7.0;    /* test the basic function */    for (i = 0; i < 10; i++)      {        double tol = pow (10, -i);        int res = gsl_fcmp (x, y, tol);        gsl_test_int (res, -(i >= 4), "gsl_fcmp(%.5f,%.5f,%g)", x, y, tol);      }    for (i = 0; i < 10; i++)      {        double tol = pow (10, -i);        int res = gsl_fcmp (y, x, tol);        gsl_test_int (res, (i >= 4), "gsl_fcmp(%.5f,%.5f,%g)", y, x, tol);      }  }    #if HAVE_IEEE_COMPARISONS  /* Test for isinf, isnan, finite */  {    double zero, one, inf, nan;    int s;    zero = 0.0;    one = 1.0;    inf = exp (1.0e10);    nan = inf / inf;    s = gsl_isinf (zero);    gsl_test_int (s, 0, "gsl_isinf(0)");    s = gsl_isinf (one);    gsl_test_int (s, 0, "gsl_isinf(1)");    s = gsl_isinf (inf);    gsl_test_int (s, 1, "gsl_isinf(inf)");    s = gsl_isinf (-inf);      gsl_test_int (s, -1, "gsl_isinf(-inf)");    s = gsl_isinf (nan);    gsl_test_int (s, 0, "gsl_isinf(nan)");    s = gsl_isnan (zero);    gsl_test_int (s, 0, "gsl_isnan(0)");    s = gsl_isnan (one);    gsl_test_int (s, 0, "gsl_isnan(1)");    s = gsl_isnan (inf);    gsl_test_int (s, 0, "gsl_isnan(inf)");    s = gsl_isnan (-inf);    gsl_test_int (s, 0, "gsl_isnan(-inf)");    s = gsl_isnan (nan);    gsl_test_int (s, 1, "gsl_isnan(nan)");    s = gsl_finite (zero);    gsl_test_int (s, 1, "gsl_finite(0)");    s = gsl_finite (one);    gsl_test_int (s, 1, "gsl_finite(1)");    s = gsl_finite (inf);    gsl_test_int (s, 0, "gsl_finite(inf)");    s = gsl_finite (-inf);    gsl_test_int (s, 0, "gsl_finite(-inf)");    s = gsl_finite (nan);    gsl_test_int (s, 0, "gsl_finite(nan)");  }#endif  {    double x = gsl_fdiv (2.0, 3.0);    gsl_test_rel (x, 2.0 / 3.0, 4 * GSL_DBL_EPSILON, "gsl_fdiv(2,3)");  }  /* Test constants in gsl_math.h */  {    double x = log(M_E);    gsl_test_rel (x, 1.0, 4 * GSL_DBL_EPSILON, "ln(M_E)");  }    {    double x=pow(2.0,M_LOG2E);    gsl_test_rel (x, exp(1.0), 4 * GSL_DBL_EPSILON, "2^M_LOG2E");  }   {    double x=pow(10.0,M_LOG10E);    gsl_test_rel (x, exp(1.0), 4 * GSL_DBL_EPSILON, "10^M_LOG10E");  }  {    double x=pow(M_SQRT2, 2.0);    gsl_test_rel (x, 2.0, 4 * GSL_DBL_EPSILON, "M_SQRT2^2");  }      {    double x=pow(M_SQRT1_2, 2.0);    gsl_test_rel (x, 1.0/2.0, 4 * GSL_DBL_EPSILON, "M_SQRT1_2");  }      {    double x=pow(M_SQRT3, 2.0);    gsl_test_rel (x, 3.0, 4 * GSL_DBL_EPSILON, "M_SQRT3^2");  }      {    double x = M_PI;    gsl_test_rel (x, 3.1415926535897932384626433832795, 4 * GSL_DBL_EPSILON, "M_PI");  }      {    double x = 2 * M_PI_2;    gsl_test_rel (x, M_PI, 4 * GSL_DBL_EPSILON, "2*M_PI_2");  }      {    double x = 4 * M_PI_4;    gsl_test_rel (x, M_PI, 4 * GSL_DBL_EPSILON, "4*M_PI_4");  }      {    double x = pow(M_SQRTPI, 2.0);    gsl_test_rel (x, M_PI, 4 * GSL_DBL_EPSILON, "M_SQRTPI^2");  }      {    double x = pow(M_2_SQRTPI, 2.0);    gsl_test_rel (x, 4/M_PI, 4 * GSL_DBL_EPSILON, "M_SQRTPI^2");  }      {    double x = M_1_PI;    gsl_test_rel (x, 1/M_PI, 4 * GSL_DBL_EPSILON, "M_1_SQRTPI");  }      {    double x = M_2_PI;    gsl_test_rel (x, 2.0/M_PI, 4 * GSL_DBL_EPSILON, "M_2_PI");  }      {    double x = exp(M_LN10);    gsl_test_rel (x, 10, 4 * GSL_DBL_EPSILON, "exp(M_LN10)");  }      {    double x = exp(M_LN2);    gsl_test_rel (x, 2, 4 * GSL_DBL_EPSILON, "exp(M_LN2)");  }      {    double x = exp(M_LNPI);    gsl_test_rel (x, M_PI, 4 * GSL_DBL_EPSILON, "exp(M_LNPI)");  }      {    double x = M_EULER;    gsl_test_rel (x, 0.5772156649015328606065120900824, 4 * GSL_DBL_EPSILON, "M_EULER");  }      exit (gsl_test_summary ());}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?