Допоможіть з invalid floating point operation!

Допоможіть з Invalid floating point operation !!

Народ!
Підкажіть плиз що я роблю не так?
маємо змінні:
MaxRowId: integer;
r: double;
При спробі виконати: r: = MaxRowId / 2 вискакує помилка "Invalid floating point operation". Що я роблю не так?
причому якщо перед цим обчисленням постваіть ShowMessage (MaxRowId) все працює.

Адже ясно ж написано: "Invalid floating point operation". Зроби відповідні висновки.


procedure TForm1.FormCreate (Sender: TObject);
var
# XA0; MaxRowId: integer;
# XA0; R: double;
begin
# XA0; MaxRowId: = Handle;
# XA0; R: = MaxRowId / 2;
# XA0; ShowMessage (FloatToStr (R))
end;

І все працює. Значить, відповідь на питання "Що я роблю не так?" потрібно шукати в іншому місці коду.

) Я теж був учень здивований такому повороту подій, однак в MaxRowId завжди знаходилося нормальне нульове значення, та й до простого поділу на 2 особливо не причепишся. Може Delphi глюканул? У будь-якому випадку дякую всім! А я обійшовся без цього поділу :)

Були такі приколи, WinAPI в деяких місцях (частіше у викликах kernel32) змінює прапори співпроцесора - Delphi де може це фікс (SafeLoadLibrary наприклад), але в основному покладається на ексклюзивне володіння співпроцесором (і глобально незмінне стан), що іноді призводить до некоректно роботі System ._FSafeDivide.
Рятує asm FINIT end; перед поділом.

З.И. Глюк йде ще з часів BP7.0 / D1 під DPMI.

З.З.И. Причому глюк завжди саме при розподілі цілих з приведенням до плаваючою крапкою.


> Invalid floating point operation

А у мене таке часто траплялося на D7, коли з датами працював і брейкпойнти в процедурах обробки дат ставив. Ставиш точку переривання - отримуєш виняток, прибираєш - все работат як годинник.