Math 什么编程语言可以让我输入很长的数字而不转换成浮点?

Math 什么编程语言可以让我输入很长的数字而不转换成浮点?,math,programming-languages,digits,Math,Programming Languages,Digits,执行以下操作的最佳方法是什么 输入一个很长的数字,比如说500000位长的数字,而不用科学记数法;然后我就能用它来做数学,比如+2等等 先谢谢你 编辑:它是一个500000位的正整数。Mathematica允许你做这样的数学运算,你可以用它编写完整的程序 否则,您寻求的是一个“库”,以扩展另一种编程语言(如Python或Java)的内置功能 在Python的例子中,允许您指定数学运算的精度。Perl有一个bignum模块来做这类事情,Python本机支持它。我知道Erlang支持无限大小的整数算

执行以下操作的最佳方法是什么

输入一个很长的数字,比如说500000位长的数字,而不用科学记数法;然后我就能用它来做数学,比如+2等等

先谢谢你


编辑:它是一个500000位的正整数。

Mathematica允许你做这样的数学运算,你可以用它编写完整的程序

否则,您寻求的是一个“库”,以扩展另一种编程语言(如Python或Java)的内置功能


在Python的例子中,允许您指定数学运算的精度。

Perl有一个
bignum
模块来做这类事情,Python本机支持它。

我知道Erlang支持无限大小的整数算术。

而且有本机支持,库存在于,Haskell(使用GHC时)还内置了对任意长整数的支持。下面是一个显示转换为字符串的数字长度的片段

Prelude> length $ show $ 10
2
Prelude> length $ show $ 1 + 2^2000000
602060
Prelude> let x = 2^200000
Prelude> let y = 2^200000 + 5
Prelude> y - x
5
或者,您可以在交互式控制台上键入
2^200000
,然后等待几分钟,让它打印出所有600k+字符。我觉得这种方式演示起来比较简单。

Perl、Python、Ruby和Java都可以做到这一点。外部库用于其他所有内容。 我比较喜欢Ruby和Python,因为它们会自动从
Fixnum
切换到
Bignum
。(Python:<代码> int > <代码>长)

< P>在C或C++中,可以使用.< /P>
在Perl中,您可以使用.

Python在不使用特殊库的情况下即可完成这项工作。Unix系统的“bc”(伪装成计算器的完整编程语言)也是如此。

您要寻找的不一定是一种语言,而是一个任意精度的库


GMP将是C/C++中的一个快速实现,而处理大整数的脚本语言可能会使用类似的东西。

Common Lisp也内置了对任意大数的支持…

MIT/GNU Scheme支持任意大数。

Python本身就很好,但使用它会更好(这将它连接到其他人提到的GMP库,或者类似于MPIR的工作[[正在进行的工作;-)]])。考虑:

$ python -mtimeit -s'x=int("1"*9999); y=int("2"*9999)' 'x*y'
100 loops, best of 3: 6.46 msec per loop
i、 例如,在纯Python中,将两个10K数字整数相乘大约需要6.5毫秒。还有…:

$ python -mtimeit -s'from gmpy import mpz; x=mpz("1"*9999); y=mpz("2"*9999)' 'x*y'
1000 loops, best of 3: 326 usec per loop
…有了gmpy,操作速度将提高20倍左右。如果您有数百位而不是数千位数字,则更为极端:

$ python -mtimeit -s'x=int("1"*199999); y=int("2"*199999)' 'x*y'
10 loops, best of 3: 675 msec per loop
vs

因此,gmpy的速度优势是200k位数而不是10k位数的38倍左右


如果您经常需要处理这种数量级的整数,Python+gmpy确实是一个可行的解决方案(当然我有偏见,因为我在过去几年中编写并关注gmpy,正是因为我♥ Python(嘿,我的车牌是P♥thon!-)在我的一个爱好(组合算术)中,我确实需要经常处理这样的数字;-)。

许多函数语言天生支持任意精度的数字。这里已经提到了一些,但为了完整起见,我将重复它们:

  • 大多数版本的
  • 哈斯克尔的前任
  • 方案的一些实现。特别是


我觉得Python在这方面非常好。

我现在就试试Mathematica。你是在处理整数,还是处理也有小数部分的数字?在任何一种情况下,Mathematica都会起作用,我只是想知道还有什么其他的解决方案适用于你。如果你指定一个精度,你就不能对一个有500000个零的数字加2。。除非您使用bignum模块或。。。二郎。。这是免费的。上次我查到Mathematica很贵。。。而且比仅仅需要(几乎)无限的精确性要强大得多。我以为有一个试验。。。但你必须申请。我可能会尝试Erlang或Python。你对科学符号有什么看法?几乎任何语言都会。不过,您可能需要编写一些代码:-)Python根本不需要任何特殊的库就可以完成。此外,bc Unix程序是一种完整的编程语言,它也可以在没有任何特殊库的情况下完成。当然,他指的是浮点。@snicker:可以,它只需要很多数字。双精度浮点数(这只是基于科学记数法的一种实现)在很大程度上没有足够的数字,但一般来说,科学记数法没有固有的限制。+1 Erlang为此非常流行。而且它是免费的。。。与Mathematica不同,Erlang没有任意精度浮点。进一步说明:浏览了Erlang的源代码后,整数算术是用C编写的,因此在我看来它是非常原生的。Python没有bignum模块:它的整数本机具有无限精度。具体取决于Haskell的版本。例如,Hemium不支持任意精度的算术运算。Erlang也支持这种运算,其他几种编程语言也不支持这种运算。我不会将Java的BigInteger类描述为“本机支持”。我不知道,BigInteger并不像Python提供的那样“本机”或易于使用,但至少它是随语言提供的。
$ python -mtimeit -s'from gmpy import mpz; x=mpz("1"*199999); y=mpz("2"*199999)' 'x*y'
100 loops, best of 3: 17.8 msec per loop