На моей платформе это печатает 9223372036854775808.
double x = 1e19;
std::cout << static_cast<unsigned __int64>(x) << '\n';
Я попробовал Повышение. NumericConversion, но получил тот же результат.
Разделение x в 2 равных части, затем добавление вместе преобразованных половин дают корректный результат. Но мне нужно универсальное решение использовать в коде шаблона.
Заранее спасибо.
Править: Эта проблема разоблачает на Visual Studio 2008, но не MinGW. Кастинг 4.0e9 в длинный неподписанный хорошо работает.