en mi plataforma imprime esta 9223372036854775808.segura conversión de doble a entero sin signo de 64 bits
double x = 1e19;
std::cout << static_cast<unsigned __int64>(x) << '\n';
Probé Boost.NumericConversion, pero dieron el mismo resultado.
Dividir x x en 2 partes iguales, y luego sumar las mitades convertidas da el resultado correcto. Pero necesito una solución genérica para usar en un código de plantilla.
Gracias de antemano.
EDITAR: Este problema aparece en Visual Studio 2008, pero no en MinGW. Lanzar 4.0e9 en unsigned long funciona bien.