大数计算神器KCalc

最近闲来无事,研究了一下各个系统自带的计算器,测试了一下各个计算器能够运行的最大计算。

1、Windows 7

QQ图片20170818145810

运行阶乘,最大能到3248,大概就是科学计数法到了9999后面就溢出了。

2、Windows 10

QQ图片20170818150027

一样,可以认为就是换了一个皮肤。

3、Ubuntu

QQ图片20170818150712

颇有些意外,999!都无法计算。

4、ubuntu mate-calc

QQ图片20170818151100

这是99999!的结果,四五秒钟可以出结果,单线程。这个大数让人吃惊吧,赶紧研究一下他的源码。

https://github.com/mate-desktop/mate-calc

mate-calc基于Calctool,一位sun工程师的作品,经过不断改进,最后结合一位名叫Richard Brent的数学家的FORTRAN程序,用C语言完成。

$:time mate-calc -s 99999!
2.824229407×10⁴⁵⁶⁵⁶⁸

real 0m10.455s
user 0m10.415s
sys 0m0.029s

由于是在虚拟机里面测试的(物理机i3-3120m),所以运行时间比较长,10秒左右。

随后尝试加大数值,但程序是单线程,可以出结果,时间稍长,比较吃内存。

5、KCalc

这个程序简直让前面几个计算器汗颜!

99999!秒出结果,如下:

QQ图片20170818153808

不光精度高,关键是秒出结果啊,这点很重要,算法很牛X!

QQ图片20170818154302

这是999999!的结果,秒出。

QQ图片20170818154419

7个9的阶乘。几乎是秒出。

a

8個9的,2分鍾左右出結果。

9个9的,虚拟机的内存太小,卡了一下,应该可以出结果。虚拟内存蹭蹭的往上跳,果断终止了。

题外:开始有点傻,家里的电脑是ubuntu,没装kde,尝试从源码(https://github.com/KDE/kcalc)编译KCalc,结果依赖太多,好麻烦,转念一下,直接用二进制试试。

sudo apt install kcalc

他自己安装了一堆依赖后,就可以用了。

 

还有几个有趣的问题:

31! 的结尾有多少个0?为什么?

2的100次方到底有多大?

如何算99999的阶乘? 

99999的阶乘的第二位数是几?

总结:电脑最开始研制出来,就是为了科学计算,电脑的本质,还是服务于计算的,这个过程中,算法尤为重要。不过突发奇想,mate-calc单线程的计算,貌似可以用于CPU性能测试,比如计算999999999!(9个9的阶乘),然后对比运行时间。

你现在用的什么系统呢?晒一个运算时间瞅瞅,特别是Mac机,手头没得机器测试,希望各位提供数据。