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