]> www.ginac.de Git - cln.git/blob - src/rational/output/cl_RA_dprint.cc
49a2037329f0630dd6ee2d03e3c40fda06a611c6
[cln.git] / src / rational / output / cl_RA_dprint.cc
1 // print_rational().
2
3 // General includes.
4 #include "cl_sysdep.h"
5
6 // Specification.
7 #include "cl_rational_io.h"
8
9
10 // Implementation.
11
12 #include "cl_output.h"
13 #include "cl_integer_io.h"
14 #include "cl_rational.h"
15 #include "cl_RA.h"
16
17 void print_rational (cl_ostream stream, const cl_print_rational_flags& flags, const cl_RA& z)
18 {
19         var unsigned int base = flags.rational_base;
20         if (flags.rational_readably)
21                 // Radix-Specifier ausgeben:
22                 switch (base) {
23                 case 2:
24                         fprintchar(stream,'#');
25                         fprintchar(stream,'b');
26                         break;
27                 case 8:
28                         fprintchar(stream,'#');
29                         fprintchar(stream,'o');
30                         break;
31                 case 16:
32                         fprintchar(stream,'#');
33                         fprintchar(stream,'x');
34                         break;
35                 case 10:
36                         if (integerp(z)) {
37                                 DeclareType(cl_I,z);
38                                 // Basis 10 bei Integers durch
39                                 // nachgestellten Punkt kennzeichnen:
40                                 print_integer(stream,base,z);
41                                 fprintchar(stream,'.');
42                                 return;
43                         }
44                 default:
45                         // Basis in #nR-Schreibweise ausgeben:
46                         fprintchar(stream,'#');
47                         print_integer(stream,10,base);
48                         fprintchar(stream,'r');
49                         break;
50                 }
51         if (integerp(z)) {
52                 DeclareType(cl_I,z);
53                 // Integer in Basis base ausgeben:
54                 print_integer(stream,base,z);
55         } else {
56                 DeclareType(cl_RT,z);
57                 // Ratio in Basis base ausgeben; Zähler / Nenner
58                 print_integer(stream,base,numerator(z));
59                 fprintchar(stream,'/');
60                 print_integer(stream,base,denominator(z));
61         }
62 }