可能重复:
大数类的最有效实现
假设我需要计算 2^150000。显然,这个数字将超过 int、float 或 double 的大小。如何创建允许正常数学函数但超出基本数字类型的数据类型?
如果这是“取决于您使用哪种语言”的交易。我会说 C#。
如果 C# 不是一成不变的,并且您想要开箱即用的东西,那么有几种选择。我最了解的是Python,但我认为像 Scheme 和 Ruby 这样的语言也支持大数字。
蟒蛇:2**150000
。大约 1 秒后打印结果。
如果您想要免费的数学软件,请查看 Maxima 或 Sage。
您也可以考虑使用 Frink,这是一种具有处理测量单位的本机能力的语言。它可以毫无困难地计算 2^150000,处理分数(例如 1/3+2/5 --> 11/15),计算 3 米 + 2 英寸 --> 3.0508 m,并且是一门完整的编程语言。
Frink - 版权所有 2000-2008 Alan Eliasen,eliasen@mindspring.com http://futureboy.us/frinkdocs/
几种语言已经内置了对任意大数的支持。例如,您可以使用 Mathematica。我在 Mathematica 中尝试了您的示例,结果有 45,155 位。bc
我在 Unix 机器上尝试了同样的例子。bc 支持扩展精度,但不支持扩展;它轰炸了这个例子。
Lisp 是你的朋友。默认大整数。
我发现使用没有任意大数字的语言非常令人沮丧:能够对大多数数字使用加法等普通运算符似乎很荒谬,但仅仅因为它的大小而不得不切换到 BigInt 实例上的方法调用。
一大堆语言都有更完整的数字塔,并在需要时无缝强制;例如,Allegro Common Lisp 在 1 毫秒内评估并打印 (expt 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
Calc 执行算术运算符 +、-、/、* 以及 ^(取幂)、%(模数)和 //(整数除法)。
例如:
3 * 19 ^ 43 - 1
将产生:
29075426613099201338473141505176993450849249622191102976
Calc 值可能非常大。例如:
2 ^ 23209 - 1
将打印:
402874115778988778181873329071 ... loads of digits ... 3779264511
希望这可以帮助...
我不知道 C#,但我知道 Ruby 编程语言有 BigDemical 类,它似乎允许无限大小的数字。
Python 有一个 bignum 库。如果您需要用另一种语言实现 bignum 库,您至少可以使用 Python 库作为验证您的工作的参考。请注意,如果您不知道自己在寻找什么,bignums 有一些实现陷阱不会立即显而易见。