Безопасное преобразование от дважды до неподписанного целого числа на 64 бита

На моей платформе это печатает 9223372036854775808.

double x = 1e19;
std::cout << static_cast<unsigned __int64>(x) << '\n';

Я попробовал Повышение. NumericConversion, но получил тот же результат.

Разделение x в 2 равных части, затем добавление вместе преобразованных половин дают корректный результат. Но мне нужно универсальное решение использовать в коде шаблона.

Заранее спасибо.

Править: Эта проблема разоблачает на Visual Studio 2008, но не MinGW. Кастинг 4.0e9 в длинный неподписанный хорошо работает.

6
задан user401947 26 July 2010 в 06:16
поделиться