From ee30c5a4a44fc26a8b5b8d6a0e35a7a4b6a6be50 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 27 Apr 2012 18:31:45 +0900 Subject: allow float/double switch --- include/mrbconf.h | 11 +++++++++-- src/numeric.c | 36 ++++++------------------------------ 2 files changed, 15 insertions(+), 32 deletions(-) diff --git a/include/mrbconf.h b/include/mrbconf.h index f87e2ef43..478b79019 100644 --- a/include/mrbconf.h +++ b/include/mrbconf.h @@ -8,12 +8,19 @@ #define MRUBYCONF_H #include +#define MRB_USE_FLOAT + +#ifdef MRB_USE_FLOAT +typedef float mrb_float; +#define readfloat(p) strtof((p),NULL) +#else typedef double mrb_float; +#define readfloat(p) strtod((p),NULL) +#endif + typedef int32_t mrb_int; typedef intptr_t mrb_sym; - #define readint(p,base) strtol((p),NULL,(base)) -#define readfloat(p) strtod((p),NULL) #undef INCLUDE_ENCODING /* not use encoding classes (ascii only) */ #define INCLUDE_ENCODING /* use UTF-8 encoding classes */ diff --git a/src/numeric.c b/src/numeric.c index a29692bab..23da9089c 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -101,29 +101,14 @@ const unsigned char mrb_nan[] = "\x00\x00\xc0\x7f"; const unsigned char mrb_nan[] = "\x7f\xc0\x00\x00"; #endif -extern double round(double); - -#ifndef HAVE_ROUND -double -round(double x) -{ - double f; - - if (x > 0.0) { - f = floor(x); - x = f + (x - f >= 0.5); - } - else if (x < 0.0) { - f = ceil(x); - x = f - (f - x >= 0.5); - } - return x; -} +#ifdef MRB_USE_FLOAT +#define round(f) roundf(f) +#define floor(f) floorf(f) +#define ceil(f) ceilf(f) +#define floor(f) floorf(f) +#define fmod(x,y) fmodf(x,y) #endif - - - void mrb_cmperr(mrb_state *mrb, mrb_value x, mrb_value y); void @@ -459,16 +444,7 @@ flodivmod(mrb_state *mrb, mrb_float x, mrb_float y, mrb_float *divp, mrb_float * mrb_float div, mod; if (y == 0.0) mrb_num_zerodiv(mrb); -#ifdef HAVE_FMOD mod = fmod(x, y); -#else - { - mrb_float z; - - modf(x/y, &z); - mod = x - z * y; - } -#endif if (isinf(x) && !isinf(y) && !isnan(y)) div = x; else -- cgit v1.2.3