如何处理庞大的数字?
可能重复:
Most efficient implementation of a large number class如何处理庞大的数字?
想我需要计算2^15万。显然这个数字将超过int,float或double的大小。我怎样才能创建一个允许普通数学函数但超过基本数字类型的数据类型?
如果这是一个“取决于您使用哪种语言”的交易。我会说C#。
我最初尝试搜索已存在的帖子,但没有找到任何内容。 – 2008-11-07 22:41:06
几种语言都支持任意大数字。例如,您可以使用Mathematica。我在Mathematica中尝试了你的例子,结果有45,155位数字。我在Unix机器上尝试了与bc
相同的例子。 bc支持扩展的精度,但不能扩展;它在这个例子上轰炸了。
我不知道C#,但我知道Ruby编程语言有BigDemical类,它似乎允许无限大小的数字。
Lisp是你的朋友。默认的biginteger数字。
我觉得使用没有任意大数字的语言非常令人沮丧:在大多数数字上能够使用普通运算符(如添加)似乎是无意义的,但仅仅因为它的原因而必须切换到BigInt实例上的方法调用尺寸。
一大堆语言有更完整的数字塔,并在需要时无缝胁迫;例如,Allegro Common Lisp在1ms内评估并打印(实验2 150000)的所有45,155位数字。
cl-user(2): (time (expt 2 150000))
; cpu time (non-gc) 0 msec user, 0 msec system
; cpu time (gc) 0 msec user, 0 msec system
; cpu time (total) 0 msec user, 0 msec system
; real time 1 msec
; space allocation:
; 2 cons cells, 18,784 other bytes, 0 static bytes
C中有一种产品叫calc,它是一个任意精度计算器。我用它作为一次研究员工作时,发现它相当简单使用...
http://sourceforge.net/projects/calc/
它可以通过编程对困难或长计算,并能接受来自命令行参数。在交互模式下,它一次接受一个命令,并显示答案。
通常的命令是简单地表述如:
3 * (4 + 1)
和calc将打印:
15
计算值确实算术运算符+, - ,/ *以及^(幂),%(模数)和//(整数除法)。
例如:
3 * 19^43 - 1
会产生:
29075426613099201338473141505176993450849249622191102976
计算值的值可能会非常大。例如:
2^23209 - 1
会打印:
402874115778988778181873329071 ... loads of digits ... 3779264511
希望这有助于...
Python有一个BIGNUM库。如果你需要用另一种语言实现一个bignum库,你至少可以使用Python作为参考来验证你的工作。请注意,如果您不知道自己要找什么,bignums会有一些实施细节并不是很明显。
您也可以考虑使用Frink,它是一种具有处理测量单位本机功能的语言。 它毫不费力地计算2^150000,处理分数(例如1/3 + 2/5 - > 11/15),计算3米+2英寸 - > 3.0508米,是一种完整的编程语言。
弗林克 - 版权所有2000-2008艾伦Eliasen,[email protected] http://futureboy.us/frinkdocs/
巨大.. :))。 – mlvljr 2012-01-02 07:50:41