微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C中使用GMP为变量分配一个很大的数字

如何解决在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 举报,一经查实,本站将立刻删除。