在做优化算法时,某些自适应参数会根据代价函数的大小确定。代价函数大的时候是一个很大的数,小的时候是一个无限接近零的数,此时代价函数值处于被除数的位置,当太小时,python报错ZeroDivisionError: float division by zero,请问怎么能够很好地解决,希望老师们能给出建议和解决措施。
测试了一下,Python解释器认为1/1e-308是最大的浮点数,1/1e-309就是无穷大了,1/1e-323还是无穷大,但是1/1e-324就溢出,1e-100/1e-324也照样溢出,因此可以认为1e-324被解释器视为0。建议将1e-323作为阈值,小于该阈值时,就避开除法操作。
>>> 1/1e-308
1e+308
>>> 1/1e-309
inf
>>> 1/1e-323
inf
>>> 1/1e-324
Traceback (most recent call last):
File "<pyshell#76>", line 1, in <module>
1/1e-324
ZeroDivisionError: float division by zero
>>> 1e-100/1e-324
Traceback (most recent call last):
File "<pyshell#77>", line 1, in <module>
1e-100/1e-324
ZeroDivisionError: float division by zero
用string去做大数除法吧..
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y
可以把除数先乘以一个比较大的数,计算完之后再乘以这个数。