![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка компиллятора? [D7, XP]
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
Читать статью на Королевстве Дельфи.