Предположим 24 (можно 32, не имеет значения) целые. Как и какие из них получаются Single?
Это очень даже важно, 24 или 32 бита. Важно даже со знаком или без.
Если 24 бита, то и со знаком и без в single влезают без погрешностей, все числа
в single представимы точно.
Если суммируется не более чем
чисел, то достаточно иметь ещё
битов слева (в целой части чисел) чтобы избежать погрешностей. Или те же лишние k битов справа (в дробной части). Что для
практически влезает в double и значит суммирование до миллиарда целых в диапазоне
каждое итоговую погрешность не увеличивает.
Деление в double суммы на количество почти не увеличивает
относительную погрешность среднего.
Как конкретно кодируются числа в single и double вопрос считаю банальным, он много где подробно описан (включая и
вики).
Если известен диапазон чисел и их количество, то для исключения погрешности суммы надо иметь не менее суммы битов в каждом из чисел (и всё округлять вверх). Это же тривиально,
умножаем на верхний предел диапазона чисел
(а любой диапазон целых можно привести к такому виду) и получаем сложение количества битов
(членами второго порядка малости пренебрёг, но они гарантированно не увеличивают результат). Если располагаем меньшим количеством битов, то будет зависимость от порядка суммирования.
Вот с умножением всё гораздо хуже.
Что-то полезное можно посмотреть в той же
вики1,
вики2.