Дабы избежать лишних вычислений в цикле из-за погрешности (только относительно 0), делаю проверку abs(x)>step/1000 (step - приращение переменной, вводится с клавы), но она не пашет (если step/1000 запихнуть в отдельную переменную, та же история). Но если делать сравнение с числом, которому равно step/1000, всё прекрасно. Это какая-то особенность if или я не шарю совсем?
Код:
readln(a, b, step); //Вводится (3, -2.7, -0.3)
y:=0;
x:=a;
if (step<>0) and (((a>b) and (step<0)) or ((a<b) and (step>0))) then
begin
repeat
if (abs(x)>step/10000) then
begin
y:=ln(exp(ln(x*x+pi)/3))+arctan(x/3)+exp(5/3)/x;
writeln(x,' ',y);
x:=x+step;
end
else
begin
writeln('Error: division by 0');
x:=x+step;
end;
until ((x>b) and (step>0)) or ((x<b) and (step<0));