c++求n的几次方_如何求

本文介绍了使用C++通过逼近法求解大数的次方,特别是在N非常大时,探讨了decimal模块在提高计算精度方面的作用。虽然文中以π为例,但主要目的是理解逼近法计算过程,对于计算三角形面积的精确方法则未作深入讨论。
摘要由CSDN通过智能技术生成
在历史长河中,求π一直是重要的研究问题。我们都知道π是一个无理数,所以永远无法求出其真值,只能不断地逼近它的真值。而我们的祖爷–祖冲之在千年前就计算出π介于3.1415926到3.1415927之间,在求π的历史上名副其实第一名。 据推测,祖爷是用割圆术求π的。割圆术讲的就是用圆的正N内割多边形的面积代替圆的面积,然后求π,现在我们想一下如果圆的半径为1,有内割圆正N多边形和外切圆正N多边形,那么就有 正N外切多边形面积>π>正N内割多边形面积 。有图为证,手画垃圾图,勉强看851b7f01e9b5ba22dd337bb3d44bfb0b.png1fbb2e6903fc6542bf4a8004fc28a5a9.png

如果N足够大,那么π就会越来越接近真值,这就是我们今天要讲的逼近法。实例如下:

"""计算π的值
用面积法夹逼π的值
割圆正多边面积
the statistics of this file:
lines(count) understand_level(h/m/l) classes(count) functions(count) fields(count)
000000000057 ----------------------h 00000000000000 0000000000000002 ~~~~~~~~~~~~~
"""import timeimport decimalimport math
__author__ = "于C同行"
D = decimal.Decimaldef tangent_circle_area(side_count, radius=1):"""计算圆的切正n多边形的面积
:param side_count: 正多边形的边数
:param radius: 圆的半径
:return: 正n多边形的面积
"""
pi = D(str(math.pi))
half_angle = pi/side_count
half_side_length = D(radius*math.tan(half_angle))
height = D(radius)
area = side_count*half_side_length*heightreturn areadef cut_circle_area(side_count, radius=1):"""计算圆的割正n多边形的面积
:param side_count: 正多边形的边数
:param radius: 圆的半径
:return: 正n多边形的面积
"""
pi = D(str(math.pi))
half_angle = pi/side_count
half_side_length = D(radius*math.sin(half_angle))
height = D(radius*math.cos(half_angle))
area = side_count*half_side_length*heightreturn areaif __name__ == '__main__':print(f'当前时间:{time.ctime()}')print()
n = 12288
min_pi = cut_circle_area(n)
max_pi = tangent_circle_area(n)print(f'真值π={math.pi}')print(f'在进行{n}次割圆与切圆计算后,得到{min_pi})
当N=12288时,结果如下: 86fe97455ba90e1baf896e2857943040.png

当N=100000000时,结果如下:

c125d3c8e3b47d185a1323001398ead0.png

代码中用了decimal模块,只是为了计算时更准确,把它的decimal.Decimal类当成一个小数就行了。由于我们在计算正N多边形面积的时候使用了π来计算三角形的面积,所以这样计算正N多边形的面积是不对的。那么就又要夸一下祖爷了,祖爷用了最落后的工具却算出了高精度的值。不过,今天的主题只是为了了解求π的过程,至于如何准确地求三角形的面积,这个我们不考虑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值