![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi bugs [D6, D7, Win2k, WinXP]
Saintdmitry © (2004-10-12 23:39:00)Недавно пришлось программировать на Delphi7(6) и вот, что обнаружил:
- нет сравнения real c константами и Extended
- не работает TDbComboBox
Что-то мне подсказывает, что это лишь малая часть, может кто сможет дополнить, было бы очень интересно услышать что меня ещё ждёт.
KSergey (2004-10-13 14:27:00) [1]> [12] Anatoly Podgoretsky © (13.10.04 13:26)
> Меня еще в первом классе учили, не надо сравнивать числа
> с плавающей запятой.
... на равенство
На неравенство - можно.
Плохиш (2004-10-13 13:36:00) [2]
> Anatoly Podgoretsky © (13.10.04 13:26) [12]
Как за это время школа изменилась :-)
Anatoly Podgoretsky (2004-10-13 13:26:00) [3]Меня еще в первом классе учили, не надо сравнивать числа с плавающей запятой.
KSergey (2004-10-13 13:12:00) [4]Этим страдают не языки, а авторы программ.
PS
На это я налетел в самой первой своей написанной проге на васике... но это уже другая история...
Amoeba (2004-10-13 12:02:00) [5]
> Saintdmitry © (13.10.04 11:57) [9]
> Приведите пример ещё языков. которые такой фичей страдают?
> Мне на ум ничего не приходит.
Языки здесь абсолютно ни при чем!Это ФИЧА НЕ ЯЗЫКА А ЖЕЛЕЗА! Еще раз настоятельно советую прочесть это http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374и не страдать фигней.
Saintdmitry (2004-10-13 11:57:00) [6]Приведите пример ещё языков. которые такой фичей страдают?
Мне на ум ничего не приходит.
Amoeba (2004-10-13 11:25:00) [7]
> Другой вопрос, поечему такая разница появилась.
Это фича, но не Delphi, а сопроцессора.
См. ссылку в Amoeba © (13.10.04 11:07) [6]
TUser (2004-10-13 11:12:00) [8]
> if abs(E-R)>0.000001 then. И таких глюков в Delphi немного
Это не глюк, а фича. Есть разница 10^-17, значит числа не равны. Другой вопрос, поечему такая разница появилась.
Amoeba (2004-10-13 11:07:00) [9]
> - нет сравнения real c константами и Extended
Так и должно быть. Дельфи здесь ни при чем, сие есть так сказать "закон природы". Читаем статью "Неочевидные ососбенности вещественных чисел" http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374
до полного просветления.
Kolan (2004-10-13 10:34:00) [10]Так E : Extended;
R : real;
E := 1.1;
R := 1.1;
E - R порядка 1.7 * exp(-17);
т.е. (E = R) - ложь
может это из за представления чисел
Например
var
e:real;
begin
e:=0.1;
if e=0.1 then ...
else
...
так вот будет не равно из за того что intel работает только с 10-байтным типом Extended. И в e вместо 0.1 будет то что можно представить в виде конечной 2 дроби
Fedia (2004-10-13 08:56:00) [11]Saintdmitry © (13.10.04 08:46) [3]
есть такая буква в этом слове :)
Скажу больше, даже в случае сравнения переменных одного типа (н-р Double), с одинаковыми значениями, могут возникать такие глюки, но это легко можно обойти: if abs(E-R)>0.000001 then. И таких глюков в Delphi немного, в процентах от первоклассно работающего стандартного кода.
Saintdmitry (2004-10-13 08:46:00) [12]KSergey, а вы с ним работали?
Судя по исходным кодам он мало отличается от TComboBox.
TUser, вот пример:
E : Extended;
R : real;
E := 1.1;
R := 1.1;
E - R порядка 1.7 * exp(-17);
т.е. (E = R) - ложь
KSergey (2004-10-13 07:14:00) [13]Про какой-то ComboBox помнится было обсуждение - в D7 действительно имеется ошибка. Поправлена в сервиспаке.
Вот только о том ли речь?? Да и чтобы прям вот "совсем не работало"?? Что-то с трудом верится.
TUser (2004-10-12 23:45:00) [14]
> Saintdmitry
Одит Великий Дима тут уже есть. Но изменеия уже заметны, что отрадно.
По сабжу - кода нет, ничего понять нельзя - чего не работает и как не сравнивается?