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

Математические операции с использованием System.Decimal в С#

Мне нужно уметь использовать стандартные математические функции для десятичных чисел. Точность очень важна. double не является приемлемой заменой. Как математические операции могут быть реализованы с десятичными числами в С#?

редактировать Я использую System.Decimal. Моя проблема в том, что System.Math не работает с System.Decimal. Например, следующие функции не работают с System.Decimal:

  • System.Math.Pow
  • System.Math.Log
  • System.Math.Sqrt
4b9b3361

Ответ 1

Ну, Double использует с плавающей запятой math это не то, что вам нужно, если вы не делаете тригонометрию для 3D-графики или чего-то еще.

Если вам нужны простые математические операции, такие как деление, вы должны использовать System.Decimal.

Из MSDN: Ключевое слово decimal обозначает 128-битный тип данных. По сравнению с типами с плавающей запятой десятичный тип имеет большую точность и меньший диапазон, что делает его пригодным для финансовых и денежных расчетов.

Обновление: После некоторого обсуждения проблема заключается в том, что вы хотите работать с Decimals, но System.Math принимает только двойные пакеты для нескольких ключевых функциональных возможностей. К сожалению, вы работаете с высокоточными числами, а так как Decimal - 128 бит, а Double - всего 64, преобразование приводит к потере точности.

По-видимому, есть некоторые возможные планы сделать большую часть System.Math дескриптором Decimal, но мы еще не готовы.

Я немного поработал для математических библиотек, и наконец нашел найденный теперь вопрос StackOverflow, где TheVillageIdiot упомянул следующие библиотеки:

1) Mathdotnet, математическая библиотека с открытым исходным кодом (MIT/X11, LGPL и GPL), написанная на С#/. Net, направленной на обеспечение самодостаточной рамки для символических алгебраических и численных/научных вычислений.

2) IMSL ™ С# Численная библиотека для приложений Microsoft®.NET (оплачивается)

3) Библиотека математики экстремальной оптимизации для .NET

Ответ 2

Вы не дали нам достаточно информации, чтобы ответить на вопрос.

десятичные и двойные значения являются неточными. Ошибка представления десятичных знаков равна нулю, когда представленная величина в точности равна доле формы (x/10 n) для подходящего выбора x и n. Ошибка представления удвоений равна нулю, когда величина точно равна доле формы (x/2 n) снова для подходящего выбора x и n.

Если величины, с которыми вы имеете дело, не являются долями этой формы, тогда вы получите некоторую ошибку представления, период. В частности, вы упомянули о квадратных корнях. Многие квадратные корни - иррациональные числа; они не имеют дробной формы, поэтому любой формат представления, который использует фракции, будет давать небольшие ошибки.

Можете ли вы объяснить, что вы делаете, более подробно?

Ответ 3

DecimalMath содержит все функции класса System.Math с аналогией аргументов decimal

Примечание: это моя библиотека, а также содержит некоторые примеры в ней