]> www.ginac.de Git - cln.git/blob - src/float/ffloat/elem/cl_FF_ftrunc.cc
Finalize CLN 1.3.7 release.
[cln.git] / src / float / ffloat / elem / cl_FF_ftrunc.cc
1 // ftruncate().
2
3 // General includes.
4 #include "base/cl_sysdep.h"
5
6 // Specification.
7 #include "cln/ffloat.h"
8
9
10 // Implementation.
11
12 #include "float/ffloat/cl_FF.h"
13
14 namespace cln {
15
16 const cl_FF ftruncate (const cl_FF& x)
17 {
18 // Methode:
19 // x = 0.0 oder e<=0 -> Ergebnis 0.0
20 // 1<=e<=23 -> letzte (24-e) Bits der Mantisse auf 0 setzen,
21 //             Exponent und Vorzeichen beibehalten
22 // e>=24 -> Ergebnis x
23       var ffloat x_ = cl_ffloat_value(x);
24       var uintL uexp = FF_uexp(x_); // e + FF_exp_mid
25       if (uexp <= FF_exp_mid) // 0.0 oder e<=0 ?
26         { return cl_FF_0; }
27         else
28         { if (uexp > FF_exp_mid+FF_mant_len) // e > 23 ?
29             { return x; }
30             else
31             { return allocate_ffloat
32                 ( x_ & // Bitmaske: Bits 23-e..0 gelöscht, alle anderen gesetzt
33                   ~(bit(FF_mant_len+1+FF_exp_mid-uexp)-1)
34                 );
35         }   }
36 }
37
38 }  // namespace cln