1

可能重复:
大数类的最有效实现

假设我需要计算 2^150000。显然,这个数字将超过 int、float 或 double 的大小。如何创建允许正常数学函数但超出基本数字类型的数据类型?

如果这是“取决于您使用哪种语言”的交易。我会说 C#。

4

9 回答 9

6

大数类的最有效实现

对于一些线索。

于 2008-11-07T22:37:14.273 回答
3

如果 C# 不是一成不变的,并且您想要开箱即用的东西,那么有几种选择。我最了解的是Python,但我认为像 Scheme 和 Ruby 这样的语言也支持大数字。

蟒蛇:2**150000。大约 1 秒后打印结果。

如果您想要免费的数学软件,请查看 Maxima 或 Sage。

于 2008-11-07T22:44:31.547 回答
2

您也可以考虑使用 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/

于 2008-12-30T00:17:30.060 回答
1

几种语言已经内置了对任意大数的支持。例如,您可以使用 Mathematica。我在 Mathematica 中尝试了您的示例,结果有 45,155 位。bc我在 Unix 机器上尝试了同样的例子。bc 支持扩展精度,但不支持扩展;它轰炸了这个例子。

于 2008-11-07T22:38:16.253 回答
1

Lisp 是你的朋友。默认大整数。

于 2008-11-07T22:50:13.577 回答
1

我发现使用没有任意大数字的语言非常令人沮丧:能够对大多数数字使用加法等普通运算符似乎很荒谬,但仅仅因为它的大小而不得不切换到 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
于 2008-11-07T22:51:09.113 回答
1

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

希望这可以帮助...

于 2008-11-08T01:35:09.297 回答
0

我不知道 C#,但我知道 Ruby 编程语言有 BigDemical 类,它似乎允许无限大小的数字。

于 2008-11-07T22:42:04.030 回答
0

Python 有一个 bignum 库。如果您需要用另一种语言实现 bignum 库,您至少可以使用 Python 库作为验证您的工作的参考。请注意,如果您不知道自己在寻找什么,bignums 有一些实现陷阱不会立即显而易见。

于 2008-11-09T00:40:28.487 回答