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(isnan)
|
||||||
AC_REPLACE_FUNCS(lgamma_r)
|
AC_REPLACE_FUNCS(lgamma_r)
|
||||||
AC_REPLACE_FUNCS(memmove)
|
AC_REPLACE_FUNCS(memmove)
|
||||||
|
AC_REPLACE_FUNCS(nan)
|
||||||
AC_REPLACE_FUNCS(nextafter)
|
AC_REPLACE_FUNCS(nextafter)
|
||||||
AC_REPLACE_FUNCS(setproctitle)
|
AC_REPLACE_FUNCS(setproctitle)
|
||||||
AC_REPLACE_FUNCS(strchr)
|
AC_REPLACE_FUNCS(strchr)
|
||||||
|
@ -2396,7 +2397,6 @@ AC_CHECK_FUNCS(memmem)
|
||||||
AC_CHECK_FUNCS(mkfifo)
|
AC_CHECK_FUNCS(mkfifo)
|
||||||
AC_CHECK_FUNCS(mknod)
|
AC_CHECK_FUNCS(mknod)
|
||||||
AC_CHECK_FUNCS(mktime)
|
AC_CHECK_FUNCS(mktime)
|
||||||
AC_CHECK_FUNCS(nanf) # We need nan(), but HAVE_NAN conflicts...
|
|
||||||
AC_CHECK_FUNCS(openat)
|
AC_CHECK_FUNCS(openat)
|
||||||
AC_CHECK_FUNCS(pipe2)
|
AC_CHECK_FUNCS(pipe2)
|
||||||
AC_CHECK_FUNCS(poll)
|
AC_CHECK_FUNCS(poll)
|
||||||
|
|
|
@ -1678,12 +1678,7 @@ r_object0(struct load_arg *arg, int *ivp, VALUE extmod)
|
||||||
const char *ptr = RSTRING_PTR(str);
|
const char *ptr = RSTRING_PTR(str);
|
||||||
|
|
||||||
if (strcmp(ptr, "nan") == 0) {
|
if (strcmp(ptr, "nan") == 0) {
|
||||||
d =
|
d = nan("");
|
||||||
#ifdef HAVE_NANF
|
|
||||||
nan("");
|
|
||||||
#else
|
|
||||||
(double)NAN;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else if (strcmp(ptr, "inf") == 0) {
|
else if (strcmp(ptr, "inf") == 0) {
|
||||||
d = HUGE_VAL;
|
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);
|
return rb_big_fdiv_double(x, y);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#ifdef HAVE_NANF
|
|
||||||
return nan("");
|
return nan("");
|
||||||
#else
|
|
||||||
return (double)NAN;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5565,13 +5561,7 @@ Init_Numeric(void)
|
||||||
/*
|
/*
|
||||||
* An expression representing a value which is "not a number".
|
* An expression representing a value which is "not a number".
|
||||||
*/
|
*/
|
||||||
rb_define_const(rb_cFloat, "NAN",
|
rb_define_const(rb_cFloat, "NAN", DBL2NUM(nan("")));
|
||||||
#ifdef HAVE_NANF
|
|
||||||
DBL2NUM(nan(""))
|
|
||||||
#else
|
|
||||||
DBL2NUM((double)NAN)
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
|
|
||||||
rb_define_method(rb_cFloat, "to_s", flo_to_s, 0);
|
rb_define_method(rb_cFloat, "to_s", flo_to_s, 0);
|
||||||
rb_define_alias(rb_cFloat, "inspect", "to_s");
|
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(num)) { /* infinity due to overflow */
|
||||||
if (RB_FLOAT_TYPE_P(den))
|
if (RB_FLOAT_TYPE_P(den))
|
||||||
#ifdef HAVE_NANF
|
|
||||||
return DBL2NUM(nan(""));
|
return DBL2NUM(nan(""));
|
||||||
#else
|
|
||||||
return DBL2NUM((double)NAN);
|
|
||||||
#endif
|
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
if (RB_FLOAT_TYPE_P(den)) { /* infinity due to overflow */
|
if (RB_FLOAT_TYPE_P(den)) { /* infinity due to overflow */
|
||||||
|
|
Loading…
Reference in a new issue