![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Дабы избежать лишних вычислений в цикле из-за погрешности (только относительно 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));Последний раз редактировалось Remedies, 06.10.2019 в 10:16. |
|
#2
|
||||
|
||||
|
Все работает...
Здесь step/10000 является константой и равняется -0,00003. x:=x+step у тебя стремится к минус бесконечности, а ты проверяешь модуль икс (abs(x)). А так как икс положительный, то условие срабатывает потому, что положительное число всегда больше отрицательного. |