diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-05-20 10:54:35 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-05-21 08:13:38 +0900 |
| commit | fa29bb3bb4801c8ca0256bcd2559ceb159110f68 (patch) | |
| tree | c098da31832f9569f358346612d44b20418d0f44 /src/numeric.c | |
| parent | beaf365dd4758b4d42c0ee72ef18a61fb43e0569 (diff) | |
| download | mruby-fa29bb3bb4801c8ca0256bcd2559ceb159110f68.tar.gz mruby-fa29bb3bb4801c8ca0256bcd2559ceb159110f68.zip | |
fmt_fp.c: remove `fmt` argument from `mrb_float_to_str()`.
With major refactoring to prepare removing `snprintf(3) calls.
Diffstat (limited to 'src/numeric.c')
| -rw-r--r-- | src/numeric.c | 39 |
1 files changed, 1 insertions, 38 deletions
diff --git a/src/numeric.c b/src/numeric.c index 8aa3459a0..24160fb77 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -25,9 +25,7 @@ #define floor(f) floorf(f) #define ceil(f) ceilf(f) #define fmod(x,y) fmodf(x,y) -#define FLO_TO_STR_PREC 8 #else -#define FLO_TO_STR_PREC 16 #endif #endif @@ -303,49 +301,14 @@ flo_to_s(mrb_state *mrb, mrb_value flt) if (isinf(f)) { str = f < 0 ? mrb_str_new_lit(mrb, "-Infinity") : mrb_str_new_lit(mrb, "Infinity"); - goto exit; } else if (isnan(f)) { str = mrb_str_new_lit(mrb, "NaN"); - goto exit; } else { - char fmt[] = "%." MRB_STRINGIZE(FLO_TO_STR_PREC) "g"; - mrb_int len; - char *begp, *p, *endp; - - str = mrb_float_to_str(mrb, flt, fmt); - - insert_dot_zero: - begp = RSTRING_PTR(str); - len = RSTRING_LEN(str); - for (p = begp, endp = p + len; p < endp; ++p) { - if (*p == '.') { - goto exit; - } - else if (*p == 'e') { - ptrdiff_t e_pos = p - begp; - mrb_str_cat(mrb, str, ".0", 2); - p = RSTRING_PTR(str) + e_pos; - memmove(p + 2, p, len - e_pos); - memcpy(p, ".0", 2); - goto exit; - } - } - - if (FLO_TO_STR_PREC + (begp[0] == '-') <= len) { - --fmt[sizeof(fmt) - 3]; /* %.16g(%.8g) -> %.15g(%.7g) */ - str = mrb_float_to_str(mrb, flt, fmt); - goto insert_dot_zero; - } - else { - mrb_str_cat(mrb, str, ".0", 2); - } - - goto exit; + str = mrb_float_to_str(mrb, flt); } - exit: RSTR_SET_ASCII_FLAG(mrb_str_ptr(str)); return str; } |
