// binary operator - // General includes. #include "cl_sysdep.h" // Specification. #include "cln/dfloat.h" // Implementation. #include "cl_DF.h" #include "cl_ieee.h" namespace cln { NEED_IEEE_FLOATS() const cl_DF operator- (const cl_DF& x1, const cl_DF& x2) { // Methode: // (- x1 x2) = (+ x1 (- x2)) #ifdef FAST_DOUBLE double_to_DF(DF_to_double(x1) - DF_to_double(x2), return , TRUE, TRUE, // Overflow und subnormale Zahl abfangen FALSE, // kein Underflow mit Ergebnis +/- 0.0 möglich // (nach Definition der subnormalen Zahlen) FALSE, FALSE // keine Singularität, kein NaN als Ergebnis möglich ); #else #if (cl_word_size==64) var dfloat x2_ = TheDfloat(x2)->dfloat_value; if (DF_uexp(x2_) == 0) { return x1; } else { return x1 + allocate_dfloat(x2_ ^ bit(63)); } #else var uint32 x2_semhi = TheDfloat(x2)->dfloat_value.semhi; var uint32 x2_mlo = TheDfloat(x2)->dfloat_value.mlo; if (DF_uexp(x2_semhi) == 0) { return x1; } else { return x1 + allocate_dfloat(x2_semhi ^ bit(31), x2_mlo); } #endif #endif } } // namespace cln