matlab 计算结果显示a=1,但判断语句a==1,返回值是0,为什么会这样,又没办法令a==1的返回值是1
a=min((1/3)/(1-2/3),(2/3)/(2/3))a=1a==1ans0a<1ans1a=max((1/3)/(1-2/3),(2/3)/(2/3))a=1...
a=min((1/3)/(1-2/3),(2/3)/(2/3))
a=1
a==1
ans 0
a<1
ans
1
a=max((1/3)/(1-2/3),(2/3)/(2/3))
a=1
a==1
ans
1
为什么都是a=1,但判断结果不同,又没办法令第一种情况a==1,返回值是1 展开
a=1
a==1
ans 0
a<1
ans
1
a=max((1/3)/(1-2/3),(2/3)/(2/3))
a=1
a==1
ans
1
为什么都是a=1,但判断结果不同,又没办法令第一种情况a==1,返回值是1 展开
1个回答
展开全部
问题在于程序会计算1-2/3,虽然精度很高,但和我们用分数进行的计算并不一样,min时出现的1其实是四舍五入而来的,而2/3/2/3则不存在四舍五入,所以他的结果就是1,
要让min情况下返回1,可以将2/3进行符号计算,这样就不存在四舍五入了,比如
a=min(eval((1/3)/(1-sym(2/3))),(2/3)/(2/3))
要让min情况下返回1,可以将2/3进行符号计算,这样就不存在四舍五入了,比如
a=min(eval((1/3)/(1-sym(2/3))),(2/3)/(2/3))
追问
感谢,还想问一下,因为这个语句是在一个循环中,是不是将初始值都化为字符计算,可以避免这种问题
追答
应该不用吧,因为a只在循环里面才开始出现,而且个人感觉能不用sym就不用sym,具体境况还得你自己定
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询