MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   MATLAB ismember()问题 (https://www.labfans.com/bbs/showthread.php?t=22740)

poster 2019-12-10 16:49

MATLAB ismember()问题
 
以下命令返回1:

ismember(-0.6, -1:.1:.9) 但是下一条命令返回0:

ismember(-0.1, -1:.1:.9) 即使-0.1明显位于-1:.1:.9。

有人知道发生了什么吗?


回答:
问题是,当您从-1.0开始并重复添加0.1时,得到的数字与直接指定-0.1时得到的数字略有不同。这是因为浮点错误累积。就像1/3不能精确地用十进制表示(变成0.33333 ...)一样,许多十进制数字也不能精确地用二进制表示。转换为二进制时,0.1实际上非常接近于0.1。由于在使用该浮点数进行算术时会出现轻微的错误,因此此小差异会累积并变得越来越大。

从[URL]http://www.mathworks.com/matlabcentral/newsreader/view_thread/246492[/URL] :

<blockquote> Ashwini Deshpande写道:
[INDENT]我有一个矩阵如下

a = 0:0.1:1; 当我尝试使用以下过程查找矩阵a是否存在0.300时,

>> [tf, loc]=ismember(0.3,a) 我得到以下结果:

tf = 0 loc = 0 但这是给我的, tf = 1 , loc =4 。

[/INDENT]实际上,您得到的是[I]正确的[/I]结果。看看会发生什么:

v=0:.1:1; n=0.3; sprintf('%30.20f\n',v(4),n) %{ 0.30000000000000004000 %


所有时间均为北京时间。现在的时间是 23:33

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.