// print_rational().
// General includes.
#include "cl_sysdep.h"
// Specification.
#include "cln/rational_io.h"
// Implementation.
#include "cln/output.h"
#include "cln/integer_io.h"
#include "cln/rational.h"
#include "cl_RA.h"
namespace cln {
void print_rational (std::ostream& stream, const cl_print_rational_flags& flags, const cl_RA& z)
{
var unsigned int base = flags.rational_base;
if (flags.rational_readably)
// Radix-Specifier ausgeben:
switch (base) {
case 2:
fprintchar(stream,'#');
fprintchar(stream,'b');
break;
case 8:
fprintchar(stream,'#');
fprintchar(stream,'o');
break;
case 16:
fprintchar(stream,'#');
fprintchar(stream,'x');
break;
case 10:
if (integerp(z)) {
DeclareType(cl_I,z);
// Basis 10 bei Integers durch
// nachgestellten Punkt kennzeichnen:
print_integer(stream,base,z);
fprintchar(stream,'.');
return;
}
default:
// Basis in #nR-Schreibweise ausgeben:
fprintchar(stream,'#');
print_integer(stream,10,base);
fprintchar(stream,'r');
break;
}
if (integerp(z)) {
DeclareType(cl_I,z);
// Integer in Basis base ausgeben:
print_integer(stream,base,z);
} else {
DeclareType(cl_RT,z);
// Ratio in Basis base ausgeben; Zähler / Nenner
print_integer(stream,base,numerator(z));
fprintchar(stream,'/');
print_integer(stream,base,denominator(z));
}
}
} // namespace cln
syntax highlighted by Code2HTML, v. 0.9.1