使用C#中的System.Decimal的数学运算

Math operations using System.Decimal in C#

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

编辑我用的是System.Decimal。我的问题是,System.Math不适用于System.Decimal。例如,以下功能不适用于System.Decimal

  • 数学系统
  • 系统日志
  • 系统.数学.sqrt


嗯,double使用的是浮点数学,这不是你想要的,除非你正在为3D图形或其他东西做三角学。

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

来自msdn:decimal关键字表示128位数据类型。与浮点类型相比,十进制类型具有更高的精度和更小的范围,因此适用于财务和货币计算。

更新:经过一些讨论,问题是你想使用小数,但是系统。数学只需要对几个关键的功能进行两倍运算。遗憾的是,您使用的是高精度数字,由于十进制是128位,而double只有64位,因此转换会导致精度损失。

显然,有一些可能的计划使大部分的系统。数学处理十进制,但我们还没有那里。

我在网上搜索了一下数学图书馆,最后我发现了一个现已删除的stackoverflow问题,Villageidiot提到了以下图书馆:

1)mathdotnet,一个用c/.net编写的数学开源(mit/x11,lgpl&gpl)库,旨在为符号代数和数字/科学计算提供一个独立的干净框架。

2)IMSL?C Microsoft数字库?.NET应用程序(付费)

3)用于.NET的极端优化数学库


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

小数和双精度都不准确。当所表示的数量正好等于形式的一个分数(x/10n)时,小数的表示误差为零,对于适当的x和n的选择,当数量正好等于形式的一个分数(x/2n)时,双精度的表示误差为零。

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

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


decimalmash包含System.Math类中的所有函数,使用decimal参数类比

注意:它是我的库,其中还包含一些示例


使用十进制数据类型,其精度为128位:

http://msdn.microsoft.com/en-us/library/364X0Z75(v=vs.80).aspx