13 #include "cl_LF_impl.h"
17 const cl_FF cl_LF_to_FF (const cl_LF& x)
24 LF_decode(x, { return cl_FF_0; }, sign=,exp=,ptr=,len=,);
25 // intDsize*len-FF_mant_len-1 Bits der Mantisse wegrunden:
26 // erste k := ceiling(FF_mant_len+2,intDsize) Digits nach mant holen:
28 var uint64 mant = get_max64_Dptr(FF_mant_len+2,ptr);
30 var uint32 mant = get_max32_Dptr(FF_mant_len+2,ptr);
32 ptr = ptr mspop ceiling(FF_mant_len+2,intDsize);
33 var const int shiftcount = ceiling(FF_mant_len+2,intDsize)*intDsize-(FF_mant_len+1);
34 if ( ((mant & bit(shiftcount-1)) ==0) // Bit 7 war 0 -> abrunden
35 || ( ((mant & (bit(shiftcount-1)-1)) ==0) // war 1, Bits 6..0 >0 -> aufrunden
36 && !test_loop_msp(ptr,len-ceiling(FF_mant_len+2,intDsize)) // weitere Bits /=0 -> aufrunden
38 && ((mant & bit(shiftcount)) ==0)
41 { mant = mant >> shiftcount; }
44 { mant = mant >> shiftcount;
46 if (mant >= bit(FF_mant_len+1))
47 // Überlauf durchs Runden
48 { mant = mant>>1; exp = exp+1; } // Mantisse rechts schieben
50 return encode_FF(sign,exp,mant);