pow возвращает разные результаты, используя Double или Decimal с отрицательным показателем

С Xcode 11.1, если я запускаю игровую площадку с:

pow(10 as Double, -2)  // 0.01

Я получаю тот же вывод, используя Float:

pow(10 as Float, -2) // 0.01

Но если я попытаюсь использовать pow (Decimal, Int) как в:

pow(10 as Decimal, -2) // NaN

Кто-нибудь знает почему?

Есть ли лучший способ справиться с положительным и отрицательным показателем с помощью Pow и Decimal? Мне нужно десятичное, поскольку они ведут себя так, как я ожидаю с валютой.

РЕДАКТИРОВАТЬ: я знаю, как решить это с математической точки зрения, я хотел бы понять, почему это происходит и / или если это можно решить без добавления цикломатической сложности моего кода (например, проверка, отрицательна ли экспонента, и выполнение 1 / пау)

Всего 1 ответ


Ну, алгебраически, x^(-p) == 1/(x^(p))

Итак, преобразуйте свою отрицательную силу в положительную, а затем возьмите ответную.

1/pow(10 as Decimal, 2) // 0.01

Есть идеи?

10000