首页 > 其他 > 详细

对pow函数的思考

时间:2020-03-05 15:12:05      阅读:96      评论:0      收藏:0      [点我收藏+]

今天在学习Python时,用pow函数时,意外发现pow(1000,1/3)的结果居然不是10,而是9.999999999999998。

print(pow(1000, 1/3))

输出结果:

9.999999999999998

后面了解到,pow()是通过内置的方法直接调用,内置方法会把参数作为整型,而math模块则会把参数转换为float。
那么会不会是float化的时候出了问题呢。
我们试着将1/3转化为浮点型:

print(float(1/3))

输出结果:

0.3333333333333333

我们发现这里只有16位小数,与是我试着继续扩大他的小数点位数:

a = 1/3
print('%.20f' % a)

输出结果:

0.33333333333333331483

然后我们可以发现他的值永远不可能是将1平均分成3分,就像是数学里的问题:0.9999999999999999999……=1一样,总会有误差在里面。
我们将得到的数字进行运算。

print(1000**0.3333333333333333)

输出结果:

9.999999999999998

成功破案!这就是为什么pow(1000,1/3)的结果不是10的原因。
那怎么解决呢?
当我们使用pow函数时,最后结果可以用math.ceil()(向上取整)来解决输出结果不准确的问题。

import math
a = pow(1000, 1/3)
print(math.ceil(a))

输出结果:

10

当然我们这里讨论的只是跟为整数时的求根问题,如果跟不是整数时不需要用math.ceil()函数,因使用pow()函数其结果误差极小,可以忽略不计,直接使用。

对pow函数的思考

原文:https://www.cnblogs.com/zj666666/p/12419627.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!