Math operations using System.Decimal in C#
我需要能够使用十进制数字的标准数学函数。准确度非常重要。double不是可接受的替代品。如何用C中的十进制数字实现数学运算?
编辑我用的是System.Decimal。我的问题是,System.Math不适用于System.Decimal。例如,以下功能不适用于System.Decimal:
- 你能定义标准的数学函数吗?
- 十进制怎么样?
- 你在用什么数学函数,想沉迷其中?我们在谈地板和天花板?或者别的什么?
- 你认为"十进制数"是什么?
- 特别是什么功能?你能列出一些吗?另外,decimal不是合适的数据类型吗?
- 这个问题很模糊。你需要知道什么?
- 应该指出的是,只要将使用的值限制为仅整数,那么double类型将为您提供一个有效的53位整数。当然,您仍然需要进行自己的分数缩放。
- 可能想看看这个浮点图形用户界面.de/basic
- 我编辑了我的文章来反映这三个特定的系统。数学函数是必要的。
嗯,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的极端优化数学库
- 我试图使用System.Decimal,但它不适用于System.Math
- 对于算术,使用十进制,当需要执行system.math.log时,将其强制转换为double,然后再返回。
- 我需要准确度,铸造力损失的准确度。
- 啊,你的意思是双倍施法会使精度降低。看看这个答案:stackoverflow.com/questions/803225/…
- @你肯定需要第三方图书馆。显然,这应该最终进入框架,但还没有进入。我现在在谷歌搜索。有一些C库,可能有一个C包装器。
- @布莱恩·麦凯:好吧,听起来不错。谢谢你的帮助!
- 很遗憾,您在问题中链接到的答案似乎已被删除。
- @杰夫布里奇曼不确定这里的协议是什么,但为了解决这个问题,我从删除的问题的答案中引入了相关内容,并尽我所能给予适当的评价。谢谢你的提醒。
你没有给我们足够的信息来回答这个问题。
小数和双精度都不准确。当所表示的数量正好等于形式的一个分数(x/10n)时,小数的表示误差为零,对于适当的x和n的选择,当数量正好等于形式的一个分数(x/2n)时,双精度的表示误差为零。
如果你处理的数量不是这个形式的分数,那么你会得到一些表示错误,句点。特别是,你提到取平方根。许多平方根是无理数;它们没有分数形式,所以任何使用分数的表示格式都会产生小的错误。
你能更详细地解释一下你在做什么吗?
- -我认为这个问题提供了足够的信息。他使用的是小数,他希望在计算中使用内置的.NET类操作,但这些操作只需要加倍。
decimalmash包含System.Math类中的所有函数,使用decimal参数类比
注意:它是我的库,其中还包含一些示例
- 如果你打算推广你自己的图书馆,请公开你写的。我假设您这样做是因为Github用户名与您的so用户名匹配。这也将有助于举例说明你将如何完成OP想要的,而不仅仅是链接到你的库。
- 是的,它是我的库,我开发它是为了满足我的需要,并且经常共享,我用每个函数的泰勒级数和其他一些技巧重写了数学库,我的意思是所有的例子都和数学课一样,所以不需要额外的例子,但是?我不知道这是我的。
使用十进制数据类型,其精度为128位:
http://msdn.microsoft.com/en-us/library/364X0Z75(v=vs.80).aspx