代码之家  ›  专栏  ›  技术社区  ›  Jack B Nimble

我如何处理庞大的数字?[副本]

  •  1
  • Jack B Nimble  · 技术社区  · 18 年前


    Most efficient implementation of a large number class

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

    9 回复  |  直到 9 年前
        1
  •  6
  •   Community Mohan Dere    9 年前
        2
  •  3
  •   Bjarke Ebert    18 年前

    Python ,但我认为Scheme和Ruby等语言也支持大量数据。

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

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

        3
  •  2
  •   ADL ADL    17 年前

    您也可以考虑使用Frink,Frink是一种具有处理测量单元的本机能力的语言。 它毫不费力地计算2^150000,处理分数(例如1/3+2/5-->11/15),计算3米+2英寸-->是一种完整的编程语言。

    Frink-版权所有2000-2008 Alan Eliasen,eliasen@mindspring.com http://futureboy.us/frinkdocs/

        4
  •  1
  •   John D. Cook    18 年前

    有几种语言内置了对任意大数的支持。例如,你可以使用Mathematica。我在Mathematica中尝试了你的例子,结果是45155位。我试过同样的例子 bc

        5
  •  1
  •   Paul Nathan    18 年前

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

        6
  •  1
  •   Rich    18 年前

    我发现使用一种没有任意大数字的语言非常令人沮丧:能够在大多数数字上使用像加法这样的普通运算符,但仅仅因为BigInt实例的大小而不得不在BigInt实例上切换到方法调用,这似乎是荒谬的。

    一大堆语言都有更完整的数字塔,并在需要时无缝地强制;e、 例如,Allegro Common Lisp在1ms内计算并打印所有45155位(expt 2 150000)。

    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
    
        7
  •  1
  •   AndyUK    18 年前

    http://sourceforge.net/projects/calc/

    它可以编程用于困难或长时间的计算,并可以接受来自命令行的参数。在交互模式下,它一次接受一个命令,并显示答案。

    通常,这些命令只是一些表达式,例如:

        3 * (4 + 1)
    

    calc将打印:

        15
    

    例如:

        3 * 19 ^ 43 - 1
    

    将产生:

        29075426613099201338473141505176993450849249622191102976
    

        2 ^ 23209 - 1
    

    将打印:

        402874115778988778181873329071 ... loads of digits ... 3779264511
    

    希望这有助于。。。

        8
  •  0
  •   epochwolf    18 年前

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

        9
  •  0
  •   ConcernedOfTunbridgeWells    18 年前

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