예제 #1
0
static void dec128_to_mpd_conv(mpd_context_t * ctx, mpd_t *result, const uint64_t significand_low, const int64_t significand_high, const int64_t exponent_part){
  uint32_t status = 0;
  mpd_t *ten, *sig1, *sig2, *stemp, *sig, *s64, *exp_pow, *exp_partmpd;
  ten = mpd_qnew();
  s64 = mpd_qnew();
  sig1 = mpd_qnew();
  sig2 = mpd_qnew();
  stemp = mpd_qnew();
  sig = mpd_qnew();
  exp_pow = mpd_qnew();
  exp_partmpd = mpd_qnew();
  mpd_qset_i64(ten,10LL,ctx,&status);
  /* 2^64 */
  mpd_qset_string(s64,"18446744073709551616",ctx,&status);
  mpd_qset_u64(sig1,significand_low,ctx,&status);
  mpd_qset_i64(sig2,significand_high,ctx,&status);
  mpd_qmul(stemp,sig2,s64,ctx,&status);
  mpd_qadd(sig,stemp,sig1,ctx,&status);
  mpd_qset_i64(exp_partmpd,exponent_part,ctx,&status);
  mpd_qpow(exp_pow,ten,exp_partmpd,ctx,&status);
  mpd_qmul(result,sig,exp_pow,ctx,&status);
  mpd_del(ten);
  mpd_del(sig1);
  mpd_del(sig2);
  mpd_del(sig);
  mpd_del(stemp);
  mpd_del(s64);
  mpd_del(exp_pow);
  mpd_del(exp_partmpd);
}
예제 #2
0
파일: mpsignal.c 프로젝트: LANJr4D/FRED
void
mpd_set_i64(mpd_t *result, int64_t a, mpd_context_t *ctx)
{
	uint32_t status = 0;
	mpd_qset_i64(result, a, ctx, &status);
	mpd_addstatus_raise(ctx, status);
}
예제 #3
0
static void dec_to_mpd_conv(mpd_context_t * ctx, mpd_t *result, const int64_t significand_low, const int64_t exponent_part){
  uint32_t status = 0;
  mpd_t *ten, *exp_pow, *exp_partmpd, *significand_partmpd;
  ten = mpd_qnew();
  exp_pow = mpd_qnew();
  exp_partmpd = mpd_qnew();
  significand_partmpd = mpd_qnew();

  mpd_qset_i64(ten,10LL,ctx,&status);
  mpd_qset_i64(significand_partmpd,significand_low,ctx,&status);
  mpd_qset_i64(exp_partmpd,exponent_part,ctx,&status);
  mpd_qpow(exp_pow,ten,exp_partmpd,ctx,&status);
  mpd_qmul(result,significand_partmpd,exp_pow,ctx,&status);

  mpd_del(ten);
  mpd_del(exp_pow);
  mpd_del(exp_partmpd);
  mpd_del(significand_partmpd);
}