|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Нерабочее сравнение в if
Дабы избежать лишних вычислений в цикле из-за погрешности (только относительно 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)). А так как икс положительный, то условие срабатывает потому, что положительное число всегда больше отрицательного. Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |