Пример #1
0
static void
check_ternary_value (void)
{
  unsigned int i;
  mpc_t z;

  mpc_init2 (z, 2);

  for (i=2; i <= 1024; i++)
    {
      mpc_set_prec (z, i);

      mpc_set_ui (z, 1, MPC_RNDNN);
      if (mpc_add_ui (z, z, 1, MPC_RNDNZ))
        {
          printf ("Error in mpc_add_ui: 1+1 should be exact\n");
          exit (1);
        }

      mpc_set_ui (z, 1, MPC_RNDNN);
      mpc_mul_2exp (z, z, i, MPC_RNDNN);
      if (mpc_add_ui (z, z, 1, MPC_RNDNN) == 0)
        {
          printf ("Error in mpc_add_ui: 2^prec+1 cannot be exact\n");
          exit (1);
        }
    }

  mpc_clear (z);
}
Пример #2
0
// Computes j = j(tau).
static void compute_j(mpc_t j, mpc_t tau) {
  mpc_t h;
  mpc_t z0;
  mpc_init(h);
  mpc_init(z0);
  compute_h(h, tau);
  //mpc_mul_ui(z0, h, 256);
  mpc_mul_2exp(z0, h, 8);
  mpc_add_ui(z0, z0, 1);
  mpc_pow_ui(z0, z0, 3);
  mpc_div(j, z0, h);
  mpc_clear(z0);
  mpc_clear(h);
}
Пример #3
0
Файл: mpc.c Проект: rforge/mpc
SEXP R_mpc_add(SEXP e1, SEXP e2) {
	mpc_t *z1 = (mpc_t *)R_ExternalPtrAddr(e1);
	mpc_t *z = (mpc_t *)malloc(sizeof(mpc_t));
	if (z == NULL) {
		Rf_error("Could not allocate memory for MPC type.");
	}

	if (Rf_inherits(e2, "mpc")) {
		mpc_t *z2 = (mpc_t *)R_ExternalPtrAddr(e2);
		mpfr_prec_t real_prec, imag_prec;
		Rmpc_get_max_prec(&real_prec, &imag_prec, *z1, *z2);
		mpc_init3(*z, real_prec, imag_prec);
		mpc_add(*z, *z1, *z2, Rmpc_get_rounding());
	} else if (Rf_isInteger(e2)) {
		mpc_init2(*z, mpc_get_prec(*z1));
		mpc_add_ui(*z, *z1, INTEGER(e2)[0], Rmpc_get_rounding());
	} else if (Rf_isNumeric(e2)) {
		mpfr_t x;
		mpfr_init2(x, 53);
                // We use GMP_RNDN rather than MPFR_RNDN for compatibility
                // with mpfr 2.4.x and earlier as well as more modern versions.
		mpfr_set_d(x, REAL(e2)[0], GMP_RNDN);
		/* Max of mpc precision z2 and 53 from e2. */
		Rprintf("Precision: %d\n", mpc_get_prec(*z1));
		mpc_init2(*z, max(mpc_get_prec(*z1), 53));
		mpc_add_fr(*z, *z1, x, Rmpc_get_rounding());
	} else {
		/* TODO(mstokely): Add support for mpfr types here. */
		free(z);
		Rf_error("Invalid second operand for mpc addition.");
	}
	SEXP retVal = PROTECT(R_MakeExternalPtr((void *)z,
		Rf_install("mpc ptr"), R_NilValue));
	Rf_setAttrib(retVal, R_ClassSymbol, Rf_mkString("mpc"));
	R_RegisterCFinalizerEx(retVal, mpcFinalizer, TRUE);
	UNPROTECT(1);
	return retVal;
}
Пример #4
0
mpcomplex operator+(const long int& a, const mpcomplex& b) {
    mpc_t value;
    mpc_init3( value , b.mpc_prec, b.mpc_prec );
    mpc_add_ui(value, b.mpc_val, a, b.default_rnd);
    return mpcomplex(value);
}
Пример #5
0
void Lib_Mpcr_Add_Ui(MpcrPtr f, MpcrPtr g,  unsigned int x, long rnd)
{
    mpc_add_ui( (mpc_ptr) f,  (mpc_ptr) g,  x, (mpc_rnd_t) rnd);
}