Я пишу протокол, который использует RFC 7049 в качестве двоичного представления. В стандарте указано, что протокол может использовать 32-битное представление чисел с плавающей запятой, если их числовое значение эквивалентно соответствующим 64-битным числам. Преобразование не должно приводить к потере точности.
- Какие 32-битные числа с плавающей запятой могут быть больше, чем 64-битные целые числа, и численно эквивалентны им?
- Достаточно ли сравнения
float x; uint64_t y; (float)x == (float)y
, чтобы убедиться, что значения эквивалентны? Будет ли это сравнение когда-нибудь верным?
Для целей данной спецификации все числовые представления одного и того же числового значения эквивалентны. Это означает, что кодировщик может кодировать значение с плавающей запятой 0,0 как целое число 0. Это, однако, также означает, что приложение, которое ожидает найти только целочисленные значения, может найти значения с плавающей запятой, если кодировщик решит, что это желательно, например например, когда значение с плавающей запятой более компактно, чем 64-битное целое число.
What 32-bit float numbers can be bigger than 64-bit integer and numerically equivalent with them?
Нет: по определению числоX
равноеY
не может быть большеY
. - person Igor Tandetnik   schedule 27.09.20151.0f == float(1ull)
- person Igor Tandetnik   schedule 27.09.2015