diff --git a/Data/Floating/CMath.hs b/Data/Floating/CMath.hs
--- a/Data/Floating/CMath.hs
+++ b/Data/Floating/CMath.hs
@@ -17,13 +17,13 @@
     c_acosh, c_acoshf, c_asinh, c_asinhf, c_atanh, c_atanhf, c_cosh, c_coshf,
     c_sinh, c_sinhf, c_tanh, c_tanhf,
 
-    -- * Exponential functions
+    -- * Exponential and logarithmic functions
     c_exp, c_expf, c_exp2, c_exp2f, c_expm1, c_expm1f, c_frexp, c_frexpf,
     c_ilogb, c_ilogbf, c_ldexp, c_ldexpf, c_log, c_logf, c_log10, c_log10f,
     c_log1p, c_log1pf, c_log2, c_log2f, c_logb, c_logbf, c_modf, c_modff,
     c_scalbn, c_scalbnf, c_scalbln, c_scalblnf,
 
-    -- * Power and absolute value functions
+    -- * Power and absolute-value functions
     c_cbrt, c_cbrtf, c_fabs, c_fabsf, c_hypot, c_hypotf, c_pow, c_powf, c_sqrt,
     c_sqrtf,
 
@@ -92,9 +92,9 @@
     c_atan :: CDouble -> CDouble
 foreign import ccall unsafe "atanf"
     c_atanf :: CFloat -> CFloat
-foreign import ccall unsafe "atan"
+foreign import ccall unsafe "atan2"
     c_atan2 :: CDouble -> CDouble -> CDouble
-foreign import ccall unsafe "atanf"
+foreign import ccall unsafe "atan2f"
     c_atan2f :: CFloat -> CFloat -> CFloat
 foreign import ccall unsafe "cos"
     c_cos :: CDouble -> CDouble
@@ -135,7 +135,7 @@
 foreign import ccall unsafe "tanhf"
     c_tanhf :: CFloat -> CFloat
 
--- 7.12.6 Exponential functions
+-- 7.12.6 Exponential and logarithmic functions
 foreign import ccall unsafe "exp"
     c_exp :: CDouble -> CDouble
 foreign import ccall unsafe "expf"
@@ -193,7 +193,7 @@
 foreign import ccall unsafe "scalblnf"
     c_scalblnf :: CFloat -> CLong -> CFloat
 
--- 7.12.7 Power and absolute value functions
+-- 7.12.7 Power and absolute-value functions
 foreign import ccall unsafe "cbrt"
     c_cbrt :: CDouble -> CDouble
 foreign import ccall unsafe "cbrtf"
diff --git a/Data/Floating/Types.hs b/Data/Floating/Types.hs
--- a/Data/Floating/Types.hs
+++ b/Data/Floating/Types.hs
@@ -32,16 +32,6 @@
 -- | The Float type. 
 data Float  = F# Float#
 
--- | This type is identical to CDouble.  For some reason unknown to me, it is
--- impossible to marshal data from Double to CDouble without losing
--- information.  The issue is further complicated by Foreign.C.Types not
--- exporting CDouble's constructor.  Thus, to marshal data from Double to
--- CDouble, we construct an instance of this type and then use unsafeCoerce.
-newtype FuckFFIDouble = FuckD Double
-
--- | The analogue of FuckFFIDouble for CFloat.
-newtype FuckFFIFloat  = FuckF Float
-
 -- | Coercion to floating point types.
 class FloatConvert a b where
     -- | Convert to a floating point type.  Conversions from integers and real
@@ -51,16 +41,16 @@
     toFloating :: a -> b
 
 instance FloatConvert Double CDouble where
-    toFloating = unsafeCoerce . FuckD
+    toFloating = unsafeCoerce
 
 instance FloatConvert CDouble Double where
-    toFloating f = let FuckD x = unsafeCoerce f in x
+    toFloating = unsafeCoerce
 
 instance FloatConvert Float CFloat where
-    toFloating = unsafeCoerce . FuckF
+    toFloating = unsafeCoerce
 
 instance FloatConvert CFloat Float where
