in GaiaXAndroidQuickJS/quickjs/gxquickjs/libbf.c [6083:6267]
static int clz_dec(limb_t a)
{
if (a == 0)
return LIMB_DIGITS;
switch(LIMB_BITS - 1 - clz(a)) {
case 0: /* 1-1 */
return LIMB_DIGITS - 1;
case 1: /* 2-3 */
return LIMB_DIGITS - 1;
case 2: /* 4-7 */
return LIMB_DIGITS - 1;
case 3: /* 8-15 */
if (a < 10)
return LIMB_DIGITS - 1;
else
return LIMB_DIGITS - 2;
case 4: /* 16-31 */
return LIMB_DIGITS - 2;
case 5: /* 32-63 */
return LIMB_DIGITS - 2;
case 6: /* 64-127 */
if (a < 100)
return LIMB_DIGITS - 2;
else
return LIMB_DIGITS - 3;
case 7: /* 128-255 */
return LIMB_DIGITS - 3;
case 8: /* 256-511 */
return LIMB_DIGITS - 3;
case 9: /* 512-1023 */
if (a < 1000)
return LIMB_DIGITS - 3;
else
return LIMB_DIGITS - 4;
case 10: /* 1024-2047 */
return LIMB_DIGITS - 4;
case 11: /* 2048-4095 */
return LIMB_DIGITS - 4;
case 12: /* 4096-8191 */
return LIMB_DIGITS - 4;
case 13: /* 8192-16383 */
if (a < 10000)
return LIMB_DIGITS - 4;
else
return LIMB_DIGITS - 5;
case 14: /* 16384-32767 */
return LIMB_DIGITS - 5;
case 15: /* 32768-65535 */
return LIMB_DIGITS - 5;
case 16: /* 65536-131071 */
if (a < 100000)
return LIMB_DIGITS - 5;
else
return LIMB_DIGITS - 6;
case 17: /* 131072-262143 */
return LIMB_DIGITS - 6;
case 18: /* 262144-524287 */
return LIMB_DIGITS - 6;
case 19: /* 524288-1048575 */
if (a < 1000000)
return LIMB_DIGITS - 6;
else
return LIMB_DIGITS - 7;
case 20: /* 1048576-2097151 */
return LIMB_DIGITS - 7;
case 21: /* 2097152-4194303 */
return LIMB_DIGITS - 7;
case 22: /* 4194304-8388607 */
return LIMB_DIGITS - 7;
case 23: /* 8388608-16777215 */
if (a < 10000000)
return LIMB_DIGITS - 7;
else
return LIMB_DIGITS - 8;
case 24: /* 16777216-33554431 */
return LIMB_DIGITS - 8;
case 25: /* 33554432-67108863 */
return LIMB_DIGITS - 8;
case 26: /* 67108864-134217727 */
if (a < 100000000)
return LIMB_DIGITS - 8;
else
return LIMB_DIGITS - 9;
#if LIMB_BITS == 64
case 27: /* 134217728-268435455 */
return LIMB_DIGITS - 9;
case 28: /* 268435456-536870911 */
return LIMB_DIGITS - 9;
case 29: /* 536870912-1073741823 */
if (a < 1000000000)
return LIMB_DIGITS - 9;
else
return LIMB_DIGITS - 10;
case 30: /* 1073741824-2147483647 */
return LIMB_DIGITS - 10;
case 31: /* 2147483648-4294967295 */
return LIMB_DIGITS - 10;
case 32: /* 4294967296-8589934591 */
return LIMB_DIGITS - 10;
case 33: /* 8589934592-17179869183 */
if (a < 10000000000)
return LIMB_DIGITS - 10;
else
return LIMB_DIGITS - 11;
case 34: /* 17179869184-34359738367 */
return LIMB_DIGITS - 11;
case 35: /* 34359738368-68719476735 */
return LIMB_DIGITS - 11;
case 36: /* 68719476736-137438953471 */
if (a < 100000000000)
return LIMB_DIGITS - 11;
else
return LIMB_DIGITS - 12;
case 37: /* 137438953472-274877906943 */
return LIMB_DIGITS - 12;
case 38: /* 274877906944-549755813887 */
return LIMB_DIGITS - 12;
case 39: /* 549755813888-1099511627775 */
if (a < 1000000000000)
return LIMB_DIGITS - 12;
else
return LIMB_DIGITS - 13;
case 40: /* 1099511627776-2199023255551 */
return LIMB_DIGITS - 13;
case 41: /* 2199023255552-4398046511103 */
return LIMB_DIGITS - 13;
case 42: /* 4398046511104-8796093022207 */
return LIMB_DIGITS - 13;
case 43: /* 8796093022208-17592186044415 */
if (a < 10000000000000)
return LIMB_DIGITS - 13;
else
return LIMB_DIGITS - 14;
case 44: /* 17592186044416-35184372088831 */
return LIMB_DIGITS - 14;
case 45: /* 35184372088832-70368744177663 */
return LIMB_DIGITS - 14;
case 46: /* 70368744177664-140737488355327 */
if (a < 100000000000000)
return LIMB_DIGITS - 14;
else
return LIMB_DIGITS - 15;
case 47: /* 140737488355328-281474976710655 */
return LIMB_DIGITS - 15;
case 48: /* 281474976710656-562949953421311 */
return LIMB_DIGITS - 15;
case 49: /* 562949953421312-1125899906842623 */
if (a < 1000000000000000)
return LIMB_DIGITS - 15;
else
return LIMB_DIGITS - 16;
case 50: /* 1125899906842624-2251799813685247 */
return LIMB_DIGITS - 16;
case 51: /* 2251799813685248-4503599627370495 */
return LIMB_DIGITS - 16;
case 52: /* 4503599627370496-9007199254740991 */
return LIMB_DIGITS - 16;
case 53: /* 9007199254740992-18014398509481983 */
if (a < 10000000000000000)
return LIMB_DIGITS - 16;
else
return LIMB_DIGITS - 17;
case 54: /* 18014398509481984-36028797018963967 */
return LIMB_DIGITS - 17;
case 55: /* 36028797018963968-72057594037927935 */
return LIMB_DIGITS - 17;
case 56: /* 72057594037927936-144115188075855871 */
if (a < 100000000000000000)
return LIMB_DIGITS - 17;
else
return LIMB_DIGITS - 18;
case 57: /* 144115188075855872-288230376151711743 */
return LIMB_DIGITS - 18;
case 58: /* 288230376151711744-576460752303423487 */
return LIMB_DIGITS - 18;
case 59: /* 576460752303423488-1152921504606846975 */
if (a < 1000000000000000000)
return LIMB_DIGITS - 18;
else
return LIMB_DIGITS - 19;
#endif
default:
return 0;
}
}