bug-gnulib
[Top][All Lists]
Advanced

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

new module 'printf-frexpl'


From: Bruno Haible
Subject: new module 'printf-frexpl'
Date: Sun, 25 Feb 2007 15:27:51 +0100
User-agent: KMail/1.5.4

Similarly to 'printf-frexp', here is the corresponding module for
'long double'.

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

        * modules/printf-frexpl: New file.
        * lib/printf-frexpl.h: New file.
        * lib/printf-frexpl.c: New file.
        * m4/printf-frexpl.m4: New file.

============================= modules/printf-frexpl ===========================
Description:
printf_frexpl() function: split a long double into fraction and mantissa,
for hexadecimal printf, without requiring libm.

Files:
lib/printf-frexpl.h
lib/printf-frexpl.c
lib/printf-frexp.c
m4/printf-frexpl.m4
m4/longdouble.m4

Depends-on:
verify

configure.ac:
gl_FUNC_PRINTF_FREXPL

Makefile.am:
lib_SOURCES += printf-frexpl.c

Include:
#if HAVE_LONG_DOUBLE
# include "printf-frexpl.h"
#endif

License:
LGPL

Maintainer:
Bruno Haible

============================= lib/printf-frexpl.h =============================
/* Split a 'long double' into fraction and mantissa, for hexadecimal printf.
   Copyright (C) 2007 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License along
   with this program; if not, write to the Free Software Foundation,
   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */

/* Write a finite, positive number x as
     x = mantissa * 2^exp
   where exp >= LDBL_MIN_EXP - 1,
         mantissa < 2.0,
         if x is not a denormalized number then mantissa >= 1.0.
   Store exp and return mantissa.  */
extern long double printf_frexpl (long double x, int *exp);
============================= lib/printf-frexpl.c =============================
/* Split a 'long double' into fraction and mantissa, for hexadecimal printf.
   Copyright (C) 2007 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License along
   with this program; if not, write to the Free Software Foundation,
   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */

#define USE_LONG_DOUBLE
#include "printf-frexp.c"
============================= m4/printf-frexpl.m4 =============================
# printf-frexpl.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,
dnl with or without modifications, as long as this notice is preserved.

dnl Check how to define printf_frexpl() without linking with libm.

AC_DEFUN([gl_FUNC_PRINTF_FREXPL],
[
  AC_REQUIRE([gt_TYPE_LONGDOUBLE])
  if test $gt_cv_c_long_double = yes; then
    AC_CACHE_CHECK([whether frexpl can be used without linking with libm],
      [gl_cv_func_frexpl_no_libm],
      [
        AC_TRY_LINK([#include <math.h>
                     long double x;
                     int y;],
                    [return frexpl (x, &y) < 1;],
          [gl_cv_func_frexpl_no_libm=yes],
          [gl_cv_func_frexpl_no_libm=no])
      ])
    if test $gl_cv_func_frexpl_no_libm = yes; then
      AC_DEFINE([HAVE_FREXPL_IN_LIBC], 1,
        [Define if the frexpl function is available in libc.])
    fi

    AC_CACHE_CHECK([whether ldexpl can be used without linking with libm],
      [gl_cv_func_ldexpl_no_libm],
      [
        AC_TRY_LINK([#include <math.h>
                     long double x;
                     int y;],
                    [return ldexpl (x, y) < 1;],
          [gl_cv_func_ldexpl_no_libm=yes],
          [gl_cv_func_ldexpl_no_libm=no])
      ])
    if test $gl_cv_func_ldexpl_no_libm = yes; then
      AC_DEFINE([HAVE_LDEXPL_IN_LIBC], 1,
        [Define if the ldexpl function is available in libc.])
    fi
  fi
])





reply via email to

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