@ -3,8 +3,6 @@
// General includes.
// General includes.
# include "cl_sysdep.h"
# include "cl_sysdep.h"
CL_PROVIDE ( cl_F_epspos )
// Specification.
// Specification.
# include "cln/float.h"
# include "cln/float.h"
@ -19,23 +17,7 @@ CL_PROVIDE(cl_F_epspos)
namespace cln {
namespace cln {
// Bei Floats mit d Bits (incl. Hiddem Bit, also d = ?F_mant_len+1)
// ist ?F_epsilon = 2^-d*(1+2^(1-d)), d.h. Mantisse 10...01, Vorzeichen +.
static const cl_SF SF_epsilon =
make_SF ( 0 , SF_exp_mid - SF_mant_len , bit ( SF_mant_len ) + 1 ) ;
static const cl_FF FF_epsilon =
encode_FF ( 0 , - FF_mant_len , bit ( FF_mant_len ) + 1 ) ;
static const cl_DF DF_epsilon =
# if (cl_word_size==64)
encode_DF ( 0 , - DF_mant_len , bit ( DF_mant_len ) + 1 ) ;
# else
encode_DF ( 0 , - DF_mant_len , bit ( DF_mant_len - 32 ) , 1 ) ;
# endif
inline const cl_LF LF_epsilon ( uintC len )
static inline const cl_LF LF_epsilon ( uintC len )
{
{
var Lfloat erg = allocate_lfloat ( len , LF_exp_mid + 1 - intDsize * len , 0 ) ;
var Lfloat erg = allocate_lfloat ( len , LF_exp_mid + 1 - intDsize * len , 0 ) ;
var uintD * ptr = & TheLfloat ( erg ) - > data [ 0 ] ;
var uintD * ptr = & TheLfloat ( erg ) - > data [ 0 ] ;
@ -53,6 +35,22 @@ inline const cl_LF LF_epsilon (uintC len)
const cl_F float_epsilon ( float_format_t f )
const cl_F float_epsilon ( float_format_t f )
{
{
// Bei Floats mit d Bits (incl. Hiddem Bit, also d = ?F_mant_len+1)
// ist ?F_epsilon = 2^-d*(1+2^(1-d)), d.h. Mantisse 10...01, Vorzeichen +.
static const cl_SF SF_epsilon =
make_SF ( 0 , SF_exp_mid - SF_mant_len , bit ( SF_mant_len ) + 1 ) ;
static const cl_FF FF_epsilon =
encode_FF ( 0 , - FF_mant_len , bit ( FF_mant_len ) + 1 ) ;
static const cl_DF DF_epsilon =
# if (cl_word_size==64)
encode_DF ( 0 , - DF_mant_len , bit ( DF_mant_len ) + 1 ) ;
# else
encode_DF ( 0 , - DF_mant_len , bit ( DF_mant_len - 32 ) , 1 ) ;
# endif
floatformatcase ( ( uintC ) f
floatformatcase ( ( uintC ) f
, return SF_epsilon ;
, return SF_epsilon ;
, return FF_epsilon ;
, return FF_epsilon ;
@ -63,4 +61,3 @@ const cl_F float_epsilon (float_format_t f)
} // namespace cln
} // namespace cln
CL_PROVIDE_END ( cl_F_epspos )