2013-11-21 72 views
1

我执行该代码的载体,但我希望它不工作:获取浮点数的指数

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 

为什么它不起作用?我该如何让它按照我的意愿工作?

谢谢。

+2

您可能想阅读一篇有关[浮点比较Matlab]的文章(http://matlabgeeks.com/tips-tutorials/floating-point-comparisons-in-matlab/) – jkshah

+1

并且:http:// docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – sebastian

回答

6

这是比较常用的浮动。尝试A(4)-1.3。它会给你一些小但不是零的东西。这是因为浮标具有有限的精度。一般来说,最好不要测试与花车平等。

通常的方法是定义一个小容差(例如1e-9),并以比较宽容到:

abs(A-1.3)<1e-9 
+1

实用提示:如果您经常在相同的数字范围内工作(如我),您可以定义一个名为'epsilon'或'eps'的函数例如,并确保它始终在你的道路上。函数做的唯一事情就是返回类似'1e-9'的东西,它可以让你轻松而一致地进行这种比较。如果您尝试查找进行浮点比较的地方,也可以帮助您。 –

0

这是因为双精度。尝试format long g再次看看A,你会发现它不完全是1.3。看看MATLAB wiki了解这是为什么。对浮点数做平等测试绝不是一个好主意。

1

0.1具有写在基体2时的无限扩展: 0.000110011001100110011001100110011001100110011001100110011001100

壳代码以获得:

bc -lq 
obase=2 
1/10 

Matlab的将截断到50个数字(?)。因此,0.1 * 3和0.3是不同的。