![]() |
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.