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

为什么等价变换的3个式子,返回值却不同?


-math.sqrt(b*b/(4*a*a)-c/a)-b/(2*a)

-b/(2*a)-math.sqrt(b*b/(4*a*a)-c/a)

(-b-math.sqrt(b*b/(4*a*a)-4ac))/(2*a)

这三个式子怎么看都是等价变换吧?为什么在计算(2,3,0)的时候会分别返回-0.0;-1;-1.5这三个值?


正在回答

2 回答

找到原因了,这个是float和int之间的类型转换问题;

(-b-math.sqrt(b*b-4ac))/(2*a)因为sqrt返回类型是float,并且式子中不存在类型转换,最后的“/”运算也是float类型的运算,所以是正确的;

而另两个式子在调用sqrt()之前就已经进行了int类型的“/”运算,int类型的“/”运算结果依然会是int,会摈除小数部分,所以最终结果就不同了;解决的方法是可以在计算数值之前用float()将a;b;c转换成float

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

第三个公式与前面两个不一样,目前前面两个还不太确定是啥情况

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

慕雪6475486 提问者

第三个式子我键入错了,其实是: (-b-math.sqrt(b*b-4ac))/(2*a) 但输出就是不同,想了半天想不明白
2019-01-10 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758623    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

为什么等价变换的3个式子,返回值却不同?

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