我执行该代码的载体,但我希望它不工作:获取浮点数的指数
A = 1:0.1:1.4
A =
1.0000 1.1000 1.2000 1.3000 1.4000
A == 1.3000
ans =
0 0 0 0 0
我想我会得到:
ans =
0 0 0 1 0
为什么它不起作用?我该如何让它按照我的意愿工作?
谢谢。
我执行该代码的载体,但我希望它不工作:获取浮点数的指数
A = 1:0.1:1.4
A =
1.0000 1.1000 1.2000 1.3000 1.4000
A == 1.3000
ans =
0 0 0 0 0
我想我会得到:
ans =
0 0 0 1 0
为什么它不起作用?我该如何让它按照我的意愿工作?
谢谢。
这是比较常用的浮动。尝试A(4)-1.3
。它会给你一些小但不是零的东西。这是因为浮标具有有限的精度。一般来说,最好不要测试与花车平等。
通常的方法是定义一个小容差(例如1e-9
),并以比较宽容到:
abs(A-1.3)<1e-9
实用提示:如果您经常在相同的数字范围内工作(如我),您可以定义一个名为'epsilon'或'eps'的函数例如,并确保它始终在你的道路上。函数做的唯一事情就是返回类似'1e-9'的东西,它可以让你轻松而一致地进行这种比较。如果您尝试查找进行浮点比较的地方,也可以帮助您。 –
这是因为双精度。尝试format long g
再次看看A,你会发现它不完全是1.3。看看MATLAB wiki了解这是为什么。对浮点数做平等测试绝不是一个好主意。
0.1具有写在基体2时的无限扩展: 0.000110011001100110011001100110011001100110011001100110011001100
壳代码以获得:
bc -lq
obase=2
1/10
Matlab的将截断到50个数字(?)。因此,0.1 * 3和0.3是不同的。
您可能想阅读一篇有关[浮点比较Matlab]的文章(http://matlabgeeks.com/tips-tutorials/floating-point-comparisons-in-matlab/) – jkshah
并且:http:// docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – sebastian