Ajutați-vă la funcționarea în virgulă mobilă invalidă!

Ajutați-vă cu funcționarea nevalidă în virgulă mobilă !!

Oameni!
Spune-mi ce fac greșit?
avem variabilele:
MaxRowId: integer;
r: dublu;
Când încercați să executați: r: = MaxRowId / 2 se va afișa eroarea "Operație punct de infiltrare nevalid". Ce fac greșit?
și dacă mai aveți ShowMessage (MaxRowId) înainte de acest calcul, totul funcționează.

La urma urmei, este scris în mod clar: "operațiune cu virgulă mobilă nevalidă". Faceți concluziile adecvate.


procedura TForm1.FormCreate (expeditor: TObject);
var
# xA0; MaxRowId: integer;
# xA0; R: dublu;
începe
# xA0; MaxRowId: = Mâner;
# xA0; R: = MaxRowId / 2;
# xA0; ShowMessage (FloatToStr (R))
se încheie;

Și totul funcționează. Prin urmare, răspunsul la întrebarea "Ce fac greșit?" trebuie să căutați în altă parte codul.

Am fost, de asemenea, oamenii de știință surprins această turnură a evenimentelor), cu toate acestea, a fost întotdeauna MaxRowId normală valoare non-zero, iar o simplă diviziune de 2 nu este deosebit de crap. Poate că Delphi buggy? În orice caz, vă mulțumesc tuturor! Și am făcut-o fără această diviziune :)

Au fost astfel de distracție, WinAPI în unele locuri (de obicei, în apeluri kernel32) își schimbă coprocesorul steaguri - Delphi unde poate stabilește (SafeLoadLibrary de exemplu), dar mai ales se bazează pe deținerea exclusivă a coprocesorului (și de stat la nivel global constantă), ceea ce conduce uneori la locul de muncă incorectă a sistemului de ._FSafeDivide.
Salvează sfârșitul FINIT; înainte de împărțire.

ZY Gluck revine la BP7.0 / D1 de la DPMI.

zzy Și glitchul este întotdeauna atunci când se împarte întreaga cu reducerea la un punct plutitor.


> Operație punct de plată nevalidă

Și am avut de multe ori acest lucru pe D7, când am lucrat cu date și breakpoints în prelucrarea datelor dat. Puneți un punct de întrerupere - primiți o excepție, îl îndepărtați - totul funcționează ca un ceas.