Что более точно? 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). Возможно, вы захотите также проверить это.