我做:
T = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703]);
获得:
T =
0.2989 0.5870 0.1140
0.5959 -0.2744 -0.3216
0.2115 -0.5229 0.3114
如果我这样做
T(1,1)==0.2989
我获得了
ans =
0
其他元素相同。 为什么这个?
答案 0 :(得分:2)
MATLAB存储的数字比您通常看到的数字多。 0.2989实际上是0.298936021293776(甚至不是故事的结尾)。 试试你的代码并添加
format long
T(1,1)
但仍然,
T(1,1) == 0.298936021293776
ans =
0
所以试试
T(1,1) - 0.298936021293776
你只是看不到所有的数字。 T(1,1)
就是它应该是的。
答案 1 :(得分:2)
因为他们不平等。它只是一个展示人工制品。要看到这个:
fprintf('%.8f\n', T(1,1))
会给你
0.29893602
答案 2 :(得分:1)
测试浮点数是否完全相等是危险的。默认情况下,MATLAB使用64位来存储浮点值,而0.1
等某些值甚至不能用任意数量的位来精确表示。 T(1,1)
并不完全是0.2989
,您可以在以更高精度打印值时看到它:
>> T = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703])
T =
0.2989 0.5870 0.1140
0.5959 -0.2744 -0.3216
0.2115 -0.5229 0.3114
>> fprintf('%1.10f\n', T(1,1))
0.2989360213
这就是T(1,1) == 0.2989
返回false的原因。测试两个浮点值是否几乎相等更安全,即关于容差值tol
:
>> tol = 1/1000;
>> abs(T(1,1) - 0.2989) < tol
ans =
1
以下是您应该阅读的内容:click