Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 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。由于在使用该浮点数进行算术时会出现轻微的错误,因此此小差异会累积并变得越来越大。

http://www.mathworks.com/matlabcentr..._thread/246492

Ashwini Deshpande写道:
我有一个矩阵如下

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

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

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

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

v=0:.1:1; n=0.3; sprintf('%30.20f\n',v(4),n) %{ 0.30000000000000004000 %
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



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


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