diff --git a/configure b/configure
index 295f435..7cdba52 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in Revision: 62451 .
+# From configure.in Revision: 62515 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.61 for python 3.0.
 #
@@ -21082,6 +21082,435 @@
 LIBS_SAVE=$LIBS
 LIBS="$LIBS $LIBM"
 
+# temporary checks to try to track down what's going wrong
+# with test_math on Debian/alpha.  These checks will be
+# removed later.
+
+case $ac_sys_machine in
+alpha*)
+
+    { echo "$as_me:$LINENO: checking whether 9.88e-324 compares unequal to 0.0" >&5
+echo $ECHO_N "checking whether 9.88e-324 compares unequal to 0.0... $ECHO_C" >&6; }
+    if test "$cross_compiling" = yes; then
+  ac_cv_subnormal_nonzero=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+    #include <stdlib.h>
+    int main() {
+        double x = 9.88e-324;
+        if (x != 0.0)
+            exit(0);
+        else
+            exit(1);
+    }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_subnormal_nonzero=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_subnormal_nonzero=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+    { echo "$as_me:$LINENO: result: $ac_cv_subnormal_nonzero" >&5
+echo "${ECHO_T}$ac_cv_subnormal_nonzero" >&6; }
+
+    { echo "$as_me:$LINENO: checking whether log(9.88e-324) succeeds" >&5
+echo $ECHO_N "checking whether log(9.88e-324) succeeds... $ECHO_C" >&6; }
+    if test "$cross_compiling" = yes; then
+  ac_cv_log_subnormal_succeeds=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+    #include <math.h>
+    #include <stdlib.h>
+    int main() {
+        double x = 9.88e-324;
+        x = log(x);
+        exit(0);
+    }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_log_subnormal_succeeds=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_log_subnormal_succeeds=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+    { echo "$as_me:$LINENO: result: $ac_cv_log_subnormal_succeeds" >&5
+echo "${ECHO_T}$ac_cv_log_subnormal_succeeds" >&6; }
+
+    { echo "$as_me:$LINENO: checking whether log(9.88e-324) returns correct result" >&5
+echo $ECHO_N "checking whether log(9.88e-324) returns correct result... $ECHO_C" >&6; }
+    if test "$cross_compiling" = yes; then
+  ac_cv_log_subnormal_returns_correct_result=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+    #include <math.h>
+    #include <stdlib.h>
+    int main() {
+        double x = 9.88e-324;
+        x = log(x);
+        if (-744. < x && x < -743.)
+            exit(0);
+        else
+            exit(1);
+    }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_log_subnormal_returns_correct_result=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_log_subnormal_returns_correct_result=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+    { echo "$as_me:$LINENO: result: $ac_cv_log_subnormal_returns_correct_result" >&5
+echo "${ECHO_T}$ac_cv_log_subnormal_returns_correct_result" >&6; }
+
+    { echo "$as_me:$LINENO: checking whether log(9.88e-324) sets errno" >&5
+echo $ECHO_N "checking whether log(9.88e-324) sets errno... $ECHO_C" >&6; }
+    if test "$cross_compiling" = yes; then
+  ac_cv_log_subnormal_sets_errno=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+    #include <math.h>
+    #include <stdlib.h>
+    #include <errno.h>
+    int main() {
+        double x = 9.88e-324;
+        errno = 0;
+        x = log(x);
+        if (errno != 0)
+            exit(0);
+        else
+            exit(1);
+    }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_log_subnormal_sets_errno=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_log_subnormal_sets_errno=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+    { echo "$as_me:$LINENO: result: $ac_cv_log_subnormal_sets_errno" >&5
+echo "${ECHO_T}$ac_cv_log_subnormal_sets_errno" >&6; }
+
+    { echo "$as_me:$LINENO: checking whether log(9.88e-324) sets errno = EDOM" >&5
+echo $ECHO_N "checking whether log(9.88e-324) sets errno = EDOM... $ECHO_C" >&6; }
+    if test "$cross_compiling" = yes; then
+  ac_cv_log_subnormal_sets_errno_to_EDOM=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+    #include <math.h>
+    #include <stdlib.h>
+    #include <errno.h>
+    int main() {
+        double x = 9.88e-324;
+        errno = 0;
+        x = log(x);
+        if (errno == EDOM)
+            exit(0);
+        else
+            exit(1);
+    }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_log_subnormal_sets_errno_to_EDOM=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_log_subnormal_sets_errno_to_EDOM=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+    { echo "$as_me:$LINENO: result: $ac_cv_log_subnormal_sets_errno_to_EDOM" >&5
+echo "${ECHO_T}$ac_cv_log_subnormal_sets_errno_to_EDOM" >&6; }
+
+    { echo "$as_me:$LINENO: checking whether log(9.88e-324) is infinite" >&5
+echo $ECHO_N "checking whether log(9.88e-324) is infinite... $ECHO_C" >&6; }
+    if test "$cross_compiling" = yes; then
+  ac_cv_log_subnormal_is_infinite=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+    #include <math.h>
+    #include <stdlib.h>
+    int main() {
+        double x = 9.88e-324;
+        x = log(x);
+        if ((x > 1. || x < -1.) && x/2. == x)
+            exit(0);
+        else
+            exit(1);
+    }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_log_subnormal_is_infinite=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_log_subnormal_is_infinite=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+    { echo "$as_me:$LINENO: result: $ac_cv_log_subnormal_is_infinite" >&5
+echo "${ECHO_T}$ac_cv_log_subnormal_is_infinite" >&6; }
+
+    { echo "$as_me:$LINENO: checking whether log(9.88e-324) is a nan" >&5
+echo $ECHO_N "checking whether log(9.88e-324) is a nan... $ECHO_C" >&6; }
+    if test "$cross_compiling" = yes; then
+  ac_cv_log_subnormal_is_nan=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+    #include <math.h>
+    #include <stdlib.h>
+    int main() {
+        double x = 9.88e-324;
+        x = log(x);
+        if (x != x)
+            exit(0);
+        else
+            exit(1);
+    }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_log_subnormal_is_nan=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_log_subnormal_is_nan=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+    { echo "$as_me:$LINENO: result: $ac_cv_log_subnormal_is_nan" >&5
+echo "${ECHO_T}$ac_cv_log_subnormal_is_nan" >&6; }
+;;
+esac
+
+
 for ac_func in hypot
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
diff --git a/configure.in b/configure.in
index 43d6ae0..ea04b76 100644
--- a/configure.in
+++ b/configure.in
@@ -2980,6 +2980,141 @@
 # ************************************
 LIBS_SAVE=$LIBS
 LIBS="$LIBS $LIBM"
