May 03, 2003
On Apr 6 2003 I wrote to Walter Bright:
> 
> Walter,
> 
> a number of floating point type arrays don't sort correctly under certain circumstances. This is the code:
> 
> class TypeInfo_d : TypeInfo
> {
>  ...
>     int compare(void *p1, void *p2)
>     {
>         return *(double *)p1 - *(double *)p2;
>     }
>  ...
> }
> 
> When values are small (I tried to sort uSecond timings like the following):
> 
>    sectab[0] 0.0000070792
>    sectab[1] 0.0000072514
>    sectab[2] 0.0000066818
>    sectab[3] 0.0000067485
>    sectab[4] 0.0000066986
>    sectab[5] 0.0000068492
>    sectab[6] 0.0000066601
>    sectab[7] 0.0000065775
>    sectab[8] 0.0000068234
>    sectab[9] 0.0000067371
>    sectab[10] 0.0000067350
> 
> rounding will make the return value unusable and the array remains unsorted. I think similar problems would turn up, when numbers are too large for the int range.
> 
> The typical construction that you use in other places, will avoid the problem:
> 
>    type a = *(type *) p1;
>    type b = *(type *) p2;
>    return a < b ? -1 : a > b ? 1 : 0;
> 
> ...

I can't understand why there was no release fixing the bug in the meantime.

--
Helmut Leitner    leitner@hls.via.at Graz, Austria   www.hls-software.com
May 03, 2003
"Helmut Leitner" <helmut.leitner@chello.at> wrote in message news:3EB3B096.838DB3BB@chello.at...
> I can't understand why there was no release fixing the bug in the
meantime.

Because I'm trying to get the linux version working. In the meantime, you can apply the workaround you specified. I apologize.