Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка компиллятора? [D7, XP]


Страницы:   1 2 3

AlexDan ©   (2008-08-18 21:45:00) 

При нажатии (выборе) CheckBox переменная rpr проинимает знач. 0.4, но в if кнопки Button1 почему-то к 0.4 не приравнивается (почему-то уходит в условие else) ..
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if rpr=0.4 then
   begin
    if frac(cha/0.4)=0 then
    begin
    pr1:=cha/0.4-1;
    end
    else
    begin
    pr1:=round(cha/0.4);
    end;
   cd60:=pr1*chb{+perem*1.2};
   end
   else
   begin
   cd60:=pr1*chb{+perem*1.2};
   end;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 if CheckBox1.Checked then

 begin rpr:=0.4;
      {Edit2.text:=inttostr(klkrab);}

 end

else
 begin rpr:=0;
end;
end;


Сергей М.   (2008-08-18 22:52:00) [21]


> моя программа, написанная с точки зрения Борланда правильно
> (т.к. без проблемм откомпил.)


Нет, не правильно, ни с какой точки зрения.


Юрий Зотов   (2008-08-18 22:52:00) [22]

> AlexDan ©   (18.08.08 22:37) [17]
> Это скорее камень в огород разработчиков.. Ведь код-то [1] написан
> идеально правильно, а от компилятора (отладчика) никаких
> предупреждений, что-то вроде 0,4 (!??):))).

А какое конкретно предупреждение Вы хотели бы получить? О том, что числа в машине хранятся в двоичном виде и имеют ограниченную разрядную сетку?

Так в программировании это элементарная детская азбука. И разработчики компилятора вполне обоснованно предполагали, что раз уж человек садится программировать, то хотя бы с азбукой он должен быть знаком.


AlexDan   (2008-08-18 22:49:00) [23]

> Сергей М. ©   (18.08.08 22:44) [19]
> Отладчик не обязан тебя ни о чем предупреждать - он расчитан
> на твои мозги.
Ничего себе, не должен, значит Борланд на мерсе ездит, (условно), (вроде как я ему платил), а потом моя программа, написанная с точки зрения Борланда правильно (т.к. без проблемм откомпил.), начинает исподтишка привирать, и это-то при инжинерных расчётах..! ))


Сергей М.   (2008-08-18 22:44:00) [24]


> код-то [1] написан идеально правильно


А мужики-то и не знают)


> от компилятора (отладчика) никаких предупреждений


Отладчик не обязан тебя ни о чем предупреждать - он расчитан на твои мозги.

А компилятору неведомо значение переменной rpr на момент компиляции - переменная эта получит значение в ран-тайм.


Loginov Dmitry   (2008-08-18 22:44:00) [25]

> Это скорее камень в огород разработчиков.. Ведь код-то [1]
> написан идеально правильно, а от компилятора (отладчика)
> никаких предупреждений, что-то вроде 0,4 (!??)


Чего хочешь от компилятора? Так он сделан, принимай как есть. Ссылки из [2] достаточно для осознания логики. Как правильно сравнивать вещественные числа - уже сказано. Непонятно, что еще не устраивает, и к чему спор?


AlexDan   (2008-08-18 22:37:00) [26]

Это скорее камень в огород разработчиков.. Ведь код-то [1] написан идеально правильно, а от компилятора (отладчика) никаких предупреждений, что-то вроде 0,4 (!??):))).


Сергей М.   (2008-08-18 22:29:00) [27]


> на глаз


Какой еще нафих "глаз" ?

Ты статью-то прочитал в [2] ?
Вник ? Выводы сделал ?


AlexDan   (2008-08-18 22:24:00) [28]

Т.е. условие было задано очень жёстко.)


AlexDan   (2008-08-18 22:22:00) [29]

> Desdechado ©   (18.08.08 21:50) [3]
> Сергей М. ©   (18.08.08 21:47) [1]
Вообщемто, я эту тему вёл к тому, что переменные (rpr) приравнивались к 0,4, непосредственно в коде, т.е. внешне, именно на глаз rpr:=0.4,  и в то же время rpr<>0.4.;))


Сергей М.   (2008-08-18 22:19:00) [30]


> При пошаговой отладке эту красоту и обнаружил


Ты обнаружил следствие.
А причину ты не обнаружил.
Отладчик - не новые ворота, а руководство)


Loginov Dmitry   (2008-08-18 22:12:00) [31]

> О проблеммах с нецелыми числами я наслышан, удивило то,
> что описаны-то они были внутри компиллятора (т.е. без мат.
> действий), и совершенно одинаково..


Ниче из этого не понял :( Вместо if rpr=0.4 thenнаряду с [3] можно использовать библиотечную функцию Math.SameValue().


AlexDan   (2008-08-18 22:10:00) [32]

> Сергей М. ©   (18.08.08 22:08) [10]
При пошаговой отладке эту красоту и обнаружил.


Сергей М.   (2008-08-18 22:08:00) [33]


> в коде непосредственно, без действий, так или иначе, связанных
> с округлением


ты с отладчиком знаком ? Дружишь ?


Сергей М.   (2008-08-18 22:06:00) [34]


> описаны-то они были внутри компиллятора


О боже ..
Час от часу не легче) ..


AlexDan   (2008-08-18 22:01:00) [35]

> AlexDan ©   (18.08.08 21:59) [7]
я имел в виду в коде непосредственно, без действий, так или иначе, связанных с округлением.


AlexDan   (2008-08-18 21:59:00) [36]

> Германн ©   (18.08.08 21:48) [2]
О проблеммах с нецелыми числами я наслышан, удивило то, что описаны-то они были внутрикомпиллятора (т.е. без мат. действий), и совершенно одинаково..


Сергей М.   (2008-08-18 21:58:00) [37]


> Нужно при пуске компилл


Чаво-чавоооо ?!?


Сергей М.   (2008-08-18 21:57:00) [38]


> Нужно при пуске компилл. предупреждение писать, а то у меня
> программу два дня глючило, пока я ошибку нашёл


Нужно гуглить и докум-цию читать, а то мастаков от таких вопросов постоянно глючит)


AlexDan   (2008-08-18 21:55:00) [39]

Нужно при пуске компилл. предупреждение писать, а то у меня программу два дня глючило, пока я ошибку нашёл..
> Сергей М.
О Козьме Пруткове я тоже в первую очередь подумал..)


Desdechado   (2008-08-18 21:50:00) [40]

Дробные числа нельзя сравнивать на точное соответствие из-за особенностей их машинного представления. Это нужно делать, например, так: if Abs(rpr-0.4)<0.00001 then
Читать статью на Королевстве Дельфи.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо