Commit ee30c5a4 authored by Yukihiro Matsumoto's avatar Yukihiro Matsumoto

allow float/double switch

parent c8f8f839
......@@ -8,12 +8,19 @@
#define MRUBYCONF_H
#include <stdint.h>
#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 */
......
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment