本帖最后由 tobot 于 2021-8-11 10:33 编辑
我们知道,圆周率π是一个无限不循环小数(也称为无理数),有时候可以使用计算π值的时间来度量cpu的好坏,看到网友@MianJi喜欢用本次测评板和树莓派3B做比较,我也来凑个热闹吧,手边有现成的树莓派3B、4B,不过都是1G版的,性能上可能不低于i.MX8M Mini,但内存的差异可能让它们在测评结果上会吃一点亏。
在米尔MYS-8MMQ6-8E2D-180-C的原生态系统中,只有python2和python3,连最常用的gcc都没找到,java、ruby、go、php什么都没有。。。,不过shell里面居然有bc,也可以试试,那就主要用python比较吧。
下面介绍几种计算方法:
1、反三角函数的幂级数展开
我们知道三角函数中对于π是一个非常特殊的值,比如sin(π/2)=1,tan(π/4)=1等,因此完全可以用反正弦或者反正切的幂级数展开计算pi值。
例如
反余切公式中,令x=1,则arctan(x)=π/4,展开并整理
编译工具
|
命令
|
循环次数
|
树莓派3B
|
树莓派4B(1G)
|
MYS-8MMX
|
shell
|
time bash trigonometric.sh
|
10000
|
|
|
|
bc
|
time bc -q trigonometric.bc
|
10000000
|
|
|
|
python2
|
time python2 trigonometric.py
|
50000000
|
|
|
|
python3
|
time python3 trigonometric.py
|
50000000
|
|
|
|
- 网格法
圆内的点到圆心的距离都小于圆的半径,那么把1/4个圆分成n*n个格子,数一下有多少格子落在圆内,再除以格子总数,乘以4,就能计算出π值了。
编译工具
|
命令
|
循环次数
|
树莓派3B
|
树莓派4B(1G)
|
MYS-8MMX
|
shell
|
time bash grid.sh
|
10000
|
|
|
|
bc
|
time bc -q grid.bc
|
10000000
|
|
|
|
python2
|
time python2 grid.py
|
50000000
|
|
|
|
python3
|
time python3 grid.py
|
50000000
|
|
|
|
- 倍乘法(multipli)
圆周率可以用
计算。
编译工具
|
命令
|
循环次数
|
树莓派3B
|
树莓派4B(1G)
|
MYS-8MMX
|
shell
|
time bash multipli.sh
|
10000
|
|
|
|
bc
|
time bc -q multipli.bc
|
5000000
|
|
|
|
python2
|
time python2 multipli.py
|
50000000
|
|
|
|
python3
|
time python3 multipli.py
|
50000000
|
|
|
|
- 蒙特卡罗方法(随机数法)
用通过概率实验所求的结果来估计参数,这样的方法称为蒙特卡罗方法(Monte Carlo method)。
可以随机在正方形内取一点,在其内切圆内的概率为π/4。我们可以据此计算出圆周率。
编译工具
|
命令
|
循环次数
|
树莓派3B
|
树莓派4B(1G)
|
MYS-8MMX
|
shell
|
time bash rand.sh
|
1000000
|
|
|
|
python2
|
time python2 rand.py
|
50000000
|
|
|
|
python3
|
time python3 rand.py
|
50000000
|
|
|
|
从上述的结果来看,NXP的i.MX8M Mini的性能略低于博通BCM2711,高于博通BCM2837。
为什么会内存溢出?