Информация об изменениях

Сообщение Re: сконвертировать unsigned int в float без потери точности от 02.12.2015 15:53

Изменено 02.12.2015 16:06 watchmaker

Здравствуйте, B0FEE664, Вы писали:


BFE>Верен ли такой assert:

Нет, конечно.
Например из-за того, что в IEE754 для числел отдельно хранится мантисса и экспонента. Твоя проверка зависит от изменения экспоненты (читай от умножения n на 2), а точность представления во float — нет (разумеется, до переполнения экспоненты, но это невозможно для unsigned, так как FLT_MAX значительно больше).

А чем тебя такая простая проверка не устраивает?
n == (unsigned)(float)n
Re: сконвертировать unsigned int в float без потери точности
Здравствуйте, B0FEE664, Вы писали:


BFE>Верен ли такой assert:

Нет, конечно.
Например из-за того, что в IEEE754 для числел отдельно хранится мантисса и экспонента. Твоя проверка зависит от изменения экспоненты (читай от умножения n на 2), а точность представления во float — нет (разумеется, до переполнения экспоненты, но это невозможно для unsigned, так как FLT_MAX значительно больше).

А чем тебя такая простая проверка не устраивает?
n == (unsigned)(float)n



Ну а если тебя теория интересует, то критерий представимости unsigned в IEEE754 float будет примерно таким:
Если положить n = t * 2k, где t нечётное или 0, то n будет представим только если t < 224.