Здравствуйте, 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);
Верно?