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

Тема в разделе "Другие языки", создана пользователем Mikhail.M, 3 мар 2009.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. Mikhail.M

    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
     
  2. MegO

    MegO Постоялец

    Регистр.:
    13 фев 2009
    Сообщения:
    130
    Симпатии:
    13
    Я прочитал твой пост... Сначало вообще не поверил что листинг программы именно такой. Проверил) Вообщем если береём конечное значение для цикла 1 или 2 то он не выполняет цикл последний раз, хотя должен. Если берём > 2 то всё норм. Баг паскаля это. Логикой не объясняется)
     
  3. tonsils

    tonsils Создатель

    Регистр.:
    2 янв 2008
    Сообщения:
    47
    Симпатии:
    20
    Это глюк округления. Если поставить бейкпоинт на строку 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 все работает правильно.
     
    Mikhail.M нравится это.
  4. Lucid_Mind

    Lucid_Mind Постоялец

    Регистр.:
    18 янв 2009
    Сообщения:
    72
    Симпатии:
    34
    Ёманарод. От те и паскаль. А люди на олимпиадах в основном на нём пишут. :)
    Видать привыкли.
     
  5. Artu

    Artu Постоялец

    Регистр.:
    3 мар 2009
    Сообщения:
    75
    Симпатии:
    3
    Какой компилятор?
     
  6. MadWizard

    MadWizard Постоялец

    Регистр.:
    24 мар 2009
    Сообщения:
    145
    Симпатии:
    20
    Была такая ошибка округления в Паскале под ДОС - Turbo Pascal. В компиляторах под win это исправлено.
     
  7. tonsils

    tonsils Создатель

    Регистр.:
    2 янв 2008
    Сообщения:
    47
    Симпатии:
    20
    Не исправлено, делфы глючат так же.

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