当前位置:  开发笔记 > 编程语言 > 正文

如何使用GMP计算2 ^ -18?

如何解决《如何使用GMP计算2^-18?》经验,为你挑选了2个好方法。

在我的尴尬中,我刚刚发现,喂养负面指数mpz_pow_ui并不能很好地发挥作用.("手册确实说无符号长,你知道.")对于其他mpz_pow功能,手册使用了我不理解的概念.例如," base ^ exp mod mod "如下:

void mpz_powm (mpz_t rop, mpz_t base, mpz_t exp, mpz_t mod) 
void mpz_powm_ui (mpz_t rop, mpz_t base, unsigned long int exp, mpz_t mod)
Set _rop_ to _base_^_exp_ mod _mod_.
Negative exp is supported if an inverse base-1 mod mod exists (see mpz_invert in Section 5.9 [Number Theoretic Functions], page 35). If an inverse doesn’t exist then a divide by zero is raised.

在下面的代码中,我需要更改什么才能使其能够处理负指数?

#define Z(x) mpz_t x; mpz_init( x );

BSTR __stdcall IBIGPOWER(BSTR p1, long p2 ) {
    USES_CONVERSION;

    Z(n1);
    Z(res);

    LPSTR sNum1 = W2A( p1 );

    mpz_set_str( n1, sNum1, 10 );

    mpz_pow_ui( res, n1, p2 );

    char * buff =  (char *) _alloca( mpz_sizeinbase( res, 10 ) + 2 );

    mpz_get_str(buff, 10, res);

    BSTR bResult = _com_util::ConvertStringToBSTR( buff );
    return bResult;
}

paxdiablo.. 9

我不会为你剪切代码,但我会告诉你:

2-n = 1/2n

所以你可以通过正指数然后将1除以该数字(并选择非整数类型mpf_t- mpz_t类型是整数,因此不能代表实数).2-18



1> paxdiablo..:

我不会为你剪切代码,但我会告诉你:

2-n = 1/2n

所以你可以通过正指数然后将1除以该数字(并选择非整数类型mpf_t- mpz_t类型是整数,因此不能代表实数).2-18


更容易阅读,更容易打字,是:

2 -n = 1/2 n

2> Adam Rosenfi..:

mpz_t数据类型只能存储整数,和2 -18不是整数.要计算它,您必须使用浮点类型mpf_t或有理数类型mpq_t.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有