From dd582069eddb4cfedaafef2c83ed06e872c4c256 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 19 Apr 2022 07:51:19 +0900 Subject: [PATCH] bigint.c: simplify a loop in `mrb_bint_new_float()`. --- src/bigint.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/bigint.c b/src/bigint.c index 480c2826a..66683f5e1 100644 --- a/src/bigint.c +++ b/src/bigint.c @@ -1034,8 +1034,7 @@ mrb_bint_new_float(mrb_state *mrb, mrb_float x) mrb_float b = (double)CMASK; mrb_float bi = 1.0 / b; - size_t rn; - int i; + size_t rn, i; mp_limb *rp; mp_limb f; @@ -1044,17 +1043,12 @@ mrb_bint_new_float(mrb_state *mrb, mrb_float x) mpz_realloc(mrb, r, rn); rp = r->p; - f = (mp_limb)x; - x -= f; - mrb_assert(x < 1.0); - i = rn-1; - rp[i] = f; - while (--i >= 0) { - x = b * x; + for (i=rn-1;;i--) { f = (mp_limb)x; x -= f; mrb_assert(x < 1.0); rp[i] = f; + if (i == 0) break; } return bint_norm(mrb, bint); }