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