64-битный дубль использует только 52 бита для хранения числа, а остальные для хранения знака (+
или -
) и показателя степени. ( Примечание: Это реализация IEEE754 , реализация double
может отличаться в других стандартах языка)
An unsigned int
(он же size_t
) использует все 64-битные числа для хранения числа, но для экспонент не осталось пробелов и, следовательно, нет точности с плавающей запятой в целых числах, таких как size_t
Следовательно, компилятор говорит вам, что если ваше 64-битное целое число без знака больше, чем то, что может хранить мантисса 64-битного double
-типа (т. е. больше , чем 52 бита ), это может привести к потере данных и, возможно, к неопределенному поведению в остальной части кода впоследствии.
Выполнение static_cast<double>(idx)
- это утверждение программиста, говорящее компилятору не беспокоиться и которое вы будете держать в соблюдайте вышеуказанные меры предосторожности.
Источник: https://en.wikipedia.org/wiki/Double-precision_floating-point_format