range = min(x):0.0001:max(x);
N = numel(range);
x = sort(x);
hit = 0;
i=1;
for j = 1:(N-1)
if range(j) <= x(i) && x(i) < range(j+1)
hit = hit + 1;
i = i+1;
if x(i) == x(i-1)
while x(i) == x(i-1) % If there are more than one of the same
hit = hit + 1; % numbers in succession, this allows x and
i = i+1; % hit to carry on incrementing.
end %while
end %if
end %if
end %for
disp(hit)
此代码比较“范围”和“x”。它检查“x”是否在“范围”中的值之间,如果是,“命中”计数器会增加,“x”的当前值也会增加。
问题是,在 x 的一些随机值上(据我所知它们是随机的),虽然它们应该满足“IF”语句中的不等式,但“IF”语句被忽略,for 循环继续,因此最终“命中”值是错误的。
“x”通常是一个大约一百万左右宽的一维数组。
对于这个例子,让
`x = [-2.1792 -2.1759 -2.1758 -2.1748 -2.1658 -2.1648 -2.1646 -2.1604 -2.1603 -2.1550]`
'hit' 应该等于 '10' 但输出 '2' 因为它决定跳过 'j=35' 处的 'IF' 语句。
澄清。当 'j=35' 时,range(j) = -2.1758 并且 i=3 意味着 x(i)=-2.1758
我很确定:
range(j) <= x(i) && x(i) < range(j+1)
-2.1758 <= -2.1758 && -2.1758 < -2.1757 %**edited, meant -2.1757 not -2.1759**
是真的。
我希望我只是在这里做一些我看不到的愚蠢的事情。抱歉,如果这是一个格式错误的问题,这是我的第一个问题。提前喝彩。