May 03, 2003 Disappointing | ||||
---|---|---|---|---|
| ||||
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 Re: Disappointing | ||||
---|---|---|---|---|
| ||||
Posted in reply to Helmut Leitner | "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. |
Copyright © 1999-2021 by the D Language Foundation