Octave 我想在x等于1时停止代码

Octave 我想在x等于1时停止代码,octave,numerical-analysis,Octave,Numerical Analysis,我用八度音阶来写这段代码 x=0.0; while (x~=1.0) x=x+0.1; fprintf('x=%20.18f\n',x) pause endwhile 当x等于1时,我想停止代码。 我写了一些这样的代码 x=0.0; while (x~=1.0) x=x+0.1; fprintf('x=%20.18f\n',x) if abs(x-1)<(eps/2), print(x) endif pause endwh

我用八度音阶来写这段代码

x=0.0;   
while (x~=1.0)
  x=x+0.1;
  fprintf('x=%20.18f\n',x)
  pause
endwhile
x
等于
1
时,我想停止代码。 我写了一些这样的代码

x=0.0;   
while (x~=1.0)
   x=x+0.1;
   fprintf('x=%20.18f\n',x)
   if abs(x-1)<(eps/2),
      print(x)
   endif
   pause
endwhile
x=0.0;
而(x~=1.0)
x=x+0.1;
fprintf('x=%20.18f\n',x)
如果添加时abs(x-1):

x = 0.0;
x = x + 0.1;
例如,由于数值精度的原因,您可以使用
x=0.1000000000000006
,因此
while
将永远不会退出,因为它总是与
1
不同


您可以使用小于
或者您可以尝试在
while
循环中使用迭代器
k
,而不是
x
本身,即

k = 0;
x = 0.0;   
while (k~=round(1.0/0.1))
  k += 1;
  x += 0.1;
  fprintf('x=%20.18f\n',x);
endwhile

@CrisLuengo感谢您的反馈。是的,我试过了,发现
1.0/0.1
10
相同。无论如何,为了安全起见,可能
round(1.0/0.1)
会更好。无论如何,您的建议是最好的,始终使用整数作为循环变量。如果您知道迭代次数,则更容易:
for x=0:0.1:1
,也就是说。@CrisLuengo是的,同意,
for
如果知道迭代次数,应该是更好的选择。
k = 0;
x = 0.0;   
while (k~=round(1.0/0.1))
  k += 1;
  x += 0.1;
  fprintf('x=%20.18f\n',x);
endwhile