int main()

in src/jdk.incubator.vector/unix/native/libsleef/upstream/src/quad-tester/tester2simdqp.c [204:1098]


int main(int argc,char **argv)
{
  mpfr_set_default_prec(1024);
  xsrand(time(NULL) + (((int)getpid()) << 12));
  srandom(time(NULL) + (((int)getpid()) << 12));

  //

  const Sleef_quad oneQ = cast_q_str("1");
  const Sleef_quad oneEMinus300Q = cast_q_str("1e-300");
  const Sleef_quad oneEMinus10Q  = cast_q_str("1e-10");
  const Sleef_quad oneEPlus10Q   = cast_q_str("1e+10");
  const Sleef_quad oneEMinus100Q = cast_q_str("1e-100");
  const Sleef_quad oneEPlus100Q  = cast_q_str("1e+100");
  const Sleef_quad oneEMinus1000Q = cast_q_str("1e-1000");
  const Sleef_quad oneEPlus1000Q  = cast_q_str("1e+1000");
  const Sleef_quad quadMin = cast_q_str("3.36210314311209350626267781732175260e-4932");
  const Sleef_quad quadMax = cast_q_str("1.18973149535723176508575932662800702e+4932");
  const Sleef_quad quadDenormMin = cast_q_str("6.475175119438025110924438958227646552e-4966");
#if defined(ENABLEFLOAT128)
  const Sleef_quad M_PI_2Q  = cast_q_str("1.5707963267948966192313216916397514");
#endif

  //

  int cnt, ecnt = 0;
  VARGQUAD a0, a1, a2, a3;
  vdouble vd0 = vcast_vd_d(0);
  Sleef_quad q0, q1, q2, q3, t;
  mpfr_t frw, frx, fry, frz;
  mpfr_inits(frw, frx, fry, frz, NULL);

#if !(defined ENABLE_SVE || defined ENABLE_RVVM1 || defined ENABLE_RVVM2)
  memset(&a0, 0, sizeof(a0));
  memset(&a1, 0, sizeof(a1));
  memset(&a2, 0, sizeof(a2));
  memset(&a3, 0, sizeof(a3));
#endif

  for(cnt = 0;ecnt < 1000;cnt++) {
    int e = cnt % VECTLENDP;

    // In the following switch-case statement, I am trying to test
    // with numbers that tends to trigger bugs. Each case is executed
    // once in 128 times of loop execution.
    switch(cnt & 127) {
    case 127:
      q0 = nexttoward0q(quadMin, (xrand() & 63) - 31);
      q1 = rndf128x();
      q2 = rndf128x();
      break;
    case 126:
      q0 = nexttoward0q(quadMax, (xrand() & 31));
      q1 = rndf128x();
      q2 = rndf128x();
      break;
    case 125:
      q0 = nexttoward0q(quadDenormMin, -(int)(xrand() & 31));
      q1 = rndf128x();
      q2 = rndf128x();
      break;
#if defined(ENABLEFLOAT128)
    case 124:
      q0 = rndf128x();
      q1 = rndf128x();
      q1 += q0;
      q2 = rndf128x();
      break;
    case 123:
      q0 = rndf128x();
      q1 = rndf128x();
      q1 -= q0;
      q2 = rndf128x();
      break;
    case 122:
      q0 = rndf128x();
      q1 = rndf128x();
      q0 += q1;
      q2 = rndf128x();
      break;
    case 121:
      q0 = rndf128x();
      q1 = rndf128x();
      q0 -= q1;
      q2 = rndf128x();
      break;
    case 120:
      q0 = rndf128x();
      q1 = rndf128x();
      q1 += 1;
      q2 = rndf128x();
      break;
    case 119:
      q0 = rndf128x();
      q1 = rndf128x();
      q0 += 1;
      q2 = rndf128x();
      break;
    case 118:
      q0 = rndf128x();
      q1 = rndf128x();
      q0 += 1;
      q1 -= 1;
      q2 = rndf128x();
      break;
    case 117:
      q0 = rndf128x();
      q1 = rndf128x();
      q0 -= 1;
      q1 += 1;
      q2 = rndf128x();
      break;
    case 116:
      q0 = rndf128x();
      q1 = rndf128x();
      q1 += copysign(1, q1) * SLEEF_QUAD_MIN;
      q2 = rndf128x();
      break;
    case 115:
      q0 = rndf128x();
      q1 = rndf128x();
      q0 += copysign(1, q0) * SLEEF_QUAD_MIN;
      q2 = rndf128x();
      break;
    case 114:
      q0 = rndf128x();
      q1 = rndf128x();
      q1 -= copysign(1, q1) * SLEEF_QUAD_MIN;
      q2 = rndf128x();
      break;
    case 113:
      q0 = rndf128x();
      q1 = rndf128x();
      q0 -= copysign(1, q0) * SLEEF_QUAD_MIN;
      q2 = rndf128x();
      break;
#endif
    default:
      // Each case in the following switch-case statement is executed
      // once in 8 loops.
      switch(cnt & 7) {
      case 0:
        q0 = rndf128(oneEMinus10Q, oneEPlus10Q, 1);
        q1 = rndf128(oneEMinus10Q, oneEPlus10Q, 1);
        q2 = rndf128(oneEMinus10Q, oneEPlus10Q, 1);
        break;
      case 1:
        q0 = rndf128(oneEMinus100Q, oneEPlus100Q, 1);
        q1 = rndf128(oneEMinus100Q, oneEPlus100Q, 1);
        q2 = rndf128(oneEMinus100Q, oneEPlus100Q, 1);
        break;
      case 2:
        q0 = rndf128(oneEMinus1000Q, oneEPlus1000Q, 1);
        q1 = rndf128(oneEMinus1000Q, oneEPlus1000Q, 1);
        q2 = rndf128(oneEMinus1000Q, oneEPlus1000Q, 1);
        break;
      default:
        q0 = rndf128x();
        q1 = rndf128x();
        q2 = rndf128x();
        break;
      }
      break;
    }

    a0 = vset(a0, e, q0);
    a1 = vset(a1, e, q1);
    a2 = vset(a1, e, q2);
    mpfr_set_f128(frx, q0, GMP_RNDN);
    mpfr_set_f128(fry, q1, GMP_RNDN);
    mpfr_set_f128(frz, q2, GMP_RNDN);

    {
      mpfr_add(frw, frx, fry, GMP_RNDN);

      double u0 = countULPf128(t = vget(xaddq_u05(a0, a1), e), frw, 0);

      if (u0 > 0.5000000001) {
        printf(ISANAME " add arg=%s %s ulp=%.20g\n", sprintf128(q0), sprintf128(q1), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_sub(frw, frx, fry, GMP_RNDN);

      double u0 = countULPf128(t = vget(xsubq_u05(a0, a1), e), frw, 0);

      if (u0 > 0.5000000001) {
        printf(ISANAME " sub arg=%s %s ulp=%.20g\n", sprintf128(q0), sprintf128(q1), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_mul(frw, frx, fry, GMP_RNDN);

      double u0 = countULPf128(t = vget(xmulq_u05(a0, a1), e), frw, 0);

      if (u0 > 0.5000000001) {
        printf(ISANAME " mul arg=%s %s ulp=%.20g\n", sprintf128(q0), sprintf128(q1), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_div(frw, frx, fry, GMP_RNDN);

      double u0 = countULPf128(t = vget(xdivq_u05(a0, a1), e), frw, 0);

      if (u0 > 0.5000000001) {
        printf(ISANAME " div arg=%s %s ulp=%.20g\n", sprintf128(q0), sprintf128(q1), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_sqrt(frw, frx, GMP_RNDN);

      double u0 = countULPf128(t = vget(xsqrtq_u05(a0), e), frw, 0);

      if (u0 > 0.5000000001) {
        printf(ISANAME " sqrt arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_cbrt(frw, frx, GMP_RNDN);

      double u0 = countULPf128(t = vget(xcbrtq_u10(a0), e), frw, 0);

      if (u0 > 0.7) {
        printf(ISANAME " cbrt arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_dim(frw, frx, fry, GMP_RNDN);

      double u0 = countULPf128(t = vget(xfdimq_u05(a0, a1), e), frw, 0);

      if (u0 > 0.5000000001) {
        printf(ISANAME " fdim arg=%s %s ulp=%.20g\n", sprintf128(q0), sprintf128(q1), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_hypot(frw, frx, fry, GMP_RNDN);

      double u0 = countULPf128(t = vget(xhypotq_u05(a0, a1), e), frw, 0);

      if (u0 > 0.5000000001) {
        printf(ISANAME " hypot arg=%s %s ulp=%.20g\n", sprintf128(q0), sprintf128(q1), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_fma(frw, frx, fry, frz, GMP_RNDN);

      double u0 = countULPf128(t = vget(xfmaq_u05(a0, a1, a2), e), frw, 0);

      if (u0 > 0.5000000001) {
        printf(ISANAME " fma arg=%s, %s, %s ulp=%.20g\n", sprintf128(q0), sprintf128(q1), sprintf128(q2), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_modf(frw, frz, frx, GMP_RNDN);

      a2 = xmodfq(a0, &a3);
      double u0 = countULPf128(q2 = vget(a2, e), frz, 0);
      double u1 = countULPf128(q3 = vget(a3, e), frw, 0);

      if (u0 > 0 || u1 > 0) {
        printf(ISANAME " modf arg=%s ulp=%.20g, %.20g\n", sprintf128(q0), u0, u1);
        printf("test = %s, %s\n", sprintf128(q2), sprintf128(q3));
        printf("corr = %s, %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)), sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    if (cnt % 101 == 0) {
      {
        mpfr_fmod(frw, frx, fry, GMP_RNDN);

        double u0 = countULPf128(t = vget(xfmodq(a0, a1), e), frw, 0);

        if (u0 > 0) {
          printf(ISANAME " fmod arg=%s %s ulp=%.20g\n", sprintf128(q0), sprintf128(q1), u0);
          printf("test = %s\n", sprintf128(t));
          printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
          fflush(stdout); ecnt++;
        }
      }

      {
        mpfr_remainder(frw, frx, fry, GMP_RNDN);

        double u0 = countULPf128(t = vget(xremainderq(a0, a1), e), frw, 0);

        if (u0 > 0) {
          printf(ISANAME " remainder arg=%s %s ulp=%.20g\n", sprintf128(q0), sprintf128(q1), u0);
          printf("test = %s\n", sprintf128(t));
          printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
          fflush(stdout); ecnt++;
        }
      }
    }

    {
      mpfr_trunc(frw, frx);
      double u0 = countULPf128(t = vget(xtruncq(a0), e), frw, 0);

      if (u0 > 0) {
        printf(ISANAME " trunc arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_floor(frw, frx);
      double u0 = countULPf128(t = vget(xfloorq(a0), e), frw, 0);

      if (u0 > 0) {
        printf(ISANAME " floor arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_ceil(frw, frx);
      double u0 = countULPf128(t = vget(xceilq(a0), e), frw, 0);

      if (u0 > 0) {
        printf(ISANAME " ceil arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_round(frw, frx);
      double u0 = countULPf128(t = vget(xroundq(a0), e), frw, 0);

      if (u0 > 0) {
        printf(ISANAME " round arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_rint(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xrintq(a0), e), frw, 0);

      if (u0 > 0) {
        printf(ISANAME " rint arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      double d = mpfr_get_d(frx, GMP_RNDN);
      vd0 = vsetd(vd0, e, d);
      t = vget(xcast_from_doubleq(vd0), e);
      mpfr_set_d(frw, d, GMP_RNDN);
      Sleef_quad q2 = mpfr_get_f128(frw, GMP_RNDN);

      if (memcmp(&t, &q2, sizeof(Sleef_quad)) != 0 && !(isnanf128(t) && isnanf128(q2))) {
        printf(ISANAME " cast_from_double arg=%.20g\n", d);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(q2));
        fflush(stdout); ecnt++;
      }
    }

    {
      double td = vgetd(xcast_to_doubleq(a0), e);
      double cd = mpfr_get_d(frx, GMP_RNDN);

      if (fabs(cd) >= DBL_MIN && cd != td && !(isnan(td) && isnan(cd))) {
        printf(ISANAME " cast_to_double arg=%s\n", sprintf128(q0));
        printf("test = %.20g\n", td);
        printf("corr = %.20g\n", cd);
        fflush(stdout); ecnt++;
      }
    }

    {
      int64_t i64 = mpfr_get_sj(frx, GMP_RNDN);
      vd0 = vreinterpret_vd_vm(vsetm(vreinterpret_vm_vd(vd0), e, i64));
      t = vget(xcast_from_int64q(vreinterpret_vi64_vm(vreinterpret_vm_vd(vd0))), e);
      mpfr_set_sj(frw, i64, GMP_RNDN);
      Sleef_quad q2 = mpfr_get_f128(frw, GMP_RNDN);

      if (memcmp(&t, &q2, sizeof(Sleef_quad)) != 0) {
        printf(ISANAME " cast_from_int64q arg=%lld\n", (long long)i64);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(q2));
        fflush(stdout); ecnt++;
      }
    }

    {
      int64_t td = vgeti64(xcast_to_int64q(a0), e);
      int64_t cd = mpfr_get_sj(frx, GMP_RNDZ);

      if (cd != td && !isnan(mpfr_get_d(frx, GMP_RNDN))) {
        printf(ISANAME " cast_to_int64q arg=%s\n", sprintf128(q0));
        printf("test = %lld\n", (long long)td);
        printf("corr = %lld\n", (long long)cd);
        fflush(stdout); ecnt++;
      }
    }

    {
      uint64_t u64 = mpfr_get_uj(frx, GMP_RNDN);
      vd0 = vreinterpret_vd_vm(vsetm(vreinterpret_vm_vd(vd0), e, u64));
      t = vget(xcast_from_uint64q(vreinterpret_vu64_vm(vreinterpret_vm_vd(vd0))), e);
      mpfr_set_uj(frw, u64, GMP_RNDN);
      Sleef_quad q2 = mpfr_get_f128(frw, GMP_RNDN);

      if (memcmp(&t, &q2, sizeof(Sleef_quad)) != 0) {
        printf(ISANAME " cast_from_uint64q arg=%llu\n", (unsigned long long)u64);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(q2));
        fflush(stdout); ecnt++;
      }
    }

    {
      uint64_t td = vgetu64(xcast_to_uint64q(a0), e);
      uint64_t cd = mpfr_get_uj(frx, GMP_RNDZ);

      if (cd != td && !isnan(mpfr_get_d(frx, GMP_RNDN))) {
        printf(ISANAME " cast_to_uint64q arg=%s\n", sprintf128(q0));
        printf("test = %llu\n", (unsigned long long)td);
        printf("corr = %llu\n", (unsigned long long)cd);
        fflush(stdout); ecnt++;
      }
    }

    {
      int ci = mpfr_less_p(frx, fry);
      int ti = vgeti(xicmpltq(a0, a1), e);

      if (ci != ti) {
        printf(ISANAME " icmpltq arg=%s, %s,  test = %d, corr = %d \n", sprintf128(q0), sprintf128(q1), ti, ci);
        fflush(stdout); ecnt++;
      }
    }

    {
      int ci = mpfr_greater_p(frx, fry);
      int ti = vgeti(xicmpgtq(a0, a1), e);

      if (ci != ti) {
        printf(ISANAME " icmpgtq arg=%s, %s,  test = %d, corr = %d \n", sprintf128(q0), sprintf128(q1), ti, ci);
        fflush(stdout); ecnt++;
      }
    }

    {
      int ci = mpfr_lessequal_p(frx, fry);
      int ti = vgeti(xicmpleq(a0, a1), e);

      if (ci != ti) {
        printf(ISANAME " icmpleq arg=%s, %s,  test = %d, corr = %d \n", sprintf128(q0), sprintf128(q1), ti, ci);
        fflush(stdout); ecnt++;
      }
    }

    {
      int ci = mpfr_greaterequal_p(frx, fry);
      int ti = vgeti(xicmpgeq(a0, a1), e);

      if (ci != ti) {
        printf(ISANAME " icmpgeq arg=%s, %s,  test = %d, corr = %d \n", sprintf128(q0), sprintf128(q1), ti, ci);
        fflush(stdout); ecnt++;
      }
    }

    {
      int ci = mpfr_equal_p(frx, fry);
      int ti = vgeti(xicmpeqq(a0, a1), e);

      if (ci != ti) {
        printf(ISANAME " icmpeq arg=%s, %s,  test = %d, corr = %d \n", sprintf128(q0), sprintf128(q1), ti, ci);
        fflush(stdout); ecnt++;
      }
    }

    {
      int ci = mpfr_lessgreater_p(frx, fry);
      int ti = vgeti(xicmpneq(a0, a1), e);

      if (ci != ti) {
        printf(ISANAME " icmpne arg=%s, %s,  test = %d, corr = %d \n", sprintf128(q0), sprintf128(q1), ti, ci);
        fflush(stdout); ecnt++;
      }
    }

    {
      int ci = mpfr_cmp(frx, fry);
      int ti = vgeti(xicmpq(a0, a1), e);

      if (ci != ti) {
        printf(ISANAME " icmp arg=%s, %s,  test = %d, corr = %d \n", sprintf128(q0), sprintf128(q1), ti, ci);
        fflush(stdout); ecnt++;
      }
    }

    {
      int ci = mpfr_unordered_p(frx, fry);
      int ti = vgeti(xiunordq(a0, a1), e);

      if (ci != ti) {
        printf(ISANAME " iunord arg=%s, %s,  test = %d, corr = %d \n", sprintf128(q0), sprintf128(q1), ti, ci);
        fflush(stdout); ecnt++;
      }
    }

#ifdef ENABLE_PUREC_SCALAR
#if !(defined(ENABLEFLOAT128) && defined(__clang__))
    if ((cnt & 15) == 1) {
      char s[64];
      Sleef_quad q1;

      Sleef_snprintf(s, 63, "%.40Qg", a0);
      q1 = vget(Sleef_strtoq(s, NULL), e);
      if (memcmp(&q0, &q1, sizeof(Sleef_quad)) != 0 && !(isnanf128(q0) && isnanf128(q1))) {
        printf("snprintf(Qg)/strtoq arg=%s str=%s test=%s\n", sprintf128(q0), s, sprintf128(q1));
        fflush(stdout); ecnt++;
      }

      Sleef_snprintf(s, 63, "%Qa", a0);
      q1 = vget(Sleef_strtoq(s, NULL), e);
      if (memcmp(&q0, &q1, sizeof(Sleef_quad)) != 0 && !(isnanf128(q0) && isnanf128(q1))) {
        printf("snprintf(Qa)/strtoq arg=%s str=%s test=%s\n", sprintf128(q0), s, sprintf128(q1));
        fflush(stdout); ecnt++;
      }
    }
#else
    if ((cnt & 15) == 1) {
      char s[64];
      Sleef_quad q1;

      Sleef_snprintf(s, 63, "%.40Pg", &a0);
      q1 = vget(Sleef_strtoq(s, NULL), e);
      if (memcmp(&q0, &q1, sizeof(Sleef_quad)) != 0 && !(isnanf128(q0) && isnanf128(q1))) {
        printf("snprintf(Qg)/strtoq arg=%s str=%s test=%s\n", sprintf128(q0), s, sprintf128(q1));
        fflush(stdout); ecnt++;
      }

      Sleef_snprintf(s, 63, "%Pa", &a0);
      q1 = vget(Sleef_strtoq(s, NULL), e);
      if (memcmp(&q0, &q1, sizeof(Sleef_quad)) != 0 && !(isnanf128(q0) && isnanf128(q1))) {
        printf("snprintf(Qa)/strtoq arg=%s str=%s test=%s\n", sprintf128(q0), s, sprintf128(q1));
        fflush(stdout); ecnt++;
      }
    }
#endif
#endif

    {
      mpfr_exp(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xexpq_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " exp arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_exp2(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xexp2q_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " exp2 arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_exp10(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xexp10q_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " exp10 arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_expm1(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xexpm1q_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " expm1 arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_log(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xlogq_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " log arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_log2(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xlog2q_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " log2 arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_log10(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xlog10q_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " log10 arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_log1p(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xlog1pq_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " log1p arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_pow(frw, frx, fry, GMP_RNDN);

      double u0 = countULPf128(t = vget(xpowq_u10(a0, a1), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " pow arg=%s %s ulp=%.20g\n", sprintf128(q0), sprintf128(q1), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_sinh(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xsinhq_u10(a0), e), frw, 0);

      if (u0 > 0.7) {
        printf(ISANAME " sinh arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_cosh(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xcoshq_u10(a0), e), frw, 0);

      if (u0 > 0.7) {
        printf(ISANAME " cosh arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_tanh(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xtanhq_u10(a0), e), frw, 0);

      if (u0 > 0.7) {
        printf(ISANAME " tanh arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_asinh(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xasinhq_u10(a0), e), frw, 0);

      if (u0 > 0.7) {
        printf(ISANAME " asinh arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_acosh(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xacoshq_u10(a0), e), frw, 0);

      if (u0 > 0.7) {
        printf(ISANAME " acosh arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_atanh(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xatanhq_u10(a0), e), frw, 0);

      if (u0 > 0.7) {
        printf(ISANAME " atanh arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_atan(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xatanq_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " atan arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_atan2(frw, frx, fry, GMP_RNDN);

      double u0 = countULPf128(t = vget(xatan2q_u10(a0, a1), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " atan2 arg=%s %s ulp=%.20g\n", sprintf128(q0), sprintf128(q1), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    q0 = rndf128(oneEMinus300Q, oneQ, 1);
    a0 = vset(a0, e, q0);
    mpfr_set_f128(frx, q0, GMP_RNDN);

    {
      mpfr_asin(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xasinq_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " asin arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_acos(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xacosq_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " acos arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

#if defined(ENABLEFLOAT128)
    switch(cnt & 31) {
    case 0: {
      memrand(&q0, sizeof(__float128));
      q0 = q0 * M_PI_2Q;
    }
      break;

    case 1: {
      int t;
      memrand(&t, sizeof(int));
      t &= ~((~0UL) << (xrand() & 31));
      q0 = t * M_PI_2Q;
    }
      break;

    case 2:
      q0 = rndf128x();
      break;

    default:
      q0 = rndf128(1e-20, 1e+20, 1);
      break;
    }

    a0 = vset(a0, e, q0);
    mpfr_set_f128(frx, q0, GMP_RNDN);
#endif

    {
      mpfr_sin(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xsinq_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " sin arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_cos(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xcosq_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " cos arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }

    {
      mpfr_tan(frw, frx, GMP_RNDN);
      double u0 = countULPf128(t = vget(xtanq_u10(a0), e), frw, 0);

      if (u0 > 0.8) {
        printf(ISANAME " tan arg=%s ulp=%.20g\n", sprintf128(q0), u0);
        printf("test = %s\n", sprintf128(t));
        printf("corr = %s\n\n", sprintf128(mpfr_get_f128(frw, GMP_RNDN)));
        fflush(stdout); ecnt++;
      }
    }
  }
}