AS>>Распределение вещественных чисел, представляемых флоат (да и любым числом с плавающей точкой) на множестве вещественных чисел, неравномерно. Наиболее плотно числа представлены (отбросив знак) в районе единицы, далее, ближе к границам диапазона — значительно более разрежено. Т.е. далеко не все целые числа из диапазона флоата можно с точностью до +-0.5 им представить.
T>Наиболее плотно — в районе нуля
С чего это? Флоат хранится в нормализованом виде с неявной единицой.
AS>>Более того. Общее количество (вещественных) чисел, представляемых float, составляет примерно (точно я не помню) 2^25 + 1.
T>Больше. Намного больше. Чуть меньше 2^32 (меньше из-за того, что некоторые числа имеют неоднозначное представление, но таких чисел очень мало).
Да, верно. Имелся ввиду диапазон точного представления целых чисел.
AS>>Общее количество (вещественных) чисел, представляемых double, состоявляет 2^53 + 1,
T>Тоже ошибаешься. Порядка 2^64. Как и следовало ожидать.
Аналогично предыдущему.
AS>>т.е. им представить 42 битное число с некоторой осторожностью можно (при этом, очевидно, от операции инкремента в виде прибавления единички к значению придется отказаться, придумав нечто другое, что не изменяло бы значения порядка, а только мантиссы).
T>Осторожность никогда не повредит, но в данном случае можно смело пользоваться double. При условии, что используются только +-*= и значение не вылазиет за 2^52.
AS>>В общем — правильнее и быстрее использовать вложеный цикл на long, если компилер не поддерживает 64-х битные целые.
T>Правильнее? Наверное да. Быстрее? Сомниваюсь. Все зависит от задачи и "внутренностей" цикла.
Быстрее — однозначно. По производительности будет не сильно ниже, чем с int64.