mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
add missing/nan.c
instead of scattering #ifdef HAVE_NANF here and there define our own nan() unless defined elsewhere. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61971 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
76b609c8c3
commit
782236e3bd
5 changed files with 31 additions and 22 deletions
|
@ -2266,6 +2266,7 @@ AC_REPLACE_FUNCS(isinf)
|
|||
AC_REPLACE_FUNCS(isnan)
|
||||
AC_REPLACE_FUNCS(lgamma_r)
|
||||
AC_REPLACE_FUNCS(memmove)
|
||||
AC_REPLACE_FUNCS(nan)
|
||||
AC_REPLACE_FUNCS(nextafter)
|
||||
AC_REPLACE_FUNCS(setproctitle)
|
||||
AC_REPLACE_FUNCS(strchr)
|
||||
|
@ -2396,7 +2397,6 @@ AC_CHECK_FUNCS(memmem)
|
|||
AC_CHECK_FUNCS(mkfifo)
|
||||
AC_CHECK_FUNCS(mknod)
|
||||
AC_CHECK_FUNCS(mktime)
|
||||
AC_CHECK_FUNCS(nanf) # We need nan(), but HAVE_NAN conflicts...
|
||||
AC_CHECK_FUNCS(openat)
|
||||
AC_CHECK_FUNCS(pipe2)
|
||||
AC_CHECK_FUNCS(poll)
|
||||
|
|
|
@ -1678,12 +1678,7 @@ r_object0(struct load_arg *arg, int *ivp, VALUE extmod)
|
|||
const char *ptr = RSTRING_PTR(str);
|
||||
|
||||
if (strcmp(ptr, "nan") == 0) {
|
||||
d =
|
||||
#ifdef HAVE_NANF
|
||||
nan("");
|
||||
#else
|
||||
(double)NAN;
|
||||
#endif
|
||||
d = nan("");
|
||||
}
|
||||
else if (strcmp(ptr, "inf") == 0) {
|
||||
d = HUGE_VAL;
|
||||
|
|
28
missing/nan.c
Normal file
28
missing/nan.c
Normal file
|
@ -0,0 +1,28 @@
|
|||
#include "ruby/missing.h"
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
double
|
||||
nan(const char *spec)
|
||||
{
|
||||
#if 0
|
||||
/* FIXME: we have not yet seen any situation this is
|
||||
* necessary. Please write a proper implementation that
|
||||
* covers this branch. */
|
||||
if (spec && spec[0]) {
|
||||
double generated_nan;
|
||||
int len = snprintf(NULL, 0, "NAN(%s)", spec);
|
||||
char *buf = malloc(len + 1); /* +1 for NUL */
|
||||
sprintf(buf, "NAN(%s)", spec);
|
||||
generated_nan = strtod(buf, NULL);
|
||||
free(buf);
|
||||
return generated_nan;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
assert(!spec || !spec[0]);
|
||||
return (double)NAN;
|
||||
}
|
||||
}
|
12
numeric.c
12
numeric.c
|
@ -3651,11 +3651,7 @@ rb_int_fdiv_double(VALUE x, VALUE y)
|
|||
return rb_big_fdiv_double(x, y);
|
||||
}
|
||||
else {
|
||||
#ifdef HAVE_NANF
|
||||
return nan("");
|
||||
#else
|
||||
return (double)NAN;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5565,13 +5561,7 @@ Init_Numeric(void)
|
|||
/*
|
||||
* An expression representing a value which is "not a number".
|
||||
*/
|
||||
rb_define_const(rb_cFloat, "NAN",
|
||||
#ifdef HAVE_NANF
|
||||
DBL2NUM(nan(""))
|
||||
#else
|
||||
DBL2NUM((double)NAN)
|
||||
#endif
|
||||
);
|
||||
rb_define_const(rb_cFloat, "NAN", DBL2NUM(nan("")));
|
||||
|
||||
rb_define_method(rb_cFloat, "to_s", flo_to_s, 0);
|
||||
rb_define_alias(rb_cFloat, "inspect", "to_s");
|
||||
|
|
|
@ -1073,11 +1073,7 @@ nurat_expt(VALUE self, VALUE other)
|
|||
}
|
||||
if (RB_FLOAT_TYPE_P(num)) { /* infinity due to overflow */
|
||||
if (RB_FLOAT_TYPE_P(den))
|
||||
#ifdef HAVE_NANF
|
||||
return DBL2NUM(nan(""));
|
||||
#else
|
||||
return DBL2NUM((double)NAN);
|
||||
#endif
|
||||
return num;
|
||||
}
|
||||
if (RB_FLOAT_TYPE_P(den)) { /* infinity due to overflow */
|
||||
|
|
Loading…
Reference in a new issue