我想知道为什么通过比较sage cas online中的两个实数(例如bool(r1 == r2)
),它会返回错误的布尔值。你知道吗
例如第1条:
(x,y,z)=var('x,y,z');
x=2
r1= (sin(x)).n()
r2= (sin(x)).n(digits=3)
print r1, type(r1)
print r2, type(r2)
bool(r1==r2)
0.909297426825682== 0.909 是的
但如§2
(x,y,z)=var('x,y,z');
x=2
r1= (sin(x)).n()
r2= (0.909).n(digits=3)
print r1, type(r1)
print r2, type(r2)
bool(r1==r2)
0.909297426825682== 0.909 假
或如§3
(x,y,z)=var('x,y,z');
x=2
r1= 0.909297426825682.n(digits=3)
r2= (0.909).n(digits=3)
print r1, type(r1)
print r2, type(r2)
bool(r1==r2)
0.909英寸== 0.909 假
在我的项目中,我想比较可以四舍五入的用户答案(例如,小数点后3位)和53位CAS解决方案(可以是符号值和数字值)。桑克斯
首先请注意,声明x,y,z为变量并不是您想要的,因为这是一个符号变量;您只需做
x=2
就可以了。我希望这不是真的相关,但有帮助。你知道吗至于你的问题,你的数字实际上有微妙的不同。它们打印出来的方式不是内部表示。你知道吗
您可以看到,计算机对它们的表示略有不同,可能是由于原始的差异
鉴于
数字精度的工作方式与截断不完全相同,它保留了一些额外的信息以保持精确。你知道吗
寓意:除非你真的明白实数和电脑里的数字不一样,否则对数字运算要非常小心。幸运的是,从最实际的角度来看,约翰的评论可以很好地为你服务,否则我就有麻烦了,因为我绝对不是一个数字分析师。你知道吗
相关问题 更多 >
编程相关推荐