Сообщение 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 значительно больше).
А чем тебя такая простая проверка не устраивает?
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 значительно больше).
А чем тебя такая простая проверка не устраивает?
Ну а если тебя теория интересует, то критерий представимости unsigned в IEEE754 float будет примерно таким:
Если положить n = t * 2k, где t нечётное или 0, то n будет представим только если t < 224.
BFE>Верен ли такой assert:
Нет, конечно.
Например из-за того, что в IEEE754 для числел отдельно хранится мантисса и экспонента. Твоя проверка зависит от изменения экспоненты (читай от умножения n на 2), а точность представления во float — нет (разумеется, до переполнения экспоненты, но это невозможно для unsigned, так как FLT_MAX значительно больше).
А чем тебя такая простая проверка не устраивает?
n == (unsigned)(float)n
Ну а если тебя теория интересует, то критерий представимости unsigned в IEEE754 float будет примерно таким:
Если положить n = t * 2k, где t нечётное или 0, то n будет представим только если t < 224.