+
+# temporary checks to try to track down what's going wrong
+# with test_math on Debian/alpha.  These checks will be
+# removed later.
+
+case $ac_sys_machine in
+alpha*)
+
+    AC_MSG_CHECKING(whether 9.88e-324 compares unequal to 0.0)
+    AC_TRY_RUN([
+    #include <stdlib.h>
+    int main() {
+        double x = 9.88e-324;
+        if (x != 0.0)
+            exit(0);
+        else
+            exit(1);
+    }
+    ],
+    ac_cv_subnormal_nonzero=yes,
+    ac_cv_subnormal_nonzero=no,
+    ac_cv_subnormal_nonzero=no)
+    AC_MSG_RESULT($ac_cv_subnormal_nonzero)
+
+    AC_MSG_CHECKING(whether log(9.88e-324) succeeds)
+    AC_TRY_RUN([
+    #include <math.h>
+    #include <stdlib.h>
+    int main() {
+        double x = 9.88e-324;
+        x = log(x);
+        exit(0);
+    }
+    ],
+    ac_cv_log_subnormal_succeeds=yes,
+    ac_cv_log_subnormal_succeeds=no,
+    ac_cv_log_subnormal_succeeds=no)
+    AC_MSG_RESULT($ac_cv_log_subnormal_succeeds)
+
+    AC_MSG_CHECKING(whether log(9.88e-324) returns correct result)
+    AC_TRY_RUN([
+    #include <math.h>
+    #include <stdlib.h>
+    int main() {
+        double x = 9.88e-324;
+        x = log(x);
+        if (-744. < x && x < -743.)
+            exit(0);
+        else
+            exit(1);
+    }
+    ],
+    ac_cv_log_subnormal_returns_correct_result=yes,
+    ac_cv_log_subnormal_returns_correct_result=no,
+    ac_cv_log_subnormal_returns_correct_result=no)
+    AC_MSG_RESULT($ac_cv_log_subnormal_returns_correct_result)
+
+    AC_MSG_CHECKING(whether log(9.88e-324) sets errno)
+    AC_TRY_RUN([
+    #include <math.h>
+    #include <stdlib.h>
+    #include <errno.h>
+    int main() {
+        double x = 9.88e-324;
+        errno = 0;
+        x = log(x);
+        if (errno != 0)
+            exit(0);
+        else
+            exit(1);
+    }
+    ],
+    ac_cv_log_subnormal_sets_errno=yes,
+    ac_cv_log_subnormal_sets_errno=no,
+    ac_cv_log_subnormal_sets_errno=no)
+    AC_MSG_RESULT($ac_cv_log_subnormal_sets_errno)
+
+    AC_MSG_CHECKING(whether log(9.88e-324) sets errno = EDOM)
+    AC_TRY_RUN([
+    #include <math.h>
+    #include <stdlib.h>
+    #include <errno.h>
+    int main() {
+        double x = 9.88e-324;
+        errno = 0;
+        x = log(x);
+        if (errno == EDOM)
+            exit(0);
+        else
+            exit(1);
+    }
+    ],
+    ac_cv_log_subnormal_sets_errno_to_EDOM=yes,
+    ac_cv_log_subnormal_sets_errno_to_EDOM=no,
+    ac_cv_log_subnormal_sets_errno_to_EDOM=no)
+    AC_MSG_RESULT($ac_cv_log_subnormal_sets_errno_to_EDOM)
+
+    AC_MSG_CHECKING(whether log(9.88e-324) is infinite)
+    AC_TRY_RUN([
+    #include <math.h>
+    #include <stdlib.h>
+    int main() {
+        double x = 9.88e-324;
+        x = log(x);
+        if ((x > 1. || x < -1.) && x/2. == x)
+            exit(0);
+        else
+            exit(1);
+    }
+    ],
+    ac_cv_log_subnormal_is_infinite=yes,
+    ac_cv_log_subnormal_is_infinite=no,
+    ac_cv_log_subnormal_is_infinite=no)
+    AC_MSG_RESULT($ac_cv_log_subnormal_is_infinite)
+
+    AC_MSG_CHECKING(whether log(9.88e-324) is a nan)
+    AC_TRY_RUN([
+    #include <math.h>
+    #include <stdlib.h>
+    int main() {
+        double x = 9.88e-324;
+        x = log(x);
+        if (x != x)
+            exit(0);
+        else
+            exit(1);
+    }
+    ],
+    ac_cv_log_subnormal_is_nan=yes,
+    ac_cv_log_subnormal_is_nan=no,
+    ac_cv_log_subnormal_is_nan=no)
+    AC_MSG_RESULT($ac_cv_log_subnormal_is_nan)
+;;
+esac
+
 AC_REPLACE_FUNCS(hypot)
 
 AC_CHECK_FUNCS(acosh asinh atanh copysign expm1 finite isinf isnan log1p)