-    toFloating f = let FuckF x = unsafeCoerce f in x
+    toFloating = unsafeCoerce
 
 instance FloatConvert Double Float where
     toFloating (D# x) = F# (double2Float# x)
diff --git a/altfloat.cabal b/altfloat.cabal
--- a/altfloat.cabal
+++ b/altfloat.cabal
@@ -1,5 +1,5 @@
 Name:               altfloat
-Version:            0.3
+Version:            0.3.1
 License:            OtherLicense
 License-File:       LICENSE
 Cabal-Version:      >= 1.6
diff --git a/config.h.in b/config.h.in
--- a/config.h.in
+++ b/config.h.in
@@ -3,6 +3,27 @@
 /* The normal alignment of `fenv_t', in bytes. */
 #undef ALIGNOF_FENV_T
 
+/* Define to the value of DBL_MANT_DIG */
+#undef DBL_MANT_DIG_VAL
+
+/* Define to the value of DBL_MAX_EXP */
+#undef DBL_MAX_EXP_VAL
+
+/* Define to the value of DBL_MIN_EXP */
+#undef DBL_MIN_EXP_VAL
+
+/* Define to the value of FLT_MANT_DIG */
+#undef FLT_MANT_DIG_VAL
+
+/* Define to the value of FLT_MAX_EXP */
+#undef FLT_MAX_EXP_VAL
+
+/* Define to the value of FLT_MIN_EXP */
+#undef FLT_MIN_EXP_VAL
+
+/* Define to the value of FLT_RADIX */
+#undef FLT_RADIX_VAL
+
 /* Define to 1 if you do not have a working acosf function. */
 #undef NEED_LIBM_ACOSF
 
diff --git a/configure b/configure
--- a/configure
+++ b/configure
@@ -3036,6 +3036,136 @@
 
 
 
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking floating point radix" >&5
+$as_echo_n "checking floating point radix... " >&6; }
+	if test "${altfloat_cv_FLT_RADIX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "FLT_RADIX" "altfloat_cv_FLT_RADIX"        "#include <float.h>"; then :
+
+fi
+
+fi
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $altfloat_cv_FLT_RADIX" >&5
+$as_echo "$altfloat_cv_FLT_RADIX" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_RADIX_VAL $altfloat_cv_FLT_RADIX
+_ACEOF
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking precision of double" >&5
+$as_echo_n "checking precision of double... " >&6; }
+	if test "${altfloat_cv_DBL_MANT_DIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "DBL_MANT_DIG" "altfloat_cv_DBL_MANT_DIG"        "#include <float.h>"; then :
+
+fi
+
+fi
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $altfloat_cv_DBL_MANT_DIG digits" >&5
+$as_echo "$altfloat_cv_DBL_MANT_DIG digits" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define DBL_MANT_DIG_VAL $altfloat_cv_DBL_MANT_DIG
+_ACEOF
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking precision of float" >&5
+$as_echo_n "checking precision of float... " >&6; }
+	if test "${altfloat_cv_FLT_MANT_DIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "FLT_MANT_DIG" "altfloat_cv_FLT_MANT_DIG"        "#include <float.h>"; then :
+
+fi
+
+fi
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $altfloat_cv_FLT_MANT_DIG digits" >&5
+$as_echo "$altfloat_cv_FLT_MANT_DIG digits" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_MANT_DIG_VAL $altfloat_cv_FLT_MANT_DIG
+_ACEOF
+
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking minimum normal exponent for double" >&5
+$as_echo_n "checking minimum normal exponent for double... " >&6; }
+	if test "${altfloat_cv_DBL_MIN_EXP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "DBL_MIN_EXP" "altfloat_cv_DBL_MIN_EXP"        "#include <float.h>"; then :
+
+fi
+
+fi
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $altfloat_cv_DBL_MIN_EXP" >&5
+$as_echo "$altfloat_cv_DBL_MIN_EXP" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define DBL_MIN_EXP_VAL $altfloat_cv_DBL_MIN_EXP
+_ACEOF
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking maximum finite exponent for double" >&5
+$as_echo_n "checking maximum finite exponent for double... " >&6; }
+	if test "${altfloat_cv_DBL_MAX_EXP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "DBL_MAX_EXP" "altfloat_cv_DBL_MAX_EXP"        "#include <float.h>"; then :
+
+fi
+
+fi
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $altfloat_cv_DBL_MAX_EXP" >&5
+$as_echo "$altfloat_cv_DBL_MAX_EXP" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define DBL_MAX_EXP_VAL $altfloat_cv_DBL_MAX_EXP
+_ACEOF
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking minimum normal exponent for float" >&5
+$as_echo_n "checking minimum normal exponent for float... " >&6; }
+	if test "${altfloat_cv_FLT_MIN_EXP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "FLT_MIN_EXP" "altfloat_cv_FLT_MIN_EXP"        "#include <float.h>"; then :
+
+fi
+
+fi
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $altfloat_cv_FLT_MIN_EXP" >&5
+$as_echo "$altfloat_cv_FLT_MIN_EXP" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_MIN_EXP_VAL $altfloat_cv_FLT_MIN_EXP
+_ACEOF
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking maximum finite exponent for float" >&5
+$as_echo_n "checking maximum finite exponent for float... " >&6; }
+	if test "${altfloat_cv_FLT_MAX_EXP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "FLT_MAX_EXP" "altfloat_cv_FLT_MAX_EXP"        "#include <float.h>"; then :
+
+fi
+
+fi
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $altfloat_cv_FLT_MAX_EXP" >&5
+$as_echo "$altfloat_cv_FLT_MAX_EXP" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_MAX_EXP_VAL $altfloat_cv_FLT_MAX_EXP
+_ACEOF
+
+
+
+
 replaced_libm=no
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing nan" >&5
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@
 dnl without any warranty.
 
 AC_PREREQ(2.62)
-AC_INIT([altfloat],[0.3],[nbowler@draconx.ca])
+AC_INIT([altfloat],[0.3.1],[nbowler@draconx.ca])
 AC_CONFIG_SRCDIR([altfloat.cabal])
 AC_CONFIG_HEADER([config.h])
 
