]> www.ginac.de Git - cln.git/blob - src/complex/output/cl_N_bprint.cc
* All Files have been modified for inclusion of namespace cln;
[cln.git] / src / complex / output / cl_N_bprint.cc
1 // print_complex().
2
3 // General includes.
4 #include "cl_sysdep.h"
5
6 // Specification.
7 #include "cln/complex_io.h"
8
9
10 // Implementation.
11
12 #include "cln/output.h"
13 #include "cln/complex.h"
14 #include "cl_C.h"
15 #include "cln/real_io.h"
16
17 namespace cln {
18
19 void print_complex (cl_ostream stream, const cl_print_number_flags& flags, const cl_N& z)
20 {
21         if (realp(z)) {
22                 DeclareType(cl_R,z);
23                 print_real(stream,flags,z);
24         } else {
25                 DeclareType(cl_C,z);
26                 var cl_R re = realpart(z);
27                 var cl_R im = imagpart(z);
28                 if (flags.complex_readably) {
29                         // Common Lisp #C(re im) syntax
30                         fprintchar(stream,'#');
31                         fprintchar(stream,'C');
32                         fprintchar(stream,'(');
33                         print_real(stream,flags,re);
34                         fprintchar(stream,' ');
35                         print_real(stream,flags,im);
36                         fprintchar(stream,')');
37                 } else {
38                         // Standard mathematical notation: re + im i
39                         if (!eq(im,0)) {
40                                 if (!eq(re,0)) {
41                                         // Example: 3-7i
42                                         print_real(stream,flags,re);
43                                         if (minusp(im)) {
44                                                 fprintchar(stream,'-');
45                                                 print_real(stream,flags,-im);
46                                         } else {
47                                                 fprintchar(stream,'+');
48                                                 print_real(stream,flags,im);
49                                         }
50                                         fprintchar(stream,'i');
51                                 } else {
52                                         // Example: 6i
53                                         print_real(stream,flags,im);
54                                         fprintchar(stream,'i');
55                                 }
56                         } else {
57                                 // Example: 8
58                                 print_real(stream,flags,re);
59                         }
60                 }
61         }
62 }
63
64 }  // namespace cln