如何解决在C中使用GMP为变量分配一个很大的数字
我目前正在科学编程课程中学习GMP。我需要打印23 ^ 45的表格。这是一个不寻常的大数字,因此我需要使用GMP。
我必须构造一个从1到10的循环。问题在于将23 ^ 45赋给一个变量。我在网上搜索了它,但找不到任何类似的东西。
到目前为止,我知道首先需要定义mpz_t变量。然后需要为变量分配内存。下一步是将值分配给变量。
我已经阅读了此文档: https://tspiteri.gitlab.io/gmp-mpfr-sys/gmp/Integer-Functions.html
因此,我知道我可以使用mpz_set_str(variable,“ str”,base)分配一个值
或带有mpz_set_d(变量,要分配的值)。
到目前为止,我有:
#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
#include <math.h>
int main(void)
{
mpz_t a,b;
// allocate memory for the variables
mpz_init(a);
mpz_init(b);
我想实现以下目标:
// assign values
mpz_set_d(a,pow(23,45));
mpz_set_str(b,"pow(23,45)",10)
从这里开始,我很困惑,无法找到示例。如果有人可以帮助我或将我引导到类似的线索,那就太好了。
Ter
更新:
我现在有这段代码:
#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
#include <math.h>
int main(void)
{
mpz_t a,b,c,d;
mpz_init(c);
mpz_init_set_ui(a,23);
mpz_init_set_ui(b,45);
mpz_pow_ui(c,a,b);
gmp_printf("a: %Zd,b: %Zd,23^45: %Zd",c);
return EXIT_SUCCESS;
}
但是我仍然不在那里,因为我溢出了。
问题:为什么我会溢出 问:为了避免溢出,我需要更改什么?
解决方法
根据定义(GMP 6.2.1 手册)
void mpz_pow_ui (mpz t rop,const mpz t base,unsigned long int exp)
所以,尝试替换:
mpz_t a,b,c,d;
mpz_init_set_ui(b,45);
用于:
mpz_t a,d;
unsigned long int b = 45;
您可能需要相应地更改您的 gmp_printf
语句。
希望有帮助
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。