Подтвердить что ты не робот

Есть ли математический API для Pow (десятичный, десятичный)

Есть ли библиотека для вычисления десятичных чисел, особенно метод Pow(decimal, decimal)? Я не могу найти.

Он может быть свободным или коммерческим, в любом случае, если он есть.

Примечание: я не могу сделать это сам, не могу использовать для циклов, не могу использовать Math.Pow, Math.Exp или Math.Log, потому что все они принимают double s, и я не могу используйте double s. Я не могу использовать серию, потому что она была бы такой же точной, как double s.

4b9b3361

Ответ 1

Один из множителей - это ставка: 1/rate ^ (дни/365).

Причина отсутствия функции десятичной мощности заключается в том, что для этого расчета было бы бессмысленно использовать decimal. Используйте double.

Помните, что точка десятичного числа - это то, что вы получаете точную арифметику значений, которые могут быть точно представлены как короткие десятичные числа. Для разумных значений rate и days значения любого из других подвыражений явно не будут точно представлены как короткие десятичные значения. Вы будете иметь дело с неточными значениями, поэтому используйте тип, предназначенный для быстрого вычисления немного неточных значений, например double.

Результаты, которые вычисляются в парном разряде, будут отключены на несколько миллиардов долларов ни копейки так или иначе. Какая разница? Вы завершите ошибку позже. Сделайте расчет скорости в парном разряде. Как только у вас есть результат, который нужно снова вернуть в валюту, умножьте результат на десять тысяч, округлите его до ближайшего целого числа, преобразуйте его в десятичную, а затем разделите на десять тысяч снова, будет иметь результат с точностью до четырех знаков после запятой, что должно быть достаточным для финансового расчета.

Ответ 2

Вот что я использовал.

output = (decimal)Math.Pow((double)var1, (double)var2);

Теперь я просто учился, но это работало, но я не знаю, смогу ли я это объяснить правильно.

то, что я считаю, это делает вход var1 и var2 и отбрасывает их в double, чтобы использовать в качестве аргумента для метода math.pow. После этого (decimal) перед math.pow верните значение в десятичное число и поместите значение в выходную переменную.

Я надеюсь, что кто-то может исправить меня, если мое объяснение ошибочно, но все, что я знаю, это то, что это сработало для меня.

Ответ 3

Хорошо, вот страница Википедии, в которой перечислены текущие библиотеки С#. Но TBH я не думаю, что есть много поддержки десятичных знаков

http://en.wikipedia.org/wiki/List_of_numerical_libraries

Неправильно использовать десятичные знаки для такого рода расчетов в целом. Это высокая точность да, но она также низкая. Поскольку документы MSDN заявляют об этом для финансовых/денежных расчетов - там, где к сожалению, не так много призыв к POW!

Конечно, у вас может быть конкретный проблемный домен, который требует сверхвысокой точности, и все числа находятся в пределах 10 (28) - 10 (-28). Но в этом случае вам, вероятно, просто нужно будет написать свой собственный калькулятор серии, такой как тот, который связан с комментариями к вопросу.

Ответ 4

Я ненавижу говорить, что это невозможно. Но получается, согласно этой теме, Math.Pow(double, double) вызывается непосредственно из CLR.

Как реализуется Math.Pow() в .NET Framework?

Вот что такое .NET Framework 4 (только для двух строк)

[SecuritySafeCritical]
public static extern double Pow(double x, double y);

64-разрядный десятичный код еще не является родным в этой 32-разрядной CLR. Может быть, на 64-битной платформе в будущем?

Ответ 5

Подожди, да? почему вы не можете использовать парные? вы всегда можете использовать, если вы используете ints или что-то еще:

int a = 1;
int b = 2;
int result = (int)Math.Pow(a,b);