You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
961 B
46 lines
961 B
// print_float_binary().
|
|
|
|
// General includes.
|
|
#include "cl_sysdep.h"
|
|
|
|
// Specification.
|
|
#include "cln/float_io.h"
|
|
|
|
|
|
// Implementation.
|
|
|
|
#include "cln/float.h"
|
|
#include "cl_F.h"
|
|
#include "cln/integer_io.h"
|
|
#include "cl_I.h"
|
|
|
|
namespace cln {
|
|
|
|
void print_float_binary (std::ostream& stream, const cl_F& z)
|
|
{
|
|
// Vorzeichen, Punkt, Mantisse (binär), (Zweiersystem-)Exponent (dezimal)
|
|
cl_idecoded_float m_e_s = integer_decode_float(z);
|
|
var cl_I& m = m_e_s.mantissa;
|
|
var cl_I& s = m_e_s.sign;
|
|
// Vorzeichen ausgeben, falls <0:
|
|
if (eq(s,-1))
|
|
fprintchar(stream,'-');
|
|
// Mantisse binär(!) ausgeben:
|
|
fprintchar(stream,'.');
|
|
print_integer(stream,2,m);
|
|
// Exponent-Marker ausgeben:
|
|
{
|
|
var char exp_marker;
|
|
floattypecase(z
|
|
, exp_marker = 's';
|
|
, exp_marker = 'f';
|
|
, exp_marker = 'd';
|
|
, exp_marker = 'L';
|
|
);
|
|
fprintchar(stream,exp_marker);
|
|
}
|
|
// Exponenten dezimal ausgeben:
|
|
print_integer(stream,10,cl_I(float_exponent(z)));
|
|
}
|
|
|
|
} // namespace cln
|