使用系统进行数学运算.c#中的十进制

本文关键字:运算 十进制 系统 | 更新日期: 2023-09-27 17:54:37

需要能够使用十进制数的标准数学函数。精度非常重要double是不可接受的替代。如何在c#中用十进制数字实现数学运算?

编辑我用的是System.Decimal。我的问题是,System.Math不与System.Decimal工作。例如,以下函数不能用于System.Decimal:

  • System.Math.Pow
  • System.Math.Log
  • System.Math.Sqrt

使用系统进行数学运算.c#中的十进制

嗯,Double使用浮点数学,这不是你所追求的,除非你在做3D图形的三角函数或其他东西。

如果你需要做简单的数学运算,比如除法,你应该使用System.Decimal。

From MSDN: 十进制关键字表示128位数据类型。与浮点类型相比,小数类型具有更高的精度和更小的范围,这使得它适用于金融和货币计算。

Update:经过讨论,问题是您想要使用小数,但是System。Math只在几个关键的功能部分使用double。遗憾的是,您正在处理高精度数字,并且由于Decimal是128位而Double只有64位,因此转换会导致精度损失。

显然有一些可能的计划来充分利用System。数学处理十进制,但我们还没有到。

我在谷歌上搜索了一些数学库,并编制了这个列表:

  1. Mathdotnet,数学开源(MIT/X11, LGPL &用c#/编写的GPL)库。Net,旨在为符号代数和数值/科学计算提供一个自包含的干净框架。

  2. .NET极限优化数学库(付费)

  3. DecimalMath一个相对较新的,它标榜自己为:可移植的数学支持十进制,微软忘记了更多。听起来很有希望。

DecimalMath包含System.Math类中所有与decimal参数相似的函数

注意:这是我的库,也包含一些例子在它

你没有给我们足够的信息来回答这个问题。

decimal和double都是不精确的。小数的表示错误 0当所表示的数量恰好等于形式为(x/10n)的分数时,对于x和n的合适选择,双精度数的表示错误是0 (x/2n)。

如果你处理的数量不是这种形式的分数,那么你会得到一些表示错误,句号。特别地,你提到了取平方根。许多平方根都是无理数;它们没有分数形式,所以任何使用分数的表示格式都会产生小错误。

你能更详细地解释一下你在做什么吗?