python中的运算问题

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

【有帮助请采纳】
计算机里面存储数字的数据有许多类型,主要有整型(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)

【有帮助请采纳】

这种浮点数的运算最好是先简化再计算结果判断,判断的时候最好也不要用等于。

开方如果不是正好能开出来的话,因为不可能保留无限位数精度会有所缺失,再相乘跟原来的数会有微小的差别