Есть два соображения.Первый - округление из-за неточности представлений с плавающей точкой;это не будет проблемой в этом случае, потому что целые числа прекрасно представимы, пока число битов меньше, чем биты значащих и в плавающей запятой.Если long
равно 32 битам, а double
значимо и равно 53 битам, как обычно, проблем не будет.
Вторым соображением является точность самой функции pow
.Если есть вероятность, что оно окажется ниже, чем фактическое значение, добавление 0,5 для округления результата - единственный способ обеспечить правильный результат.
Ожидаемый результат от pow
всегда будет целым числомтак что нет никакого вреда в добавлении 0,5.Я бы порекомендовал эту версию.