.Net中科学计算的推荐数据类型是什么?

时间:2010-08-02 14:33:05

标签: c# .net types

.Net中最常用的科学计算数据类型是什么?是漂浮,双重还是其他什么?

5 个答案:

答案 0 :(得分:16)

科学价值往往是“自然”价值(长度,质量,时间等),其中有一个自然程度的不精确开始 - 但你可能想要非常,非常大或非常非常小的数字。对于这些值,double通常是一个好主意。它速度很快(几乎随处可见硬件支持),可以向上和向下扩展到巨大/微小的值,如果您不关心精确的decimal值,通常可以正常工作。

decimal对于“人工”数字来说是一个很好的类型,其中有一个确切的值,几乎总是自然地表示为小数 - 这个典型的例子就是货币。但是,就存储而言,它的价格是double的两倍(每个值8个字节而不是4个字节),具有较小的范围(由于指数范围更加有限),并且由于缺乏硬件支持而显着变慢

如果存储是一个问题,我个人只会使用float - 当你只有大约7位有效小数位时,很快就会出现不准确的情况。

最终,正如“熊会吃你”的评论所暗示的那样,这取决于你所谈论的价值 - 当然还有你打算用它们做什么。没有任何进一步的信息,我怀疑double是一个很好的起点 - 但你应该根据个人情况做出决定。

答案 1 :(得分:8)

当然,“科学计算”这个术语有点模糊,但总的来说,它是double

float主要是为了与期望32位浮点数的库兼容。 floatdouble操作(如添加)的性能完全相同,因此新代码应始终使用double,因为它具有更高的精度。

但是,x86 JITter永远不会内联使用或返回float的函数,因此在方法中使用float实际上可能会更慢。再次,这是为了兼容性:如果内联,执行引擎将跳过一个降低其精度的转换步骤,因此如果要内联这些函数,JITter可能会无意中更改某些计算的结果。

最后,还有decimal。只要有一定数量的小数位,重要的是使用它。陈规定型的用例是货币操作,但当然它支持超过2个小数位 - 它实际上是一个80位的数据。

如果即使64位double的准确度不够,也可以考虑使用外部库来获得任意精度的数字,但当然,如果您的特定科学用例专门要求它,您将只需要它

答案 2 :(得分:5)

Double似乎是此类操作最可靠的数据类型。甚至WPF也广泛使用它。

答案 3 :(得分:2)

请注意,使用小数比使用浮点数/双打更加昂贵(除了Jon Skeet和Timwi所写的内容)。

答案 4 :(得分:0)

除非你需要准确的值,否则我建议使用double;十进制是用于需要此精确度的财务计算。科学计算可以容忍小错误,因为无论如何都无法准确测量1米。如果存储是一个问题(即巨大的矩阵),Float只会有所帮助。