From 112d214d292f961be88840eb1c281d18b794d699 Mon Sep 17 00:00:00 2001 From: Shane Carr Date: Mon, 24 Jul 2017 22:00:22 +0000 Subject: [PATCH] ICU-13246 Save a few cycles by performing util64_pow multiply only when needed. X-SVN-Rev: 40285 --- icu4c/source/i18n/nfrs.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/icu4c/source/i18n/nfrs.cpp b/icu4c/source/i18n/nfrs.cpp index 74ce27a401a..769fad353fb 100644 --- a/icu4c/source/i18n/nfrs.cpp +++ b/icu4c/source/i18n/nfrs.cpp @@ -830,19 +830,22 @@ int64_t util64_fromDouble(double d) { return result; } -uint64_t util64_pow(uint32_t base, uint16_t exponent) { +uint64_t util64_pow(uint32_t base, uint16_t exponent) { if (base == 0) { return 0; } uint64_t result = 1; uint64_t pow = base; - while (exponent > 0) { - if ((exponent & 1) == 1) { - result *= pow; - } - pow *= pow; - exponent >>= 1; - } + while (true) { + if ((exponent & 1) == 1) { + result *= pow; + } + exponent >>= 1; + if (exponent == 0) { + break; + } + pow *= pow; + } return result; } -- 2.40.0