zoukankan      html  css  js  c++  java
  • 对pow函数的思考

    今天在学习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()函数其结果误差极小,可以忽略不计,直接使用。

  • 相关阅读:
    R语言数据框部分笔记
    R语言数组部分的笔记
    R语言向量部分的笔记
    计算机等级考试二级python 第二章 python的基本语法元素
    计算机二级教程python第一章 程序设计语言
    Linux C实现发邮件功能
    telnet收发邮件
    Linux进(线)程同步各种锁
    About Mutex
    wait()与waitpid()与pthread_join()
  • 原文地址:https://www.cnblogs.com/zj666666/p/12419627.html
Copyright © 2011-2022 走看看