Distracție de la admin (pascal)

PS (nu a fost atât de multă conștiință care a torturat, cât de mult a revenit mintea subconștientului).
Am decis să verific cât de mult a oferit sfaturi reale cu privire la tipul real:

"2") sa dovedit că distribuția locală a întregului -> tip real în TurboPascal
nu funcționează (în capul meu este un glitch din MatLab, alte limbi
și ideologia generală de compilare a expresiilor aritmetice cu tipuri de date mixte, dar compatibile).

"1") cu variabile intermediare, totul este bine
(așa cum a scris ieri Anton Golub (DoVe)):

adaugă la început:

test de funcționare (dx, dy: Real): real;
începe
test: = dx * dx + dy * dy;
End;

și încorporați linia cu apelul:

+) Exemplul "nu funcționează" dacă este compilat cu tastele.
Apare o eroare de depășire înainte de a calcula pătratul rădăcinii.
Aparent, acestea (cheile) au fost abandonate de la tine.

Nu uita de TurboDebagger, el va arata toate detaliile.
atunci când:

PROGRAM.16: d: = dx * dx + dy * dy;
cs: 00D1> A15A00 mov ax, [PROGRAM.DY]
cs: 00D4 F7265A00 cuvânt multiplu ptr [PROGRAM.DY]
cs: 00D8 8BC8 mov cx, ax
cs: 00DA A15800 mov ax, [PROGRAM.DX]
cs: 00DD F7265800 cuvânt multiplu ptr [PROGRAM.DX]
cs: 00E1 03C1 adăugați axa, cx
cs: 00E3 99 cwd
cs: 00E4 9A3636CC67 apel 67CC: 3636; conversie la real
cs: 00E9 A35C00 mov [PROGRAM.D], ax
cs: 00EC 891E5E00 mov [005E], bx
cs: 00F0 89166000 mov, dx
PROGRAM.18: d: = sqrt (d);

atunci când:
PROGRAM.16: d: = dx * dx + dy * dy;
cs: 00DF> A15A00 mov ax, [PROGRAM.DY]
cs: 00E2 F72E5A00 imul cuvânt ptr [PROGRAM.DY]
cs: 00E6 7105 jno 00ED
cs: 00E8 9AC702CE67 apel 67CE: 02C7; îngrijirea vuieturilor №215
cs: 00ED 8BC8 mov cx, ax
cs: 00EF A15800 mov ax, [PROGRAM.DX]
cs: 00F2 F72E5800 imul cuvânt ptr [PROGRAM.DX]
cs: 00F6 7105 jno 00FD
cs: 00F8 9AC702CE67 sunați 67CE: 02C7
cs: 00FD 03C1 adăugați axa, cx
cs: 00FF 7105 jno 0106
cs: 0101 9AC702CE67 sunați 67CE: 02C7
cs: 0106 99 cwd
cs: 0107 9A3636CE67 sunați la 67CE: 3636
cs: 010C A35C00 mov [PROGRAM.D], ax
cs: 010F 891E5E00 mov [005E], bx
cs: 0113 89166000 mov, dx
PROGRAM.18: d: = sqrt (d);

Pascal, deși se referă (nominal) la limbile de predare, necesită
prudență și conștientizare clară - ce și cum vrea programatorul să facă
(adică, presupune mai degrabă un programator profesionist).
(Altfel, GIGO este produs - "Garbage In Garbage Out").

În acest exemplu, dacă doriți ca dx să fie declarat întreg,
atunci este necesar să se utilizeze: fie celule intermediare de tip real
(și să le multiplicați)
sau locale de tip reducere: d: = reală (dx) * dx + reale (dy) * dy;

campanie amuzant care dx * dx> decât valoarea maximă a întreg. Ca rezultat, d variabil în linia d: = dx * dx + dy * dy (d: = 200 * 200 + 0 * 0) = 40 000 la maximum 32 768. 7 232. Diferența în numărul de valoare strivi overflow -32 768 (valoarea minimă) 7232 + -25 536 care este egal cu (și care, de fapt, este egal cu d să încerce să-l extragă din rădăcină). Din moment ce numere complexe Pascal nu cunoaște extractul de rădăcină nu avea poluchaetsya

când înlocuiți toate numerele cu numere reale, totul funcționează bine. precum și calcularea variabilelor explicative privind exploatarea ilegală „de“ are loc atunci când se ocupă cu numere în virgulă mobilă. de ce nu este încă clar. posibil, atunci când conversia valori întregi se întâmplă de fapt această eroare.

Nou în bibliotecă

Cel mai bun site

Glume și fraze

"Întotdeauna mint și încerc să resping că nu este așa."

Pe site-ul în total: 2

Distracție de la admin (pascal)

Distracție de la admin (pascal)