【发布时间】:2013-08-10 19:34:51
【问题描述】:
我想将两个尺寸相乘10^10,得到的尺寸是10^20,即2^66。
我想将该数字存储在 C 中的标准数据类型中。我宁愿不使用“GNU MP Bignum 库”。
为什么下面的 C 程序不能正确保存数字?
#include<stdio.h>
typedef long long int ull;
int main(){
ull n1 = 10000000000LL;
ull n2 = 10000000000LL;
printf("%llu",n1*n2);
return 0;
}
持有这个号码并使用它的最佳方式是什么?
【问题讨论】:
-
除非你有一台支持超过 64 位的单个整数的机器(我确定它们存在,但我不知道有哪个处理器支持),否则没有解决方案。
-
如果您不想使用现有的库,则必须推出自己的大整数类。
-
@MatsPetersson 汇编器不是实现您自己的大整数类所必需的。
-
如果你的编译器支持
__uint128_t,它应该适合那个乘法的结果。 -
@James:OP 是否要求“任意大整数乘法”或“略高于 64 位”?解决 OP 的问题是我们正在寻找的,对吧?不解决一些刚刚发生的任意问题也解决了 OP 的问题。