Операция <= в Паскале

Статус
В этой теме нельзя размещать новые ответы.

Mikhail.M

Создатель
Регистрация
2 Июл 2008
Сообщения
11
Реакции
4
Объясните мне пожалуйста, почему результатом работы программы на Паскале
Код:
var
t,dt,t2:real;
begin
t:=0;
dt:=0.1;
t2:=2;
while t<=t2 do
begin
     writeln(t:2:1);
     t:=t+dt;
end;
readln;
end.
Является
0
0,1
0,2
....
1,9
а не
0
0,1
0,2
....
2,0
 
Я прочитал твой пост... Сначало вообще не поверил что листинг программы именно такой. Проверил) Вообщем если береём конечное значение для цикла 1 или 2 то он не выполняет цикл последний раз, хотя должен. Если берём > 2 то всё норм. Баг паскаля это. Логикой не объясняется)
 
Это глюк округления. Если поставить бейкпоинт на строку readln, то видно что переменные t и t2 отличаются дампом памяти, хотя в десятичном виде обе = 2
Код:
t:  01$ 00$ 00$ 00$ 00$ 00$ 00$ 40$
t2: 00$ 00$ 00$ 00$ 00$ 00$ 00$ 40$
ps C типом сurrency все работает правильно.
 
Ёманарод. От те и паскаль. А люди на олимпиадах в основном на нём пишут. :)
Видать привыкли.
 
Какой компилятор?
 
Была такая ошибка округления в Паскале под ДОС - Turbo Pascal. В компиляторах под win это исправлено.
 
Не исправлено, делфы глючат так же.

Это проблема представления чисел Real, при операциях с ними в далеких знаках после запятой появляется мусор. Такая же хрень есть не только в делфях.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху