[PPL-devel] [GIT] ppl/ppl(floating_point): Adapted the class to the policies defined in Float.defs.hh.

Fabio Bossi bossi at cs.unipr.it
Tue Sep 22 13:49:18 CEST 2009


Module: ppl/ppl
Branch: floating_point
Commit: 96ade840e5152064796d08ef099b735ecabe21a6
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=96ade840e5152064796d08ef099b735ecabe21a6

Author: Fabio Bossi <bossi at cs.unipr.it>
Date:   Tue Sep 22 13:51:48 2009 +0200

Adapted the class to the policies defined in Float.defs.hh.

---

 src/Floating_Point_Expression.defs.hh      |   60 ++--------------------------
 src/Floating_Point_Expression.templates.hh |    6 +-
 2 files changed, 7 insertions(+), 59 deletions(-)

diff --git a/src/Floating_Point_Expression.defs.hh b/src/Floating_Point_Expression.defs.hh
index ffaf2b7..6d6b336 100644
--- a/src/Floating_Point_Expression.defs.hh
+++ b/src/Floating_Point_Expression.defs.hh
@@ -34,54 +34,6 @@ namespace Parma_Polyhedra_Library {
 //! Exception class indicating the failure of a linearization attempt.
 class Linearization_Failed {};
 
-/*
-  FIXME: considering adapting the whole code of Floating_Point_Expression
-  to use the policies defined in Float.defs.hh instead of the following
-  ones that contain duplicate information.
-*/
-
-//! Policy class defining the IEEE754 half precision format.
-struct IEEE754_Half {
-  static const unsigned short fraction_bits = 10;
-  static const unsigned short exponent_bits = 5;
-  static const unsigned short exponent_bias = 15;
-};
-
-//! Policy class defining the IEEE754 single precision format.
-struct IEEE754_Single {
-  static const unsigned short fraction_bits = 23;
-  static const unsigned short exponent_bits = 8;
-  static const unsigned short exponent_bias = 127;
-};
-
-//! Policy class defining the IEEE754 double precision format.
-struct IEEE754_Double {
-  static const unsigned short fraction_bits = 52;
-  static const unsigned short exponent_bits = 11;
-  static const unsigned short exponent_bias = 1023;
-};
-
-//! Policy class defining the IEEE754 quadruple precision format.
-struct IEEE754_Quadruple {
-  static const unsigned short fraction_bits = 112;
-  static const unsigned short exponent_bits = 15;
-  static const unsigned short exponent_bias = 16383;
-};
-
-//! Policy class defining the IBM single precision format.
-struct IBM_Single {
-  static const unsigned short fraction_bits = 24;
-  static const unsigned short exponent_bits = 7;
-  static const unsigned short exponent_bias = 64;
-};
-
-//! Policy class defining the IBM double precision format.
-struct IBM_Double {
-  static const unsigned short fraction_bits = 56;
-  static const unsigned short exponent_bits = 7;
-  static const unsigned short exponent_bias = 64;
-};
-
 /*! \brief
   \ingroup PPL_CXX_Interface
   A floating point expression on a given format.
@@ -97,13 +49,9 @@ struct IBM_Double {
   should have a floating point type.
   - The class template type parameter \p FP_Format represents the floating
   point format used in the concrete domain.
-  This parameter must be a struct which contains three fields:
-    -# <CODE>static const unsigned short fraction_bits</CODE> that represents
-    the number of bits of the fraction.
-    -# <CODE>static const unsigned short exponent_bits</CODE> that represents
-    the number of bits of the exponent.
-    -# <CODE>static const unsigned short exponent_bias</CODE> that represents
-    the value of exponent bias.
+  This parameter must be a struct similar to the ones defined in file
+  Float.defs.hh, even though it is sufficient to define the two
+  fields MANTISSA_BITS and EXPONENT_BIAS.
 */
 template <typename FP_Interval_Type, typename FP_Format>
 class Floating_Point_Expression {
@@ -241,7 +189,7 @@ typename Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
 Floating_Point_Expression<FP_Interval_Type, FP_Format>::absolute_error =
   std::max(static_cast<typename Floating_Point_Expression<FP_Interval_Type,
 	   FP_Format>::boundary_type>
-           (pow(2, 1 - FP_Format::exponent_bias - FP_Format::fraction_bits)),
+           (pow(2, 1 - FP_Format::EXPONENT_BIAS - FP_Format::MANTISSA_BITS)),
   std::numeric_limits<typename Floating_Point_Expression<FP_Interval_Type,
                                                          FP_Format>
 	                       ::boundary_type>::denorm_min());
diff --git a/src/Floating_Point_Expression.templates.hh b/src/Floating_Point_Expression.templates.hh
index 8c5ce32..557cddc 100644
--- a/src/Floating_Point_Expression.templates.hh
+++ b/src/Floating_Point_Expression.templates.hh
@@ -33,11 +33,11 @@ void
 Floating_Point_Expression<FP_Interval_Type, FP_Format>
 ::relative_error(const FP_Linear_Form& lf, FP_Linear_Form& result) {
   /* FIXME: here we assume that boundary_type can represent
-     (2)^(-FP_Format::fraction_bits) precisely. */
-  FP_Interval_Type error_propagator(-pow(2, -FP_Format::fraction_bits));
+     (2)^(-FP_Format::MANTISSA_BITS) precisely. */
+  FP_Interval_Type error_propagator(-pow(2, -FP_Format::MANTISSA_BITS));
   // FIXME: this may be incorrect for some policies.
   error_propagator.join_assign(FP_Interval_Type(
-                               pow(2, -FP_Format::fraction_bits)));
+                               pow(2, -FP_Format::MANTISSA_BITS)));
 
   // Handle the inhomogeneous term.
   const FP_Interval_Type* current_term = &lf.inhomogeneous_term();




More information about the PPL-devel mailing list