首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对无限位数的数进行计算?

如何对无限位数的数进行计算?
EN

Stack Overflow用户
提问于 2013-06-29 05:55:47
回答 3查看 225关注 0票数 0

在C中,你可以执行一个简单的:

代码语言:javascript
复制
int a = b + c;

现在,如果a大于2^32 (或者可能是2^31+1),您可以将代码更改为:

代码语言:javascript
复制
long a = b + c;

代码语言:javascript
复制
unsigned long a = b + c;

但是你将如何实现加法,比如:

代码语言:javascript
复制
bigint a = b + c;

其中bigint是用于存储和计算大整数(数百位数长度的数字)的某种类/类型定义/结构。如果你只是想用标准的手写小数方法将数字相加,你可以在等式中做无限长的数字。但是回到计算机科学,如何使用二进制、高效的方法来进行无限长的计算(假设有足够的RAM可用)

更重要的是,有没有一种不会太慢的方法呢?

EN

回答 3

Stack Overflow用户

发布于 2013-06-29 05:59:05

你可以使用一个大整数library,或者如果你真的觉得有野心,你可以创建一个动态数组来存储你的整数。

票数 0
EN

Stack Overflow用户

发布于 2013-06-29 05:59:53

有一些非常快速的方法可以做到这一点(注意,在CPU寄存器中仍然比数学慢得多)。这方面的库已经存在,但如果您对实现细节感兴趣,我建议您查看GMP (http://gmplib.org/)的源代码,以及阅读(正在做中的练习)Knuth的计算机编程艺术,第2卷:半数字算法。

票数 0
EN

Stack Overflow用户

发布于 2013-06-29 06:03:22

“更重要的是,有没有一种不会太慢的方法呢?”

与固定长度的16、32、64和某些机器中的128位相比,这一切都会相当慢,因为数学运算必须以很小的步长来完成。加法和减法并不是很糟糕,阵列中每个单元只有一个或两个时钟周期(32或64位取决于体系结构),但乘法和除法确实变得相当慢。当数字变得非常大(超过几千位左右)时,您还会遇到缓存未命中的问题,这会减慢计算速度。

但是你当然可以得到比在ascii字符串中存储数字更好的方法。

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

https://stackoverflow.com/questions/17374275

复制
相关文章

相似问题

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