This commit is contained in:
Nobuyoshi Nakada 2019-08-02 11:25:41 +09:00
Родитель ffe4a6ebf9
Коммит f9a0492b76
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4BC7D6DF58D8DF60
3 изменённых файлов: 19 добавлений и 9 удалений

Просмотреть файл

@ -1772,6 +1772,7 @@ VALUE rb_int_odd_p(VALUE num);
int rb_int_positive_p(VALUE num); int rb_int_positive_p(VALUE num);
int rb_int_negative_p(VALUE num); int rb_int_negative_p(VALUE num);
VALUE rb_num_pow(VALUE x, VALUE y); VALUE rb_num_pow(VALUE x, VALUE y);
VALUE rb_float_ceil(VALUE num, int ndigits);
static inline VALUE static inline VALUE
rb_num_compare_with_zero(VALUE num, ID mid) rb_num_compare_with_zero(VALUE num, ID mid)

Просмотреть файл

@ -2002,12 +2002,19 @@ flo_floor(int argc, VALUE *argv, VALUE num)
static VALUE static VALUE
flo_ceil(int argc, VALUE *argv, VALUE num) flo_ceil(int argc, VALUE *argv, VALUE num)
{ {
double number, f;
int ndigits = 0; int ndigits = 0;
if (rb_check_arity(argc, 0, 1)) { if (rb_check_arity(argc, 0, 1)) {
ndigits = NUM2INT(argv[0]); ndigits = NUM2INT(argv[0]);
} }
return rb_float_ceil(num, ndigits);
}
VALUE
rb_float_ceil(VALUE num, int ndigits)
{
double number, f;
number = RFLOAT_VALUE(num); number = RFLOAT_VALUE(num);
if (number == 0.0) { if (number == 0.0) {
return ndigits > 0 ? DBL2NUM(number) : INT2FIX(0); return ndigits > 0 ? DBL2NUM(number) : INT2FIX(0);

Просмотреть файл

@ -43,13 +43,6 @@ static ID id_abs, id_idiv, id_integer_p,
static VALUE nurat_to_f(VALUE self); static VALUE nurat_to_f(VALUE self);
#define fun1(n) \
inline static VALUE \
f_##n(VALUE x)\
{\
return rb_funcall(x, id_##n, 0);\
}
inline static VALUE inline static VALUE
f_add(VALUE x, VALUE y) f_add(VALUE x, VALUE y)
{ {
@ -1597,7 +1590,16 @@ nurat_to_r(VALUE self)
} }
#define id_ceil rb_intern("ceil") #define id_ceil rb_intern("ceil")
#define f_ceil(x) rb_funcall((x), id_ceil, 0) static VALUE
f_ceil(VALUE x)
{
if (RB_INTEGER_TYPE_P(x))
return x;
if (RB_FLOAT_TYPE_P(x))
return rb_float_ceil(x, 0);
return rb_funcall(x, id_ceil, 0);
}
#define id_quo rb_intern("quo") #define id_quo rb_intern("quo")
#define f_quo(x,y) rb_funcall((x), id_quo, 1, (y)) #define f_quo(x,y) rb_funcall((x), id_quo, 1, (y))