+
+/** Helper function to print a real number in a nicer way than is CLN's
+ * default. Instead of printing 42.0L0 this just prints 42.0 to ostream os
+ * and instead of 3.99168L7 it prints 3.99168E7. This is fine in GiNaC as
+ * long as it only uses cl_LF and no other floating point types.
+ *
+ * @see numeric::print() */
+void print_real_number(ostream & os, const cl_R & num)
+{
+ cl_print_flags ourflags;
+ if (::instanceof(num, ::cl_RA_ring)) {
+ // case 1: integer or rational, nothing special to do:
+ ::print_real(os, ourflags, num);
+ } else {
+ // case 2: float
+ // make CLN believe this number has default_float_format, so it prints
+ // 'E' as exponent marker instead of 'L':
+ ourflags.default_float_format = ::cl_float_format(The(cl_F)(num));
+ ::print_real(os, ourflags, num);
+ }
+ return;
+}
+
+/** This method adds to the output so it blends more consistently together
+ * with the other routines and produces something compatible to ginsh input.
+ *
+ * @see print_real_number() */