From 3c2d70ea29a09536a4721271d928a12ec7d2af84 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Fri, 19 Feb 2010 00:05:58 -0500 Subject: [PATCH] floating: Add another characteristic function and generalize types. --- Data/Floating/Classes.hs | 8 ++++++-- Data/Floating/Types/Double.hs | 1 + Data/Floating/Types/Float.hs | 1 + configure.ac | 5 +++++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Data/Floating/Classes.hs b/Data/Floating/Classes.hs index f67f234..4c67026 100644 --- a/Data/Floating/Classes.hs +++ b/Data/Floating/Classes.hs @@ -130,7 +130,11 @@ class Floating a => RealFloat a where -- | Class for the basic floating point types. class (Roundable a, RealFloat a) => PrimFloat a where -- | Radix of significand digits. - floatRadix :: a -> Int + floatRadix :: Num b => a -> b -- | Number of digits in the significand. - floatPrecision :: a -> Int + floatPrecision :: Num b => a -> b + -- | Minimum and maximum integers, respectively, such that the radix raised + -- to one less than that power is representable as a normalized, finite + -- floating point number. + floatRange :: Num b => a -> (b, b) classify :: a -> FPClassification diff --git a/Data/Floating/Types/Double.hs b/Data/Floating/Types/Double.hs index 6327372..cc6e3b1 100644 --- a/Data/Floating/Types/Double.hs +++ b/Data/Floating/Types/Double.hs @@ -163,4 +163,5 @@ instance RealFloat Double where instance PrimFloat Double where floatRadix = const FLT_RADIX_VAL floatPrecision = const DBL_MANT_DIG_VAL + floatRange = const (DBL_MIN_EXP_VAL, DBL_MAX_EXP_VAL) classify = toEnum . fromIntegral . double_classify . toFloating diff --git a/Data/Floating/Types/Float.hs b/Data/Floating/Types/Float.hs index 51f95f6..b8c1f66 100644 --- a/Data/Floating/Types/Float.hs +++ b/Data/Floating/Types/Float.hs @@ -159,4 +159,5 @@ instance RealFloat Float where instance PrimFloat Float where floatRadix = const FLT_RADIX_VAL floatPrecision = const FLT_MANT_DIG_VAL + floatRange = const (FLT_MIN_EXP_VAL, FLT_MAX_EXP_VAL) classify = toEnum . fromIntegral . float_classify . toFloating diff --git a/configure.ac b/configure.ac index af5d8a4..7230a97 100644 --- a/configure.ac +++ b/configure.ac @@ -42,6 +42,11 @@ CHECK_FLOAT([floating point radix], [FLT_RADIX]) CHECK_FLOAT([precision of double], [DBL_MANT_DIG], [digits]) CHECK_FLOAT([precision of float], [FLT_MANT_DIG], [digits]) +CHECK_FLOAT([minimum normal exponent for double], [DBL_MIN_EXP]) +CHECK_FLOAT([maximum finite exponent for double], [DBL_MAX_EXP]) +CHECK_FLOAT([minimum normal exponent for float], [FLT_MIN_EXP]) +CHECK_FLOAT([maximum finite exponent for float], [FLT_MAX_EXP]) + dnl Check for some C library functions. m4_define([C99_FLOAT_FUNCS], [dnl [acosf], [asinf], [atanf], [atan2f], [cosf], [sinf], [tanf], [acoshf], -- 2.11.4.GIT