Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.05;
Скачать: [xml.tar.bz2];

Вниз

Delphi 5 не реагирует на ошибки с плавающей точкой   Найти похожие ветки 

 
Kudatsky   (2002-07-22 10:13) [0]

Delphi 5 не реагирует на ошибки с плавающей точкой.
Например:
procedure TForm2.Button1Click(Sender: TObject);
Var
A,B,C:Double;
begin
Try
A:=0;
B:=1;
C:=B/A;
Caption:=FloatToStr(C);
Except
Caption:="Ошибка";
end;
end;

В этом примере управление не попадает в Except, а в
Caption выводится "INF".

Похоже, что-то с отладчиком ?


 
IlyaA   (2002-07-22 10:25) [1]

Посмотри в доке параметры компиляции. Там есть параметр. Ругаться или нет.


 
IlyaA   (2002-07-22 10:26) [2]

А с отладчиком всё в порядке. Ошибка в коде ( ГЕНЕТИЧЕСКОМ).
ИЗВИНИ. Злая шутка вырвалась наружу


 
VICTOR_   (2002-07-22 10:31) [3]

Прверил, у меня Except обрабатывается. Попробуй поставить break-point на B:=1; и сделать трассировку(F7)


 
kudatsky   (2002-07-22 10:37) [4]

За шутку извиню. Но только если подскажешь, какой папаметр.
Иначе буду являться по ночам угрызениями совести ;-)))


 
kudatsky   (2002-07-22 10:45) [5]

Кое-что нашёл.
Если снять флажок "Integration debugging",
Except обрабатывается.

Но в варианте
A:=0;
B:=1;
C:=B/A;
Caption:=FloatToStr(C);

появляется сообщение "Floating point division by zero", а
остановки на строке с ошибкой не происходит


 
Skier   (2002-07-22 11:30) [6]

>kudatsky
Debbuger Options|Language Exceptions|Stop on Delphi Exceptions ?


 
kudatsky   (2002-07-22 11:44) [7]

Опция
Debbuger Options|Language Exceptions|Stop on Delphi Exceptions
включена



 
Skier   (2002-07-22 11:50) [8]

>kudatsky
Debbuger Options|General|Integrated debugging := True


 
kudatsky   (2002-07-22 11:56) [9]

Опция Integrated debugging включена.


 
Skier   (2002-07-22 11:57) [10]

>kudatsky
И что ? На C:=B/A; не останавливается ?


 
kudatsky   (2002-07-22 12:02) [11]

Не останавливается.
В Caption выводится "INF"

Может что на страницах OS Exception или Language Exception ?


 
Skier   (2002-07-22 12:08) [12]

>kudatsky
У тебя в списке Exceptions на странице OS Exception есть
Float Devide By Zero ?


 
Viewer   (2002-07-22 12:10) [13]

INF - infinity (так Борланд реагирует на эти шутки)


 
kudatsky   (2002-07-22 12:11) [14]

Есть.
User program:=true
Run unhandled:=true


 
IlyaA   (2002-07-22 13:07) [15]

В блоке try-except попробуй-
try
a:=b/0;
except
on EDivByZero do ShowMessage("Error");
end;


 
kudatsky   (2002-07-22 13:43) [16]

Сделал.
Исключение не возбуждается.


 
IlyaA   (2002-07-22 13:45) [17]

Похоже у тебя уже всё упало.


 
kudatsky   (2002-07-22 13:52) [18]

Только-что инстолировал D5 на другую машину. То же самое. Что интересно, никакой реакции на
on E: Exception do ShowMessage("Error");
Может Delphi с глюками ?


 
Слесарь Матерящийся   (2002-07-22 13:59) [19]

Может, дело в точности представления вещественного числа?
То есть, присваиваем чистый 0, а получаем 0 + погрешность, и в результате не-ноль.

Попробуйте то же самое с целыми числами.


 
IlyaA   (2002-07-22 14:01) [20]

Вот енто из хэлпы. Может что и прояснит
EIntError is the base class for integer math error exceptions.

Unit

SysUtils

Description

EIntError is a generic integer math exception. Although it is never raised in the runtime library, it is the base from which other integer math exceptions descend. These are the integer math exceptions:

Exception Meaning

EDivByZero An attempt was made to divide by zero
ERangeError Number or expression out of range
EIntOverflow Integer operation overflowed

Run-time exception information is saved in fields provided by EExternal.


 
kudatsky   (2002-07-22 14:02) [21]

С целыми числами всё в порядке, я уже пробовал.


 
Слесарь Матерящийся   (2002-07-22 15:11) [22]

То-то и оно!


 
kudatsky   (2002-07-22 15:19) [23]

????????????????


 
tall   (2002-07-22 16:00) [24]

Я эту тему пеоднимал уже несколько раз. Кстати и в этой конфе тоже. Куда только не писал. Вразумительный ответ дали только в AMD (у меня эти глюки начались после того как пересел с Pentium 200MMX на AMD 1200. Думал может связано сплатформой). Там мне сказали, что это не глюк, а изменения в компиляторе в соответствии с требованиями новых стандартов ( типа ответ +INF или -INF (бесконечность) и тому подобное это не исключительная ситуация а нормальное явление). И отослели к технической документации по процессору( там, кстати, это действительно написано). Судя по всему это относится и Pentium платформе (мне писали об аналогичных проблемах на Celeron), т.е. характерно для всех новых процессоров. Решить эту проблему удалось только откатившись на DELPHI 4. Чего и вам советую.


 
kudatsky   (2002-07-23 10:27) [25]

tall, если Вы ещё здесь!
Где это можно прочитать ?


 
VICTOR_   (2002-07-23 11:48) [26]

У тебя материнка на VIA логике?


 
Viewer   (2002-07-23 12:24) [27]

ffmt.asm

; INF and NAN strings

INFNAN DB "INFNAN"

; function FloatToText(Buffer: PChar; const Value; ValueType: TFloatValue;
; Format: TFloatFormat; Precision, Digits: Integer): Integer;


sysutils.pas

function TextToFloat(Buffer: PChar; var Value;
ValueType: TFloatValue): Boolean;

{ FloatToDecimal converts a floating-point value to a decimal representation
that is suited for further formatting. The Value parameter must be a
variable of type Extended or Currency, as indicated by the ValueType
parameter. For values of type Extended, the Precision parameter specifies
the requested number of significant digits in the result--the allowed range
is 1..18. For values of type Currency, the Precision parameter is ignored,
and the implied precision of the conversion is 19 digits. The Decimals
parameter specifies the requested maximum number of digits to the left of
the decimal point in the result. Precision and Decimals together control
how the result is rounded. To produce a result that always has a given
number of significant digits regardless of the magnitude of the number,
specify 9999 for the Decimals parameter. The result of the conversion is
stored in the specified TFloatRec record as follows:

Exponent - Contains the magnitude of the number, i.e. the number of
significant digits to the right of the decimal point. The Exponent field
is negative if the absolute value of the number is less than one. If the
number is a NAN (not-a-number), Exponent is set to -32768. If the number
is INF or -INF (positive or negative infinity), Exponent is set to 32767.

Negative - True if the number is negative, False if the number is zero
or positive.

Digits - Contains up to 18 (for type Extended) or 19 (for type Currency)
significant digits followed by a null terminator. The implied decimal
point (if any) is not stored in Digits. Trailing zeros are removed, and
if the resulting number is zero, NAN, or INF, Digits contains nothing but
the null terminator. }



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.08.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.63 MB
Время: 0.027 c
1-13610
иван
2002-07-24 09:12
2002.08.05
Реестр


1-13715
c0pYc@t
2002-07-17 08:34
2002.08.05
Помогите с Thread


3-13560
UnDISCOvery
2002-07-05 14:36
2002.08.05
База Access. Что нужно для работы с ней ?


8-13722
F-Nick
2002-03-27 12:58
2002.08.05
Компоненты и графика


3-13546
Prog_mail
2002-07-15 10:58
2002.08.05
Как редактировать отсортированный набор данных?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский