C GMP最近整数

C GMP最近整数,c,gmp,C,Gmp,我在C中使用GMP,我想将mpf四舍五入为mpz的整数。是否有GMP职能部门可以做到这一点?我的工作是: void Mpf_round(mpz_t rop, const mpf_t op, int PRECISION){ mpf_t dummy; mpf_init2(dummy,PRECISION); int compare_int; mpf_floor(dummy,op); mpf_sub(dummy,op,dummy); compare_int=mpf

我在C中使用GMP,我想将
mpf
四舍五入为
mpz
的整数。是否有GMP职能部门可以做到这一点?我的工作是:

void Mpf_round(mpz_t rop, const mpf_t op, int PRECISION){
    mpf_t dummy; mpf_init2(dummy,PRECISION);
    int compare_int;
    mpf_floor(dummy,op);
    mpf_sub(dummy,op,dummy);
    compare_int=mpf_cmp_d(dummy,0.5);
    mpf_floor(dummy,op);
    if(compare_int>0){
        mpf_add_ui(dummy,dummy,1);
        mpz_set_f(rop,dummy);
    }
    else
        mpz_set_f(rop,dummy);

    mpf_clear(dummy);
}

有更好的方法吗?我正在寻找一些快速的东西,因为我经常称这个行动为

我建议转到MPFR(曾经是GMP的一部分),其中MPFR_get_z有一个舍入参数。对于旧代码,mpf_t保留在GMP中,但新代码应使用MPFR。