demo for using of qsort from lib and a little problem with it_(re)

Sat, 13 Sep 1997 19:38:51 +0200



Peter Gerwinski wrote:

> > function CompNum(var e1, e2: TestType):Integer;
> > Var
> >   r : Real;
> > begin
> >   r       := e1 - e2;
> >   CompNum := Round(r);
> > end;
>
> Consider this with "TestType = Byte", then in `CompNum' we are subtracting
> two `Byte' variables from each other.  GPC chooses the result type to be
> `Byte' again, so the result is never negative.
>
> When I convert them to `Integer' by writing
>
>     r:= Integer ( e1 ) - Integer ( e2 );
>
> it works.  (First it did not work because of a bug in conversions among
> integer types, but I could fix this.;-)
>
> However, is this the correct behaviour?

I think it is because...

> Or should the result type of a
> subtraction be the "nearest" signed integer type - `ShortInt' in this
> example?  Then, what to do when subtracting two `LongestCard's, especially
> in cases like "$FFFFFFFFFFFFFFFF - 2" where the result does not fit in
> `LongestInt'?

That's the problem. Also, this problem is basically the same as a
multiplication of two Integers resulting in a LongInt. GPC (and BP) do
not do any automatic conversion there, either.

IOW, the programmer is responsible for chosing the right types and
converting when necessary. The best the compiler can do (and will do
hopefully soon) is range checking.

--
Frank Heckenbach, Erlangen, Germany
heckenb@mi.uni-erlangen.de
http://home.pages.de/~fjf/links.htm


Frank Heckenbach (heckenb@mi.uni-erlangen.de)

HTML conversion by Lluís de Yzaguirre i Maura
Institut de Lingüística Aplicada - Universitat "Pompeu Fabra"
e-mail: de_yza@upf.es