Re[2]: сконвертировать unsigned int в float без потери точности
От: B0FEE664  
Дата: 02.12.15 16:32
Оценка:
Здравствуйте, watchmaker, Вы писали:

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

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

Как правильно понял uzhas, я хочу проверить, что моё число лежит в "непрерывном" интервале целых чисел [0, nMax] таком, что любое целое из этого интервала точно представимо в float, поэтому эта проверка меня не устраивает:
W>А чем тебя такая простая проверка не устраивает?
n == (unsigned)(float)n


Из вашего комментария я понимаю, что этот интервал определяется размером мантиссы, т.е. assert должен быть таким:

assert(n <= (1U << FLT_MANT_DIG) — 1);

Верно?
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.