digitalmars.D.bugs - double comparison bug (and bug-fix)
-
zwang
(22/22)
Feb 19 2005
- zwang (14/39) Feb 19 2005 The following files should also be patched similarly:
- =?ISO-8859-1?Q?Thomas_K=FChne?= (49/49) Feb 19 2005 -----BEGIN PGP SIGNED MESSAGE-----
- zwang (3/5) Feb 19 2005 Sorry for my unawareness of these early bug reports.
<test-code> void main(){ TypeInfo ti = typeid(double); double a = 0, b = .1; assert(ti.compare(&a, &b)<0); } </test-code> This is due to a bug in phobos/std/typeinfo/ti_double.d. <code> </code> A quick fix: <code> int compare(void *p1, void *p2) { double d = (*cast(double *)p1 - *cast(double *)p2); return d>0?1:d<0?-1:0; } </code>
Feb 19 2005
zwang wrote:<test-code> void main(){ TypeInfo ti = typeid(double); double a = 0, b = .1; assert(ti.compare(&a, &b)<0); } </test-code> This is due to a bug in phobos/std/typeinfo/ti_double.d. <code> </code> A quick fix: <code> int compare(void *p1, void *p2) { double d = (*cast(double *)p1 - *cast(double *)p2); return d>0?1:d<0?-1:0; } </code>The following files should also be patched similarly: File ti_double.d: 20 return cast(int)(*cast(double *)p1 - *cast(double *)p2); File ti_float.d: 20 return cast(int)(*cast(float *)p1 - *cast(float *)p2); File ti_idouble.d: 20 return cast(int)(*cast(double *)p1 - *cast(double *)p2); File ti_ifloat.d: 20 return cast(int)(*cast(float *)p1 - *cast(float *)p2); File ti_ireal.d: 20 return cast(int)(*cast(real *)p1 - *cast(real *)p2); File ti_real.d: 20 return cast(int)(*cast(real *)p1 - *cast(real *)p2);
Feb 19 2005
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 zwang wrote: | zwang wrote: | |> <test-code> |> void main(){ |> TypeInfo ti = typeid(double); |> double a = 0, b = .1; |> assert(ti.compare(&a, &b)<0); } |> </test-code> |> |> |> This is due to a bug in phobos/std/typeinfo/ti_double.d. |> <code> |> </code> |> |> A quick fix: |> <code> |> int compare(void *p1, void *p2) |> { |> double d = (*cast(double *)p1 - *cast(double *)p2); |> return d>0?1:d<0?-1:0; |> } |> </code> float, double and real are known bugs. Wasn't there some patch floating around half a year ago?!? | The following files should also be patched similarly: | File ti_idouble.d: | 20 return cast(int)(*cast(double *)p1 - *cast(double *)p2); | File ti_ifloat.d: | 20 return cast(int)(*cast(float *)p1 - *cast(float *)p2); | File ti_ireal.d: | 20 return cast(int)(*cast(real *)p1 - *cast(real *)p2); Added to DStress as http://dstess.kuehne.cn/run/sort_13.d http://dstess.kuehne.cn/run/sort_14.d http://dstess.kuehne.cn/run/sort_15.d Thomas -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (MingW32) iD8DBQFCF1xG3w+/yD4P9tIRAluiAKCqV0DzCqL4qH7AOeNxWQWSNfUgfQCeKz5t c5JJQZcUZ5ov5CfeiZ63zeI= =+SXP -----END PGP SIGNATURE-----
Feb 19 2005
Thomas Kühne wrote:float, double and real are known bugs. Wasn't there some patch floating around half a year ago?!?Sorry for my unawareness of these early bug reports. I still wonder why Phobos isn't patched yet.
Feb 19 2005