7 #include "cln/dfloat.h"
16 const cl_DF ftruncate (const cl_DF& x)
19 // x = 0.0 oder e<=0 -> Ergebnis 0.0
20 // 1<=e<=52 -> letzte (53-e) Bits der Mantisse auf 0 setzen,
21 // Exponent und Vorzeichen beibehalten
22 // e>=53 -> Ergebnis x
23 #if (cl_word_size==64)
24 var dfloat x_ = TheDfloat(x)->dfloat_value;
25 var uintL uexp = DF_uexp(x_); // e + DF_exp_mid
26 if (uexp <= DF_exp_mid) // 0.0 oder e<=0 ?
29 { if (uexp > DF_exp_mid+DF_mant_len) // e > 52 ?
33 { return allocate_dfloat
34 ( x_ & // Bitmaske: Bits 52-e..0 gelöscht, alle anderen gesetzt
35 ~(bit(DF_mant_len+1+DF_exp_mid-uexp)-1)
39 var uint32 semhi = TheDfloat(x)->dfloat_value.semhi;
40 var uint32 mlo = TheDfloat(x)->dfloat_value.mlo;
41 var uintL uexp = DF_uexp(semhi); // e + DF_exp_mid
42 if (uexp <= DF_exp_mid) // 0.0 oder e<=0 ?
45 { if (uexp > DF_exp_mid+DF_mant_len) // e > 52 ?
49 if (uexp > DF_exp_mid+DF_mant_len+1-32) // e > 21 ?
50 { return allocate_dfloat
52 mlo & // Bitmaske: Bits 52-e..0 gelöscht, alle anderen gesetzt
53 ~(bit(DF_mant_len+1+DF_exp_mid-uexp)-1)
57 { return allocate_dfloat
58 ( semhi & // Bitmaske: Bits 20-e..0 gelöscht, alle anderen gesetzt
59 ~(bit(DF_mant_len+1+DF_exp_mid-32-uexp)-1),