文档章节

使用MicroPython计算任意位数圆周率

shaoziyang
 shaoziyang
发布于 2016/11/04 10:38
字数 446
阅读 334
收藏 8

计算任意精度的圆周率是个有趣的主题,得益于python的强大计算能力,我们在MicroPython中也可以轻松的计算pi的数值。

先输入下面的代码:

"""
文件:pi.py
说明:用MicroPython计算任意精度圆周率计算
作者:未知
版本:
时间:
修改:邵子扬
      2016.5
      v1.1
http://bbs.micro-python.com/forum.php
"""
import time

def pi(places=10):
  # 3 + 3*(1/24) + 3*(1/24)*(9/80) + 3*(1/24)*(9/80)*(25/168)
  # The numerators 1, 9, 25, ... are given by (2x + 1) ^ 2
  # The denominators 24, 80, 168 are given by (16x^2 -24x + 8)
  extra = 8
  one = 10 ** (places+extra)
  t, c, n, na, d, da = 3*one, 3*one, 1, 0, 0, 24

  while t > 1: 
    n, na, d, da = n+na, na+8, d+da, da+32
    t = t * n // d
    c += t
  return c // (10 ** extra)

def pi_t(n=10):
    t1=time.ticks_us()
    t=pi(n)
    t2=time.ticks_us()
    print('elapsed: ', time.ticks_diff(t1,t2)/1000000, 's')
    return t

def pi2(n=10):
    r=6*(10**n)*1000
    p=0
    k=0
    c=r//2
    d=c//(2*k+1)
    while d>0:
        p=p+d
        k=k+1
        k2=2*k
        c=c*(k2-1)//(4*k2)
        d=c//(k2+1)
    return p//1000

def pi2_t(n=10):
    t1=time.ticks_us()
    t=pi2(n)
    t2=time.ticks_us()
    print('elapsed: ', time.ticks_diff(t1,t2)/1000000, 's')
    return t

 

我们将它复制到STM32F7DISC中(STM32F7DISC已经下载了MicroPython固件),然后测试一下计算速度。(在其它MicroPython开发板上也可以进行这个测试)

MicroPython v1.8 on 2016-05-15; F7DISC with STM32F746
Type "help()" for more information.
>>> import pi
>>> npi=pi.pi_t(1000)
elapsed:  0.221486 s
>>> npi=pi.pi_t(2000)
elapsed:  0.793141 s
>>> npi=pi.pi_t(5000)
elapsed:  4.981964 s
>>> npi=pi.pi_t(10000)
elapsed:  21.02012 s
>>>


从运行结果可以看出,虽然不是很快,但是考虑到STM32的资源和性能,结果已经出乎预料了,毕竟计算函数还不到10行代码,没有做深度优化。最后打印出1000位的圆周率,大家可以和标准结果比较看看。


>>> pi.pi(1000)
31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989
>>>

 

© 著作权归作者所有

共有 人打赏支持
shaoziyang
粉丝 13
博文 76
码字总数 25946
作品 0
武汉
程序员
私信 提问
加载中

评论(3)

shaoziyang
shaoziyang

引用来自“小薇”的评论

pi2方法是干嘛的?
另外一种计算方法。
小薇
小薇
pi2方法是干嘛的?
小薇
小薇
牛牛牛
人生苦短,用 RT-Thread MicroPython 享受编程的乐趣

在 i.MX RT1050 EVK 开发板上实现这样的一个读取板载的 6 轴传感器信息和系统 CPU 利用率等信息,实时显示到网页中效果,你猜需要多少代码? 事实上 RT-Thread 的同事利用 RT-Thread MicroP...

RTThread物联网操作系统
2018/05/02
0
0
MicroPython支持的开发板:高性能、低成本会python就能做创客

Python的开放、简洁、黏合正符合了现发展阶段对大数据分析、可视化、各种平台程序协作产生了快速的促进作用。自Python3的发布到现在已有五六年的时间,从刚发布的反对声音到慢慢被接受与喜欢...

bodasisiter
2017/04/11
1
0
MicroPython技术及应用前景

1 Micropython技术是什么? MicroPython极精简高效的实现了Python3语言。它包含Python标准库的一小部分,能在单片机和受限环境中运行。 1.1 MicroPython发展 由剑桥大学的理论物理学家乔治....

bodasisiter
昨天
0
0
MicroPython技术及应用定义

MicroPython极精简高效的实现了Python3语言,包含Python标准库的一小部分,在单片机和受限环境中运行。 1.1、MicroPython发展 由剑桥大学的理论物理学家乔治?达明设计,遵循MIT许可协议,与A...

bodasisiter
01/09
0
0
Python玩转单片机:从基础到进阶,几款主流的开发板大盘点!

Python俨然已成为当下最热门的编程语言(可以说没有之一)。Python火到什么程度?它将被加入小学生教材,纳入高考,估计在不远的将来可能会成为一项常用的技能。 学习python能做什么? 可以快...

bodasisiter
2018/09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
1
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0
推荐转载连接

https://www.cnblogs.com/ysocean/p/7409779.html#_label0

小橙子的曼曼
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部