首页
学习
活动
专区
圈层
工具
发布

GMP条件
EN

Stack Overflow用户
提问于 2012-09-05 08:31:53
回答 3查看 272关注 0票数 1

我正在使用libgmp创建一个简单的程序。我可以gmp_printf所有的gmp整数,所以我知道这些是初始化和分配正确的。当我尝试一个简单的if-else条件时,问题就出现了。

代码语言:javascript
复制
mpz_t n;
mpz_t c;
mpz_t m;

mpz_init(n);
mpz_init(c);
mpz_init(m); 

mpz_set_str(c, "2", 10);
mpz_set_str(n, "2038074744", 10);

mpz_mod(m, n, c);

gmp_printf("\n%Zd\n%Zd\n%Zd\n", n, c, m);

if(m == 0)
{
printf("number is even\n");
}
else
{
printf("number is odd\n");
}

实际数字打印为0,但始终显示else printf。

代码语言:javascript
复制
2038074744
2
0
number is odd

有没有什么方法可以让它工作呢?

EN

回答 3

Stack Overflow用户

发布于 2012-09-06 03:04:44

您不能直接与m进行比较,因为m (粗略地说)是一个指针。您需要使用GMP中包含的比较函数。请参阅http://gmplib.org/manual/Integer-Comparisons.html#Integer-Comparisons

票数 3
EN

Stack Overflow用户

发布于 2017-03-23 15:27:28

使用mpz_cmp而不是m == 0

代码语言:javascript
复制
if(mpz_cmp(m,0)  == 0)
    printf("number is even\n");
else
    printf("number is odd\n");
票数 0
EN

Stack Overflow用户

发布于 2021-12-18 01:29:20

回答“不能直接与m比较,因为m(粗略地说)是一个指针”几乎是正确的,m是一种mpz_t类型,它是在gmp.h中定义的结构

代码语言:javascript
复制
typedef struct
{
  int _mp_alloc;
  int _mp_size;
  mp_limb_t *_mp_d;  /* Pointer to the limbs.  */
} __mpz_struct;

typedef __mpz_struct mpz_t[1];

但您应该使用mpz_cmp_ui(m,0UL)mpz_cmp_si(m,0L),而不是另一个答案中建议的mpz_cmp,因为它会像前面解释的那样将m与零指针进行比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12273056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档