blob: b680a6c0fb0a23f50a1dc25f4996a46adfff272f [file] [log] [blame]
// { dg-do run }
// { dg-options "-O2" }
#define radix 10
__INT32_TYPE__ numDigits(__UINT64_TYPE__ value)
{
__INT32_TYPE__ n = 1;
while (value > __UINT32_MAX__)
{
n += 4;
value /= radix * radix * radix * radix;
}
__UINT32_TYPE__ v = (__UINT32_TYPE__)value;
while (1)
{
if (v < radix)
return n;
if (v < radix * radix)
return n + 1;
if (v < radix * radix * radix)
return n + 2;
if (v < radix * radix * radix * radix)
return n + 3;
n += 4;
v /= radix * radix * radix * radix;
}
}
int main()
{
if (numDigits(__UINT64_MAX__) != 20)
__builtin_abort();
}