Delphi: Az abszolút érték függvény egy furcsa tulajdonsága

Programozással kapcsolatos cikkek / Delphi (1019 katt)

A Delphiben az Abs függvény szolgál egy szám abszolút értékének meghatározására. A függvény használata során egy (látszólag) furcsa dolgot tapasztalhatunk, melyet az alábbi (console application) programmal lehet demonstrálni:

program AbsProba;

{$APPTYPE CONSOLE}

uses
SysUtils;

var sh1,sh2 : shortint;
in1,in2 : smallint;

begin
sh1:=-128;
sh2:=Abs(sh1);

Writeln(sh1, ', ' ,sh2);

in1:=-32768;
in2:=abs(in1);

Writeln(in1, ', ', in2);

Readln;
end.



Kiírt értékként (az abszolút érték függvénynek megfelelő) -128, 128 és -32768, 32768 helyett -128, -128-at és -32768, -32768-at kapunk, ami természetesen nem helyes.

A dolog magyarázata a Delphi adattípusainak tulajdonságaiban rejlik. Mivel egy shortint típusú változó értékei -128-tól 127-ig, egy smallint típusú változó értékei pedig -32768-tól 32767-ig terjednek, ezért az eredményül kapott +128 illetve a +32768 nem ábrázolható shortint-ként, illetve smallint-ként, tehát a kapott eredmények nem is lehetnek helyesek.

Előző oldal Kapitány