Если вы отказываетесь использовать библиотеку и не хотите изобретать свои большие типы, почему бы вам не отслеживать дополнительные факторы 2 или что-то в этом роде.
while ( mybignum > BIGNUM_THRESH )
{
twos++;
mybignum /= 2; // use >>=1 if you use an integer type (you said you used double so therefore the /=)
}
затем распечатайте ваши ответы как mybignum * 2**twos
Возьмите 64-битное целое число для двойки, и вы в безопасности до 2 ^ 2 ^ 64