Math.pow с отрицательными числами и нецелыми степенями

Спецификация ECMAScript для Math.pow имеет следующее своеобразное правило:

  • Если x

( http://es5.github.com/#x15.8.2.13 )

В результате Math.pow(-8, 1 / 3) дает NaN довольно чем -2

В чем причина этого правила? Есть ли какая-то более широкая компьютерная наука или IEEEish причина для этого правила, или это просто выбор TC39 / Eich, сделанный когда-то?


Обновление

Благодаря обменам Амадана со мной, я думаю, что теперь понимаю причину. Я хотел бы расширить нашу дискуссию ради потомков.

Давайте возьмем следующий пример: Math.pow(823543, 1 / 7) приводит к 6.999999999999999, хотя это действительно должно быть 7. Это неточность, связанная с тем, что сначала необходимо преобразовать 1 / 7 в десятичное представление 0.14285714285714285, которое усекается и теряет точность. Это не такая плохая проблема, когда мы работаем с положительными числами, потому что мы все еще получаем результат, который очень близок к реальному результату.

1126 Однако, как только мы вступаем в отрицательный мир, у нас возникает проблема. Если бы движок JavaScript пытался вычислить Math.pow(-823543, 1 / 7), то сначала нужно было бы преобразовать 1 / 7 в десятичное число, поэтому на самом деле это были бы вычисления Math.pow(-823543, 0.14285714285714285), которые на самом деле не имеют реального ответа . В этом случае, возможно, придется вернуть NaN, так как он не может найти действительное число, даже если реальный ответ должен быть -7. Кроме того, поиск комплексных чисел, близких к действительным числам, чтобы сделать «наилучшее предположение», может включать уровень сложности, который они не хотели требовать от движка JS на математической арене.

Я предполагаю, что это связано с рассмотрением потери точности в числах с плавающей запятой, что привело их к правилу, что отрицательные числа с нецелой степенью всегда должны быть NaN - в основном потому, что нецелые сила, вероятно, даст комплексное число в результате потери точности, даже если это не так, и, возможно, нет хорошего способа восстановить ее.

1128 Этим я вполне доволен, но приветствую дополнительную информацию.

10
задан Nathan Wall 29 January 2013 в 05:03
поделиться