Python:计算pi时“long int太大而不能转换为float”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:计算pi时“long int太大而不能转换为float”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2343字,纯文字阅读大概需要4分钟。
内容图文
![Python:计算pi时“long int太大而不能转换为float”](/upload/InfoBanner/zyjiaocheng/800/195b121902d84f008789951d7f5eb55f.jpg)
当使用python脚本使用Gauss-Legendre算法计算pi时,我收到此错误.在获得此项之前,您最多只能使用1024次迭代:
C:\Users\myUsernameHere>python Desktop/piWriter.py
End iteration: 1025
Traceback (most recent call last):
File "Desktop/piWriter.py", line 15, in <module>
vars()['t' + str(sub)] = vars()['t' + str(i)] - vars()['p' + str(i)] * math.
pow((vars()['a' + str(i)] - vars()['a' + str(sub)]), 2)
OverflowError: long int too large to convert to float
这是我的代码:
import math
a0 = 1
b0 = 1/math.sqrt(2)
t0 = .25
p0 = 1
finalIter = input('End iteration: ')
finalIter = int(finalIter)
for i in range(0, finalIter):
sub = i + 1
vars()['a' + str(sub)] = (vars()['a' + str(i)] + vars()['b' + str(i)])/ 2
vars()['b' + str(sub)] = math.sqrt((vars()['a' + str(i)] * vars()['b' + str(i)]))
vars()['t' + str(sub)] = vars()['t' + str(i)] - vars()['p' + str(i)] * math.pow((vars()['a' + str(i)] - vars()['a' + str(sub)]), 2)
vars()['p' + str(sub)] = 2 * vars()['p' + str(i)]
n = i
pi = math.pow((vars()['a' + str(n)] + vars()['b' + str(n)]), 2) / (4 * vars()['t' + str(n)])
print(pi)
理想情况下,我希望能够插入一个非常大的数字作为迭代值,稍后再回来查看结果.
任何帮助赞赏!
谢谢!
解决方法:
浮点数只能表示最大为sys.float_info.max或1.7976931348623157e的数字.一旦你有一个超过308位的int(或左右),你就会陷入困境.当p1024有309位时,您的迭代失败:
179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216L
你必须为pi找到一个不同的算法,一个不需要这么大值的算法.
实际上,你必须小心四处浮动,因为它们只是近似值.如果您修改程序以打印pi的连续近似值,它看起来像这样:
2.914213562373094923430016933707520365715026855468750000000000
3.140579250522168575088244324433617293834686279296875000000000
3.141592646213542838751209274050779640674591064453125000000000
3.141592653589794004176383168669417500495910644531250000000000
3.141592653589794004176383168669417500495910644531250000000000
3.141592653589794004176383168669417500495910644531250000000000
3.141592653589794004176383168669417500495910644531250000000000
换句话说,仅经过4次迭代后,您的近似值就会越来越好.这是由于您使用的浮点数不准确,可能从1 / math.sqrt(2)开始.计算pi的许多数字需要非常仔细地理解数字表示.
内容总结
以上是互联网集市为您收集整理的Python:计算pi时“long int太大而不能转换为float”全部内容,希望文章能够帮你解决Python:计算pi时“long int太大而不能转换为float”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。