numeric.c: 0 % Float::NAN returns Float::NAN

* numeric.c (flodivmod): all results are NaN if divisor is NaN.
  [fix GH-692]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47024 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2014-08-01 07:35:48 +00:00
parent 528ef3ca93
commit 52b59fc9d9
3 changed files with 18 additions and 1 deletions

View file

@ -890,6 +890,12 @@ flodivmod(double x, double y, double *divp, double *modp)
{
double div, mod;
if (isnan(y)) {
/* y is NaN so all results are NaN */
if (modp) *modp = y;
if (divp) *divp = y;
return;
}
if (y == 0.0) rb_num_zerodiv();
if ((x == 0.0) || (isinf(y) && !isinf(x)))
mod = x;
@ -903,7 +909,7 @@ flodivmod(double x, double y, double *divp, double *modp)
mod = x - z * y;
#endif
}
if (isinf(x) && !isinf(y) && !isnan(y))
if (isinf(x) && !isinf(y))
div = x;
else
div = (x - mod) / y;