mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
Use C99-defined macros to classify a floating-point number
This commit is contained in:
parent
3711467362
commit
04be8e84db
Notes:
git
2021-08-27 15:41:07 +09:00
15 changed files with 11 additions and 205 deletions
|
@ -7,21 +7,6 @@ reference - Haruhiko Okumura: C-gengo niyoru saishin algorithm jiten
|
|||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <float.h>
|
||||
# if !defined __MINGW32__ || defined __NO_ISOCEXT
|
||||
# ifndef isnan
|
||||
# define isnan(x) _isnan(x)
|
||||
# endif
|
||||
# ifndef isinf
|
||||
# define isinf(x) (!_finite(x) && !_isnan(x))
|
||||
# endif
|
||||
# ifndef finite
|
||||
# define finite(x) _finite(x)
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
static double q_gamma(double, double, double);
|
||||
|
||||
/* Incomplete gamma function
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
/* public domain rewrite of finite(3) */
|
||||
|
||||
#include "ruby/missing.h"
|
||||
|
||||
int
|
||||
finite(double n)
|
||||
{
|
||||
return !isnan(n) && !isinf(n);
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
/* public domain rewrite of isinf(3) */
|
||||
|
||||
#ifdef __osf__
|
||||
|
||||
#define _IEEE 1
|
||||
#include <nan.h>
|
||||
|
||||
int
|
||||
isinf(double n)
|
||||
{
|
||||
if (IsNANorINF(n) && IsINF(n)) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include "ruby/internal/config.h"
|
||||
|
||||
#if defined(HAVE_FINITE) && defined(HAVE_ISNAN)
|
||||
|
||||
#include <math.h>
|
||||
#ifdef HAVE_IEEEFP_H
|
||||
#include <ieeefp.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* isinf may be provided only as a macro.
|
||||
* ex. HP-UX, Solaris 10
|
||||
* http://www.gnu.org/software/automake/manual/autoconf/Function-Portability.html
|
||||
*/
|
||||
#ifndef isinf
|
||||
int
|
||||
isinf(double n)
|
||||
{
|
||||
return (!finite(n) && !isnan(n));
|
||||
}
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
static double zero(void) { return 0.0; }
|
||||
static double one (void) { return 1.0; }
|
||||
static double inf (void) { return one() / zero(); }
|
||||
|
||||
int
|
||||
isinf(double n)
|
||||
{
|
||||
static double pinf = 0.0;
|
||||
static double ninf = 0.0;
|
||||
|
||||
if (pinf == 0.0) {
|
||||
pinf = inf();
|
||||
ninf = -pinf;
|
||||
}
|
||||
return memcmp(&n, &pinf, sizeof n) == 0
|
||||
|| memcmp(&n, &ninf, sizeof n) == 0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
|
@ -1,32 +0,0 @@
|
|||
/* public domain rewrite of isnan(3) */
|
||||
|
||||
#include "ruby/missing.h"
|
||||
|
||||
/*
|
||||
* isnan() may be a macro, a function or both.
|
||||
* (The C99 standard defines that isnan() is a macro, though.)
|
||||
* http://www.gnu.org/software/automake/manual/autoconf/Function-Portability.html
|
||||
*
|
||||
* macro only: uClibc
|
||||
* both: GNU libc
|
||||
*
|
||||
* This file is compile if no isnan() function is available.
|
||||
* (autoconf AC_REPLACE_FUNCS detects only the function.)
|
||||
* The macro is detected by following #ifndef.
|
||||
*/
|
||||
|
||||
#ifndef isnan
|
||||
static int double_ne(double n1, double n2);
|
||||
|
||||
int
|
||||
isnan(double n)
|
||||
{
|
||||
return double_ne(n, n);
|
||||
}
|
||||
|
||||
static int
|
||||
double_ne(double n1, double n2)
|
||||
{
|
||||
return n1 != n2;
|
||||
}
|
||||
#endif
|
|
@ -14,21 +14,6 @@ reference - Haruhiko Okumura: C-gengo niyoru saishin algorithm jiten
|
|||
#include <math.h>
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <float.h>
|
||||
# if !defined __MINGW32__ || defined __NO_ISOCEXT
|
||||
# ifndef isnan
|
||||
# define isnan(x) _isnan(x)
|
||||
# endif
|
||||
# ifndef isinf
|
||||
# define isinf(x) (!_finite(x) && !_isnan(x))
|
||||
# endif
|
||||
# ifndef finite
|
||||
# define finite(x) _finite(x)
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_LGAMMA_R
|
||||
|
||||
#include <errno.h>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue