[Top][All Lists]
[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
])
- new module 'printf-frexpl',
Bruno Haible <=