Esempio n. 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);
}
Esempio n. 2
0
File: test.c Progetto: gicho/sst
void test_mpd(void) {
    mpd_context_t ctx;
    mpd_t *n;
    char *sn = NULL;
    uint32_t res = 0;

    mpd_maxcontext(&ctx);

    n = mpd_qnew();

    if (!n) {
        die("Allocating new number failed\n");
    }

    mpd_qset_string(n, NUMBER1, &ctx, &res);

    sn = mpd_to_sci(n, 0);

    if (strcmp(sn, NUMBER1) != 0) {
        die("Failed converting number to string\n");
    }

    free(sn);
    mpd_del(n);
}
Esempio n. 3
0
int main(){
  mpd_context_t ctx;
  mpd_t *result1;
  mpd_t *result2;
  mpd_t *result3;
  mpd_setminalloc(MPD_MINALLOC_MAX);
  mpd_ieee_context(&ctx, 160);
  result1 = mpd_qnew();
  result2 = mpd_qnew();
  result3 = mpd_qnew();
  //mpd_qset_u64(result1,2ULL,&ctx,&status);
  dec32_to_mpd(&ctx,result1,dec32);
  dec64_to_mpd(&ctx,result2,dec64);
  dec128_to_mpd(&ctx,result3,dec128);
  //mpd_qset_u64(result2,4ULL,&ctx,&status);
  //mpd_qpow(result3,result1,result2,&ctx,&status);
  mpd_print(result1);
  mpd_print(result2);
  mpd_print(result3);

  /*print_mpd(result1);
  print_mpd(result2);
  print_mpd(result3);*/

  _Decimal32 ddd = mpd_to_dec32(result1);
  printf ("Compare is %d\n", memcmp(&ddd,&dec32,sizeof(_Decimal32)));
  printf ("0x%x\n0x%x\n", *((uint32_t *)(void *)&ddd), *((uint32_t *)(void *)&dec32));

  _Decimal64 ddd64 = mpd_to_dec64(result2);
  printf ("Compare is %d\n", memcmp(&ddd64,&dec64,sizeof(_Decimal64)));
  printf ("0x%I64x\n0x%I64x\n", *((uint64_t *)(void *)&ddd64), *((uint64_t *)(void *)&dec64));

  _Decimal128 ddd128 = mpd_to_dec128(result3);
  printf ("Compare is %d\n", memcmp(&ddd128,&dec128,sizeof(_Decimal128)));
  printf ("0x%I64d\n0x%I64x\n", *((uint64_t *)(void *)&ddd128), *((uint64_t *)(void *)&dec128));

  mpd_del(result1);
  mpd_del(result2);
  mpd_del(result3);

  print_dec32(&dec32);
  print_dec64(&dec64);
  print_dec128(&dec128);
  return 0;
}
Esempio n. 4
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);
}