gpt4 book ai didi

c - C语言中的大数

转载 作者:行者123 更新时间:2023-11-30 14:55:47 25 4
gpt4 key购买 nike

我正在用 C 实现 RSA。我正在使用“unsigned long long int”(上限:18446744073709551615)。

当我必须计算像 4294967296 ^ 2 这样的东西时,问题就出现了。它应该是18446744073709551616,,但我得到0(溢出)。我的意思是,我需要计算结果超出上限的事情。

我尝试过使用 float、double、long double,但结果不正确。

示例:

4294967000.0 * 4294967000.0 the result is 18446741874686296064.0
but it should be 18446741531089000000

最佳答案

Openssl 示例:

#include <stdio.h>
#include <openssl/bn.h>
/* compile with -lcrypto */
int main ()
{
char p_sa[] = "4294967296";
char p_sb[] = "4294967296";
BN_CTX *c = BN_CTX_new();
BIGNUM *pa = BN_new();
BIGNUM *pb = BN_new();
BN_dec2bn(&pa, p_sa);
BN_dec2bn(&pb, p_sb);
BN_mul (pa,pb, pa,c);
char * number_str = BN_bn2hex(pa);
printf("%s\n", number_str);
OPENSSL_free(number_str);
BN_free(pa);
BN_free(pb);
BN_CTX_free(c);
return 0;
}

关于c - C语言中的大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45527972/

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