Találtam egy súlyos bug-ot a HiSoft Pascalban.
Az < összehasonlító operátor hibás eredményt ad, ha a két oldal különbsége nagyobb, mint 32768.
Tehát:
-1 < 32767 = TRUE
-2 < 32767 = FALSE
Az > összehasonlító operátor hibás eredményt ad, ha a két oldal különbsége nagyobb, mint 32767.
Tehát:
0 > 32767 = FALSE
-1 > 32767 = TRUE
Ez elvileg nem bug, benne van az eredeti doksiban is. Meg az enyémben is
"A HiSoft Pascal-ban, alapértelmezett beállítással, egész típusú kifejezések összehasonlításánál, ha a két szám közötti különbség nagyobb, mint 32767, akkor hibás eredményt kapunk. Például, ha I, és J változó INTEGER típusú, az alábbi vizsgálat eredményeképpen megjelenik a 'Rossz eredmeny' felirat:
I:=-768;J:=32000;
IF I>J THEN WRITELN('Rossz eredmeny');
A pontos, de lassabb kiértékelő algoritmust az I direktívával kapcsolhatjuk be. (Ld. fordítási direktívákat.)"
"I direktíva
{$I- }
{$I+ }
Az egész típusú kifejezéseken végrehajtott relációs műveletek kiértékelő algoritmusát választja ki. Az alapértelmezett, kikapcsolt direktíva esetében a gyorsabb algoritmust fordítja a programba, ilyenkor, ha a két vizsgálandó kifejezés értéke közötti különbség nagyobb, mint 32767, hibás eredményt kapunk. Bekapcsolt állapotban lassabb és hosszabb kódot fordít, amely azonban minden esetben helyes eredményt ad."