bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

frexp: avoid bug on IRIX


From: Bruno Haible
Subject: frexp: avoid bug on IRIX
Date: Sun, 25 Mar 2007 23:24:53 +0200
User-agent: KMail/1.5.4

frexp(Infinity) on IRIX 6.5 does not return Infinity, as it should according to
POSIX/MX. I'm adding a configure check against it:

2007-03-25  Bruno Haible  <address@hidden>

        * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Add check whether frexp(inf)
        returns inf. Needed on IRIX 6.5.

*** m4/frexp.m4 22 Mar 2007 11:35:12 -0000      1.2
--- m4/frexp.m4 25 Mar 2007 21:19:53 -0000
***************
*** 1,4 ****
! # frexp.m4 serial 1
  dnl Copyright (C) 2007 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # frexp.m4 serial 2
  dnl Copyright (C) 2007 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
***************
*** 55,62 ****
    fi
  ])
  
! dnl Test whether frexp() works also on denormalized numbers.
! dnl This test fails e.g. on NetBSD.
  AC_DEFUN([gl_FUNC_FREXP_WORKS],
  [
    AC_REQUIRE([AC_PROG_CC])
--- 55,62 ----
    fi
  ])
  
! dnl Test whether frexp() works also on denormalized numbers (this fails e.g. 
on
! dnl NetBSD 3.0) and on infinite numbers (this fails e.g. on IRIX 6.5).
  AC_DEFUN([gl_FUNC_FREXP_WORKS],
  [
    AC_REQUIRE([AC_PROG_CC])
***************
*** 70,75 ****
--- 70,76 ----
  {
    int i;
    volatile double x;
+   /* Test on denormalized numbers.  */
    for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5)
      ;
    if (x > 0.0)
***************
*** 81,91 ****
        if (y != 0.5)
          return 1;
      }
    return 0;
  }], [gl_cv_func_frexp_works=yes], [gl_cv_func_frexp_works=no],
        [case "$host_os" in
!          netbsd*) gl_cv_func_frexp_works="guessing no";;
!          *)       gl_cv_func_frexp_works="guessing yes";;
         esac
        ])
      ])
--- 82,100 ----
        if (y != 0.5)
          return 1;
      }
+   /* Test on infinite numbers.  */
+   {
+     x = 1.0 / 0.0;
+     int exp;
+     double y = frexp (x, &exp);
+     if (y != x)
+       return 1;
+   }
    return 0;
  }], [gl_cv_func_frexp_works=yes], [gl_cv_func_frexp_works=no],
        [case "$host_os" in
!          netbsd* | irix*) gl_cv_func_frexp_works="guessing no";;
!          *)               gl_cv_func_frexp_works="guessing yes";;
         esac
        ])
      ])





reply via email to

[Prev in Thread] Current Thread [Next in Thread]