]> www.ginac.de Git - cln.git/blob - src/real/elem/cl_R_compare.cc
Initial revision
[cln.git] / src / real / elem / cl_R_compare.cc
1 // cl_compare().
2
3 // General includes.
4 #include "cl_sysdep.h"
5
6 // Specification.
7 #include "cl_real.h"
8
9
10 // Implementation.
11
12 #include "cl_R.h"
13 #include "cl_rational.h"
14 #include "cl_float.h"
15
16 cl_signean cl_compare (const cl_R& x, const cl_R& y)
17 {
18   // Methode:
19   // Beide rational oder beide Floats -> klar.
20   // Eine rational, eine Float ->
21   //   Die rationale Zahl zum Float machen, vergleichen.
22   //   Verschieden -> Das war's.
23   //   Gleich -> Das Float mit RATIONAL rational machen, nochmals vergleichen.
24         realcase2(x
25         ,       realcase2(y
26                 ,       // beides rationale Zahlen
27                         return cl_compare(x,y);
28                 ,       // x rational, y Float -> x in Float umwandeln
29                         var cl_signean result = cl_compare(cl_float(x,y),y);
30                         if (result != signean_null)
31                                 return result;
32                         return cl_compare(x,rational(y));
33                 );
34         ,       realcase2(y
35                 ,       // x Float, y rational -> y in Float umwandeln
36                         var cl_signean result = cl_compare(x,cl_float(y,x));
37                         if (result != signean_null)
38                                 return result;
39                         return cl_compare(rational(x),y);
40                 ,       // beides Floats
41                         return cl_compare(x,y);
42                 );
43         );
44 }