假设我需要计算2 ^ 150000。显然,这个数字将超过int,float或double的大小。如何创建允许正常数学函数但超出基本数字类型的数据类型?
如果这是“依赖于您使用的语言”的那种交易。我会说C#。
答案 0 :(得分:6)
答案 1 :(得分:3)
如果C#不是一成不变的,并且你想要一些开箱即用的东西,那么有几种选择。我最熟悉的是Python,但我认为像Scheme和Ruby这样的语言也支持大数字。
Python:2**150000
。大约1秒后打印结果。
如果您想要免费的数学软件,请查看Maxima或Sage。
答案 2 :(得分:2)
您也可以考虑使用Frink,这是一种具有处理测量单位的本机功能的语言。 它毫无困难地计算2 ^ 150000,处理分数(例如1/3 + 2/5 - > 11/15),计算3米+2英寸 - > 3.0508米,是一种完整的编程语言。
Frink - 版权所有2000-2008 Alan Eliasen,eliasen @ mindspring.com http://futureboy.us/frinkdocs/
答案 3 :(得分:1)
多种语言都支持任意大数字。例如,您可以使用Mathematica。我在Mathematica中尝试了你的例子,结果有45,155位数字。我在Unix机器上尝试使用bc
的相同示例。 bc支持扩展精度,但不支持扩展;它轰炸了这个例子。
答案 4 :(得分:1)
Lisp是你的朋友。默认的大整数。
答案 5 :(得分:1)
我发现使用没有任意大数字的语言非常令人沮丧:能够在大多数数字上使用普通运算符(如加法)似乎是荒谬的,但是因为它的大小而必须切换到BigInt实例上的方法调用
一大堆语言拥有更完整的数字塔,并在需要时无缝强制;例如,Allegro Common Lisp在1ms内评估并打印所有45,155位(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
答案 6 :(得分: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
希望这会有所帮助......
答案 7 :(得分:0)
我不知道C#,但我知道Ruby编程语言有BigDemical类似乎允许无限大小的数量。
答案 8 :(得分:0)
Python有一个bignum库。如果您需要用另一种语言实现bignum库,您至少可以使用Python作为验证工作的参考。请注意,如果您不知道自己在寻找什么,那么bignums有一些实现问题并不是很明显。