]> granicus.if.org Git - icu/commitdiff
ICU-13246 Save a few cycles by performing util64_pow multiply only when needed.
authorShane Carr <shane@unicode.org>
Mon, 24 Jul 2017 22:00:22 +0000 (22:00 +0000)
committerShane Carr <shane@unicode.org>
Mon, 24 Jul 2017 22:00:22 +0000 (22:00 +0000)
X-SVN-Rev: 40285

icu4c/source/i18n/nfrs.cpp

index 74ce27a401a069f0c7d9339d407d1d0fd1b6ef2f..769fad353fbd5988ff77bcf0262979588ed16e88 100644 (file)
@@ -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;
 }