7 #include "cln/dfloat.h"
16 cl_signean compare (const cl_DF& x, const cl_DF& y)
19 // x und y haben verschiedenes Vorzeichen ->
22 // x und y haben gleiches Vorzeichen ->
23 // x >=0 -> vergleiche x und y (die rechten 53 Bits)
24 // x <0 -> vergleiche y und x (die rechten 53 Bits)
25 #if (cl_word_size==64)
26 var dfloat x_ = TheDfloat(x)->dfloat_value;
27 var dfloat y_ = TheDfloat(y)->dfloat_value;
30 { if ((sint64)x_ >= 0)
32 { if (x_ < y_) return signean_minus; // x<y
33 if (x_ > y_) return signean_plus; // x>y
38 { return signean_minus; } // x<y
41 { if ((sint64)x_ >= 0)
43 { return signean_plus; } // x>y
46 { if (x_ > y_) return signean_minus; // |x|>|y| -> x<y
47 if (x_ < y_) return signean_plus; // |x|<|y| -> x>y
52 var uint32 x_semhi = TheDfloat(x)->dfloat_value.semhi;
53 var uint32 y_semhi = TheDfloat(y)->dfloat_value.semhi;
54 var uint32 x_mlo = TheDfloat(x)->dfloat_value.mlo;
55 var uint32 y_mlo = TheDfloat(y)->dfloat_value.mlo;
56 if ((sint32)y_semhi >= 0)
58 { if ((sint32)x_semhi >= 0)
60 { if (x_semhi < y_semhi) return signean_minus; // x<y
61 if (x_semhi > y_semhi) return signean_plus; // x>y
62 if (x_mlo < y_mlo) return signean_minus; // x<y
63 if (x_mlo > y_mlo) return signean_plus; // x>y
68 { return signean_minus; } // x<y
71 { if ((sint32)x_semhi >= 0)
73 { return signean_plus; } // x>y
76 { if (x_semhi > y_semhi) return signean_minus; // |x|>|y| -> x<y
77 if (x_semhi < y_semhi) return signean_plus; // |x|<|y| -> x>y
78 if (x_mlo > y_mlo) return signean_minus; // |x|>|y| -> x<y
79 if (x_mlo < y_mlo) return signean_plus; // |x|<|y| -> x>y