什么编程语言可以让我输入一个很长的数字而不将其转换为浮点数?

时间:2009-10-31 01:45:38

标签: math programming-languages digits

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

输入一个很长的数字,可以说500,000位数字而不用科学记数法;然后我可以用它做数学,比如+2等?

提前谢谢。

编辑:这是一个500,000位正整数。

14 个答案:

答案 0 :(得分:12)

PythonJava具有原生支持,C++C.NET,...的库存在...

答案 1 :(得分:10)

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

答案 2 :(得分:6)

Python开箱即用,没有特殊的库。对于Unix系统来说,'bc'(这是一种伪装成计算器的完整编程语言)也是如此。

答案 3 :(得分:5)

Python本身相当不错,但更好的是gmpy(它将其连接到其他人提到的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

即,在纯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

$ 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

所以,有200k数字而不是10k,gmpy的速度优势是38倍左右。

如果你经常需要处理如此规模的整数,那么Python + gmpy确实是一个可行的解决方案(当然我有偏见,因为我在过去几年里确实创作并关心gmpy,因为我♥Python(嘿) ,我的牌照是P♥thon! - )在我的一个爱好(组合算术)我必须处理这些数字经常; - )。

答案 4 :(得分:4)

Mathematica允许您进行此类数学运算,您可以在其中编写完整的程序。

否则,您所寻求的是扩展其他编程语言(如Python或Java)的内置功能的“库”。

对于Python,decimal module使您能够指定将执行数学运算的精度。

答案 5 :(得分:4)

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 +字符。我认为这种方式更容易证明。

答案 6 :(得分:4)

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

答案 7 :(得分:3)

Perl有一个bignum模块来做这种事情,Python本身就支持它。

答案 8 :(得分:3)

Perl,Python,Ruby和Java都可以做到这一点。其他一切都存在外部库。

我更喜欢Ruby和Python,因为它们会自动从Fixnum切换到Bignum。 (Python:intlong。)

答案 9 :(得分:3)

您正在寻找的不一定是语言,而是一个任意精度的库。

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

答案 10 :(得分:1)

在C或C ++中,您可以使用GMP (Gnu Multi-Precision library)

在Perl中,您可以使用bignum module

答案 11 :(得分:1)

麻省理工学院/ GNU计划支持任意大数字。

答案 12 :(得分:1)

许多函数式语言本身都支持任意精度数。这里已经提到了一些,但我会重复它们的完整性:

答案 13 :(得分:0)

我发现Python非常适合这个。