add flo_prev_or_next func
This commit is contained in:
parent
1800f3fa5c
commit
d79cdcb113
Notes:
git
2020-11-20 11:48:12 +09:00
29
numeric.c
29
numeric.c
@ -1820,6 +1820,25 @@ rb_flo_is_finite_p(VALUE num)
|
|||||||
return Qtrue;
|
return Qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum flo_prevnext_flags
|
||||||
|
{
|
||||||
|
FLOAT_PREV = 0,
|
||||||
|
FLOAT_NEXT = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
flo_prev_or_next(VALUE flo, int flag)
|
||||||
|
{
|
||||||
|
double x, y;
|
||||||
|
x = NUM2DBL(flo);
|
||||||
|
if (flag == 1)
|
||||||
|
y = nextafter(x, HUGE_VAL);
|
||||||
|
else
|
||||||
|
y = nextafter(x, -HUGE_VAL);
|
||||||
|
|
||||||
|
return DBL2NUM(y);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* float.next_float -> float
|
* float.next_float -> float
|
||||||
@ -1875,10 +1894,7 @@ rb_flo_is_finite_p(VALUE num)
|
|||||||
static VALUE
|
static VALUE
|
||||||
flo_next_float(VALUE vx)
|
flo_next_float(VALUE vx)
|
||||||
{
|
{
|
||||||
double x, y;
|
return flo_prev_or_next(vx, FLOAT_NEXT);
|
||||||
x = NUM2DBL(vx);
|
|
||||||
y = nextafter(x, HUGE_VAL);
|
|
||||||
return DBL2NUM(y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1926,10 +1942,7 @@ flo_next_float(VALUE vx)
|
|||||||
static VALUE
|
static VALUE
|
||||||
flo_prev_float(VALUE vx)
|
flo_prev_float(VALUE vx)
|
||||||
{
|
{
|
||||||
double x, y;
|
return flo_prev_or_next(vx, FLOAT_PREV);
|
||||||
x = NUM2DBL(vx);
|
|
||||||
y = nextafter(x, -HUGE_VAL);
|
|
||||||
return DBL2NUM(y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user