为了账号安全,请及时绑定邮箱和手机立即绑定

为什么没有我想象中的精准度损失?

import math

def is_sqr(x):
    y=int(math.sqrt(x))
    return y*y==x
print filter(is_sqr, range(1, 101))


为什么要用int()呢? 如果开完方y为非整数,那么y*y不应该会有精准度上的损失吗? 那么y*y!=x啊

正在回答

2 回答

这题本来就是要让不能开方的数的精度损失掉,这样y*y就不等于x了,函数就好返回False,刚好达到目的

0 回复 有任何疑惑可以回复我~
#1

慕田峪6184375 提问者

那我上面的那个例子里 ,11不能开方 ,但是它却没有精度损失啊!
2016-05-30 回复 有任何疑惑可以回复我~

有精度损失啊,这个段程序一看根本行不通嘛,这个可以 相信自己

0 回复 有任何疑惑可以回复我~
#1

慕田峪6184375 提问者

import math s1=math.sqrt(11) print(s1,s1*s1) s2=math.sqrt(12) print(s2,s2*s2) 这个用pycham运行出来结果是: 3.3166247903554 11.0 3.4641016151377544 11.999999999999998 感觉很不可思议啊,明明:11、 12 开完方都不是整数 ,我感觉s1*s1不等于11,s2*s2不等于12,为什么跟我想的不一样啊?
2016-05-14 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

为什么没有我想象中的精准度损失?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信