from math import sqrt
print(sqrt(3)*sqrt(3)==3)
为什么输出为FAlSE?
最好能贴篇讲这个的文章
python中的运算问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注【有帮助请采纳】
计算机里面存储数字的数据有许多类型,主要有整型(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)【有帮助请采纳】
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录