afskdol 2021-12-08 17:55 采纳率: 66.7%
浏览 61
已结题

python中的运算问题

from math import sqrt
print(sqrt(3)*sqrt(3)==3)
为什么输出为FAlSE?
最好能贴篇讲这个的文章

  • 写回答

3条回答 默认 最新

  • 小康2022 新星创作者: python技术领域 2021-12-08 18:45
    关注

    【有帮助请采纳】
    计算机里面存储数字的数据有许多类型,主要有整型(int)和浮点型(float)等等,整型就是整数数据,简单来说,浮点型就是带小数点的数据。
    整型数据,如 1 ,是一个准确的值,存储也很容易。但是对于一些浮点型数据就不一样了,比如 3.141592653589793... 以及 2.718281828459045... 等等之类在小数点后面有很长、很多数字的浮点数据就要占用计算机很多的存储空间,但是,计算机也只能存储有限的数据,对于小数点后面过多的位数,计算机会截断后面的数据只保存前面的数据,因此,浮点数据是不准确的
    就比如说,在计算机里面,1.0 是不等于 1 的,1 就是 1,这是没有问题的,但 1.0 实际的储存值在数学上的值不等于 1.0
    这里的 sqrt(3) 计算的出的浮点数也是不准确的,它在计算机的实际存储值为 1.732050807568877193176604123436845839023590087890625,再后面位数的数据就不会储存了,所以两个 sqrt(3) 相乘得到的结果自然就比 3 要小,判断为 Flase
    解决办法:
    判断两者的差的绝对值小于 1e-16 即可

    print(abs(sqrt(3)*sqrt(3)-3)<1e-15)
    

    【有帮助请采纳】

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月11日
  • 创建了问题 12月8日