Что более точно? java.lang.Math.E или Math.exp(1.0)
Чтение Javadocs, я вижу, что Math.E является "двойным значением, которое ближе любого другого к e, основанию натуральных логарифмов". Печатное значение для Math.E равно 2.718281828459045, а значение Math.exp(1.0), которое должно быть одинаковым, равно: 2.7182818284590455 (еще 5 в конце).
В документах это звучит так, как биты в Math.E были "скорректированы вручную", чтобы приблизиться к фактическому значению e, чем расчет, произведенный Math.exp(1.0). Правильно ли это, или я неправильно читаю документы?
Если это правильно, то использует Math.pow(Math.E, n) более точную, чем Math.exp(n) или меньше? Я Googled и поиск SO, но не могу найти что-либо по этой конкретной проблеме.
Ответы
Ответ 1
Фактическое значение до 16 знаков после запятой - 2.7182818284590452; 2 ближе к 0, чем к 5, поэтому константа ближе.
Обратите внимание, что при выполнении вычислений с плавающей запятой с любым числом это, скорее всего, ошибка в представлении с плавающей запятой вашего ответа сделает тот, который вы используете в основном
не имеет значения.
Ответ 2
Math.E
2,718281828459045
Math.exp(1.0)
2,7182818284590455
Итак, это значение из Википедии, 2.7182818284590452 Единственное различие, которое я вижу, это ошибка округления последней цифры в Math.exp(1.0), где значение равно 5 вместо 2. Таким образом, строго говоря, Math.E более точен, но если вы не делаете какие-то действительно сумасшедшие вещи, это не имеет значения для точности.
Могут быть соображения скорости использования предварительно рассчитанной Math.E вместо Math.exp(1.0). Возможно, вы захотите также проверить это.