gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:11:12 26 4
gpt4 key购买 nike

令我尴尬的是,我刚刚发现,将负指数提供给 mpz_pow_ui 效果不是很好。 (“手册确实说了 unsigned long,你知道的。”)对于其他 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;
}

最佳答案

我不会为您削减代码,但我会让您知道:

2<sup>-n</sup> = <sup>1</sup>/<sub>2<sup>n</sup></sub>

因此您可以只传递正指数,然后将 1 除以该数字(并选择非整数类型,如 mpf_t - mpz_t 类型是整数,因此不能表示实数,如 2<sup>-18</sup>)。

关于c - 如何使用 GMP 计算 2 ^ -18?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/419071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com