|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r73598 - in sandbox/e_float: boost/e_float libs/e_float/src/e_float/gmp
From: e_float_at_[hidden]
Date: 2011-08-07 12:16:23
Author: christopher_kormanyos
Date: 2011-08-07 12:16:20 EDT (Sun, 07 Aug 2011)
New Revision: 73598
URL: http://svn.boost.org/trac/boost/changeset/73598
Log:
- Cleanup. Testing and verification of all three back-ends.
Text files modified:
sandbox/e_float/boost/e_float/e_float_efx.hpp | 7 +--
sandbox/e_float/boost/e_float/e_float_gmp.hpp | 11 ++---
sandbox/e_float/boost/e_float/e_float_mpfr.hpp | 10 ++++-
sandbox/e_float/boost/e_float/e_float_types.hpp | 9 ----
sandbox/e_float/libs/e_float/src/e_float/gmp/e_float_gmp.cpp | 79 +++++----------------------------------
sandbox/e_float/libs/e_float/src/e_float/gmp/e_float_gmp_protos.h | 2
6 files changed, 27 insertions(+), 91 deletions(-)
Modified: sandbox/e_float/boost/e_float/e_float_efx.hpp
==============================================================================
--- sandbox/e_float/boost/e_float/e_float_efx.hpp (original)
+++ sandbox/e_float/boost/e_float/e_float_efx.hpp 2011-08-07 12:16:20 EDT (Sun, 07 Aug 2011)
@@ -57,7 +57,6 @@
INT32 prec_elem;
public:
-
// Constructors
e_float() : data (),
exp (static_cast<INT64>(0)),
@@ -97,6 +96,7 @@
public:
virtual INT32 cmp(const e_float& v) const;
+ // Specific special values.
virtual const e_float& my_value_nan(void) const;
virtual const e_float& my_value_inf(void) const;
virtual const e_float& my_value_max(void) const;
@@ -115,8 +115,10 @@
virtual e_float& mul_unsigned_long_long(const unsigned long long n);
virtual e_float& div_unsigned_long_long(const unsigned long long n);
+ // Elementary primitives.
virtual e_float& calculate_inv (void);
virtual e_float& calculate_sqrt(void);
+ virtual e_float& negate(void) { if(!iszero()) { neg = !neg; } return *this; }
// Comparison functions
virtual bool isnan (void) const { return (fpclass == ef_NaN); }
@@ -128,8 +130,6 @@
virtual bool isint (void) const;
virtual bool isneg (void) const { return neg; }
- virtual e_float& negate(void) { if(!iszero()) { neg = !neg; } return *this; }
-
// Operators pre-increment and pre-decrement
virtual e_float& operator++(void);
virtual e_float& operator--(void);
@@ -160,7 +160,6 @@
virtual void get_output_string(std::string& str, INT64& my_exp, const std::size_t number_of_digits) const;
virtual bool rd_string(const char* const s);
-
};
}
Modified: sandbox/e_float/boost/e_float/e_float_gmp.hpp
==============================================================================
--- sandbox/e_float/boost/e_float/e_float_gmp.hpp (original)
+++ sandbox/e_float/boost/e_float/e_float_gmp.hpp 2011-08-07 12:16:20 EDT (Sun, 07 Aug 2011)
@@ -57,9 +57,8 @@
class e_float : public ::e_float_base
{
public:
-
static const INT32 ef_digits = static_cast<INT32>(((static_cast<INT64>(ef_digits10) * 3322LL) + 500LL) / 1000LL);
- static const INT32 ef_radix = 2;
+ static const INT32 ef_radix = static_cast<INT32>(2);
static const INT64 ef_max_exp = static_cast<INT64>(+2147483640LL);
static const INT64 ef_min_exp = static_cast<INT64>(-2147483640LL);
@@ -67,7 +66,6 @@
static const INT64 ef_min_exp10 = static_cast<INT64>(-646456990LL);
private:
-
static const INT32 ef_digits2 = static_cast<INT32>(((static_cast<INT64>(ef_digits10_tol) * 3322LL) + 500LL) / 1000LL);
typedef enum enum_fpclass
@@ -83,6 +81,7 @@
::mpf_t rop;
public:
+ // Constructors
e_float();
e_float(const char n);
e_float(const signed char n);
@@ -111,9 +110,9 @@
explicit e_float(const ::mpf_t& op);
public:
-
virtual INT32 cmp(const e_float& v) const;
+ // Specific special values.
virtual const e_float& my_value_nan(void) const;
virtual const e_float& my_value_inf(void) const;
virtual const e_float& my_value_max(void) const;
@@ -132,8 +131,10 @@
virtual e_float& mul_unsigned_long_long(const unsigned long long n);
virtual e_float& div_unsigned_long_long(const unsigned long long n);
+ // Elementary primitives.
virtual e_float& calculate_inv (void);
virtual e_float& calculate_sqrt(void);
+ virtual e_float& negate(void);
// Comparison functions
virtual bool isnan (void) const { return (fpclass == ef_NaN); }
@@ -145,8 +146,6 @@
virtual bool isint (void) const;
virtual bool isneg (void) const;
- virtual e_float& negate(void);
-
// Operators pre-increment and pre-decrement
virtual e_float& operator++(void);
virtual e_float& operator--(void);
Modified: sandbox/e_float/boost/e_float/e_float_mpfr.hpp
==============================================================================
--- sandbox/e_float/boost/e_float/e_float_mpfr.hpp (original)
+++ sandbox/e_float/boost/e_float/e_float_mpfr.hpp 2011-08-07 12:16:20 EDT (Sun, 07 Aug 2011)
@@ -78,6 +78,7 @@
::mpfr_t rop;
public:
+ // Constructors
e_float();
e_float(const char n);
e_float(const signed char n);
@@ -104,6 +105,7 @@
virtual INT32 cmp(const e_float& v) const;
+ // Specific special values.
virtual const e_float& my_value_nan(void) const;
virtual const e_float& my_value_inf(void) const;
virtual const e_float& my_value_max(void) const;
@@ -111,6 +113,7 @@
virtual void precision(const INT32) { }
+ // Basic operations.
virtual e_float& operator= (const e_float& v);
virtual e_float& operator+=(const e_float& v);
virtual e_float& operator-=(const e_float& v);
@@ -121,9 +124,12 @@
virtual e_float& mul_unsigned_long_long(const unsigned long long n);
virtual e_float& div_unsigned_long_long(const unsigned long long n);
+ // Elementary primitives.
virtual e_float& calculate_inv (void);
virtual e_float& calculate_sqrt(void);
+ virtual e_float& negate(void);
+ // Comparison functions
virtual bool isnan (void) const;
virtual bool isinf (void) const;
virtual bool isfinite(void) const;
@@ -133,11 +139,11 @@
virtual bool isint (void) const;
virtual bool isneg (void) const;
- virtual e_float& negate(void);
-
+ // Operators pre-increment and pre-decrement.
virtual e_float& operator++(void);
virtual e_float& operator--(void);
+ // Conversion routines.
virtual void extract_parts (double& mantissa, INT64& exponent) const;
virtual double extract_double (void) const;
virtual long double extract_long_double (void) const;
Modified: sandbox/e_float/boost/e_float/e_float_types.hpp
==============================================================================
--- sandbox/e_float/boost/e_float/e_float_types.hpp (original)
+++ sandbox/e_float/boost/e_float/e_float_types.hpp 2011-08-07 12:16:20 EDT (Sun, 07 Aug 2011)
@@ -29,14 +29,5 @@
typedef signed int INT32;
typedef unsigned int UINT32;
- typedef signed short INT16;
- typedef unsigned short UINT16;
-
- #ifndef _WINDEF_
-
- typedef signed char INT8;
- typedef unsigned char UINT8;
-
- #endif
#endif // _E_FLOAT_TYPES_HPP_
Modified: sandbox/e_float/libs/e_float/src/e_float/gmp/e_float_gmp.cpp
==============================================================================
--- sandbox/e_float/libs/e_float/src/e_float/gmp/e_float_gmp.cpp (original)
+++ sandbox/e_float/libs/e_float/src/e_float/gmp/e_float_gmp.cpp 2011-08-07 12:16:20 EDT (Sun, 07 Aug 2011)
@@ -866,18 +866,17 @@
return ((!b_neg) ? static_cast<signed long long>(1) : static_cast<signed long long>(-1));
}
+ // Extract a signed long long-type string from e_float.
static const char c0 = static_cast<char>('\0');
-
std::vector<char> str(64u, c0);
-
mp_exp_t p10;
static_cast<void>(::mpf_get_str(&str[0], &p10, 10, str.size() - 1u, nx.rop));
std::string str_sll(static_cast<std::size_t>(p10), static_cast<char>('0'));
-
std::copy(str.begin(), std::find(str.begin(), str.end(), c0), str_sll.begin());
+ // Get the signed long long result.
std::stringstream ss;
ss << str_sll;
signed long long n;
@@ -918,20 +917,19 @@
return static_cast<unsigned long long>(1u);
}
+ // Extract an unsigned long long-type string from e_float.
static const char c0 = static_cast<char>('\0');
-
std::vector<char> str(64u, c0);
-
mp_exp_t p10;
static_cast<void>(::mpf_get_str(&str[0], &p10, 10, str.size() - 1u, nx.rop));
- std::string str_sll(static_cast<std::size_t>(p10), static_cast<char>('0'));
-
- std::copy(str.begin(), std::find(str.begin(), str.end(), c0), str_sll.begin());
+ std::string str_ull(static_cast<std::size_t>(p10), static_cast<char>('0'));
+ std::copy(str.begin(), std::find(str.begin(), str.end(), c0), str_ull.begin());
+ // Get the unsigned long long result.
std::stringstream ss;
- ss << str_sll;
+ ss << str_ull;
unsigned long long n;
ss >> n;
@@ -970,7 +968,7 @@
std::string str_fmt = std::string("%.10Fe");
// Get the ten digits.
- std::tr1::array<char, 64u> buf = {{ static_cast<char>(0) }};
+ std::tr1::array<char, 64u> buf = {{ static_cast<char>('0') }};
static_cast<void>(gmp_sprintf(buf.data(), str_fmt.c_str(), rop));
@@ -1014,60 +1012,6 @@
}
}
-/*
-void gmp::e_float::wr_string(std::string& str, std::ostream& os) const
-{
- if(isnan())
- {
- str = "NaN";
- return;
- }
-
- if(isinf())
- {
- str = "INF";
- return;
- }
-
- static const std::streamsize p_min = static_cast<std::streamsize>(10);
- static const std::streamsize p_lim = static_cast<std::streamsize>(ef_digits10_tol);
- const std::streamsize p = (std::max)(os.precision(), p_min);
-
- const std::streamsize my_precision = (std::min)(p, p_lim);
-
- const std::ios::fmtflags f = os.flags();
-
- const bool my_uppercase = ((f & std::ios::uppercase) != static_cast<std::ios::fmtflags>(0u));
- const bool my_showpos = ((f & std::ios::showpos) != static_cast<std::ios::fmtflags>(0u));
- const bool my_scientific = ((f & std::ios::scientific) != static_cast<std::ios::fmtflags>(0u));
-
- // Create a format string such as "%+.99Fe"
- const std::string str_fmt = (my_showpos ? "%+." : "%.")
- + Util::lexical_cast(my_precision - (my_scientific ? 1 : 0))
- + (my_scientific ? (my_uppercase ? "FE" : "Fe") : (my_uppercase ? "FG" : "Fg"));
-
- std::tr1::array<char, static_cast<std::size_t>(e_float::ef_digits10_tol + 32)> buf = {{ static_cast<char>(0) }};
-
- static_cast<void>(gmp_sprintf(buf.data(), str_fmt.c_str(), rop));
-
- // Set the result string and remove the '\0' padding by using the c_str() representation.
- str = std::string(buf.data());
-
- const std::size_t pos_E = (my_uppercase ? str.rfind('E') : str.rfind('e'));
-
- if(pos_E != std::string::npos)
- {
- // Pad the exponent number field with additional zeros such that the width
- // of the exponent number field is equal to the width of ef_max_exp10.
- const std::size_t pos_exp = static_cast<std::string::size_type>(pos_E + 2u);
-
- const std::string::size_type width_of_exp = str.length() - pos_exp;
-
- str.insert(pos_exp, std::string(width_of_exponent_field() - width_of_exp, static_cast<char>('0')));
- }
-}
-*/
-
void gmp::e_float::get_output_string(std::string& str, INT64& my_exp, const std::size_t number_of_digits) const
{
static_cast<void>(my_exp);
@@ -1079,7 +1023,7 @@
const std::string str_fmt = std::string("%.") + (Util::lexical_cast(the_number_of_digits_scientific) + "Fe");
// Get the string representation of the e_float in scientific notation (lowercase, noshowpos).
- std::tr1::array<char, static_cast<std::size_t>(e_float::ef_digits10_tol + 32)> buf = {{ static_cast<char>(0) }};
+ std::tr1::array<char, static_cast<std::size_t>(e_float::ef_digits10_tol + 32)> buf = {{ static_cast<char>('0') }};
static_cast<void>(gmp_sprintf(buf.data(), str_fmt.c_str(), rop));
@@ -1185,10 +1129,7 @@
// Set the e_float value.
const INT32 n_set_result = static_cast<INT32>(::mpf_init_set_str(rop, str.c_str(), 10));
- if(b_negate)
- {
- negate();
- }
+ if(b_negate) { negate(); }
return (n_set_result == static_cast<INT32>(0));
}
Modified: sandbox/e_float/libs/e_float/src/e_float/gmp/e_float_gmp_protos.h
==============================================================================
--- sandbox/e_float/libs/e_float/src/e_float/gmp/e_float_gmp_protos.h (original)
+++ sandbox/e_float/libs/e_float/src/e_float/gmp/e_float_gmp_protos.h 2011-08-07 12:16:20 EDT (Sun, 07 Aug 2011)
@@ -63,7 +63,7 @@
inline void mpf_floor (mpf_ptr dst, mpf_srcptr x) { ::__gmpf_floor (dst, x); }
inline void mpf_sqrt (mpf_ptr dst, mpf_srcptr x) { ::__gmpf_sqrt (dst, x); }
inline int mpf_cmp (mpf_srcptr x, mpf_srcptr y) { return ::__gmpf_cmp (x, y); }
- inline int mpf_sgn (mpf_srcptr x) { return x->_mp_size < 0 ? -1 : (x->_mp_size > 0); }
+ inline int mpf_sgn (mpf_srcptr x) { return ((x->_mp_size < 0) ? -1 : ((x->_mp_size > 0) ? 1 : 0)); }
inline int mpf_integer_p (mpf_srcptr src) { return ::__gmpf_integer_p (src); }
inline double mpf_get_d (mpf_srcptr x) { return ::__gmpf_get_d (x); }
inline double mpf_get_d_2exp (signed long int* e, mpf_srcptr x) { return ::__gmpf_get_d_2exp (e, x); }
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk