// cl_DF_to_I(). // General includes. #include "cl_sysdep.h" // Specification. #include "cl_DF.h" // Implementation. #include "cln/integer.h" #include "cl_I.h" namespace cln { const cl_I cl_DF_to_I (const cl_DF& x) { // Methode: // Falls x=0.0, Ergebnis 0. // Sonst (ASH Vorzeichen*Mantisse (e-53)). #if (cl_word_size==64) // x entpacken: var cl_signean sign; var sintL exp; var sint64 mant; DF_decode(x, { return 0; }, sign=,exp=,mant=); exp = exp-(DF_mant_len+1); // mant mit Vorzeichen versehen: if (!(sign==0)) { mant = -mant; } // in ein Bignum umwandeln und shiften: return ash( Q_to_I(mant), exp ); #else // x entpacken: var cl_signean sign; var sintL exp; var sint32 manthi; var uint32 mantlo; DF_decode2(x, { return 0; }, sign=,exp=,manthi=,mantlo=); exp = exp-(DF_mant_len+1); // mant mit Vorzeichen versehen: if (!(sign==0)) { manthi = -manthi; mantlo = -mantlo; if (!(mantlo==0)) { manthi -= 1; } } // in ein Bignum umwandeln und shiften: return ash( L2_to_I(manthi,mantlo), exp ); #endif } } // namespace cln