Fun az admin (pascal)
PS (Nem volt annyira lelkiismeret, hogy megkínozták, mennyi a tudatalatti visszatért).
Úgy döntöttem, hogy ellenőrizzem, hogy mennyit adott valódi tanácsot az igazi típusról:
"2") kiderült, hogy a turboPascal-ban a valódi típusú helyi valódi öntvény
nem működik (a fejemben ez egy hiba a MatLab-ból, más nyelvekből
és az általános ideológiát a számtani kifejezések vegyes, de kompatibilis, adattípusokkal történő összeállításában).
"1") köztes változókkal, minden rendben van
(ahogyan azt tegnap tette, Anton Golub (DoVe)):
adj hozzá az elején:
függvényteszt (dx, dy: Real): Real;
kezdődik
teszt: = dx * dx + dy * dy;
Vége;
és beágyazza a vonalat a híváshoz:
+) A példa "nem működik", ha kulcsokkal fordított.
A gyökérnégyzet számítása előtt megjelenik egy túlcsordulási hiba.
Nyilvánvalóan ezek (kulcsok) le lettek dobva.
Ne felejtsd el a TurboDebagger-t, ő megmutatja az összes részletet.
ha:
PROGRAM.16: d: = dx * dx + dy * dy;
cs: 00D1> A15A00 mov axe, [PROGRAM.DY]
cs: 00D4 F7265A00 mulszó ptr [PROGRAM.DY]
cs: 00D8 8BC8 mov cx, ax
cs: 00DA A15800 mov axe, [PROGRAM.DX]
cs: 00DD F7265800 mulszó ptr [PROGRAM.DX]
cs: 00E1 03C1 add ax, cx
cs: 00E3 99 cwd
cs: 00E4 9A3636CC67 hívás 67CC: 3636; konverzió valós
cs: 00E9 A35C00 mov [PROGRAM.D], ax
cs: 00EC 891E5E00 mov [005E], bx
cs: 00F0 89166000 mov, dx
PROGRAM.18: d: = sqrt (d);
ha:
PROGRAM.16: d: = dx * dx + dy * dy;
cs: 00DF> A15A00 mov ax, [PROGRAM.DY]
cs: 00E2 F72E5A00 imul szó ptr [PROGRAM.DY]
cs: 00E6 7105 jno 00ED
cs: 00E8 9AC702CE67 hívás 67CE: 02C7; gondoskodik a vándorlásról №215
cs: 00ED 8BC8 mov cx, ax
cs: 00EF A15800 mov axe, [PROGRAM.DX]
cs: 00F2 F72E5800 imul szó ptr [PROGRAM.DX]
cs: 00F6 7105 jno 00FD
cs: 00F8 9AC702CE67 hívás 67CE: 02C7
cs: 00FD 03C1 add ax, cx
cs: 00FF 7105 jno 0106
cs: 0101 9AC702CE67 hívás 67CE: 02C7
cs: 0106 99 cwd
cs: 0107 9A3636CE67 hívás 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, habár utal (névlegesen) a tanítási nyelvekre, megköveteli
óvatosság és világos tudatosság - mit és hogyan kívánja a programozó
(vagyis inkább egy professzionális programozót feltételez).
(Egyébként a GIGO gyártása - "Garbage In Garbage Out").
Ebben a példában, ha azt szeretné, hogy a dx egész szám legyen deklarálva,
akkor a következőket kell használni: vagy az igazi típusú köztes sejtek
(és sokszorozza őket),
vagy egy helyi típusú öntvény: d: = valós (dx) * dx + real (dy) * dy;
Növelje a trükket abban a dx * dx> -ben, mint az egész szám maximális értéke. Ennek eredményeként, a változó d a sorban d: = dx * dx + dy * dy (d: = 200 * 200 + 0 * 0) = 40 000 maximális 32 768. 7 232. A különbség a száma túlfolyók összetörni érték -32 768 (a minimális érték) + 7 232, azaz -25536 (ami pontosan d, mielőtt kivenné a gyökeret). És mivel a komplex számok, amelyekről Pascal nem tudja, hogyan szerezze meg tőle a gyökeret, nem kapja meg
ha minden számot valós számmal helyettesít, minden jól működik. és így a "de" kiszámítása érvénytelen művelet, amikor lebegőpontos számokkal dolgozik. miért még nem világos. lehetséges, hogy ilyen hiba történik, ha az egész számértékeket valós számra konvertálja.
Új a könyvtárban
A webhely legjobbja
Viccesek és kifejezések
"Mindig hazudok, és igyekszem megcáfolni, hogy nem így van."
A helyszínen összesen: 2