我可以说出使用的三个优点double
(or float
) 代替decimal
:
- 使用更少的内存。
- 速度更快,因为处理器本身支持浮点数学运算。
- 可以表示更大范围的数字。
但这些优点似乎只适用于计算密集型操作,例如建模软件中的操作。当然,当需要精度时,例如金融计算,不应该使用双精度数。那么有没有任何实际的理由来选择double
(or float
) 代替decimal
在“正常”应用程序中?
编辑添加:
感谢大家的精彩回复,我从他们身上学到了东西。
还有一个问题:一些人指出双精度数可以更精确地表示实数。当宣布时,我会认为它们通常也更准确地代表他们。但是,执行浮点运算时精度可能会降低(有时会显着降低),这是真的吗?
我认为您已经很好地总结了优点。然而你漏掉了一点。这decimal http://msdn.microsoft.com/en-us/library/system.decimal.aspxtype 仅在表示时更准确base 10数字(例如用于货币/金融计算的数字)。一般来说,double http://msdn.microsoft.com/en-us/library/system.double.aspxtype 至少会提供同样高的精度(如果我错了,有人纠正我),并且对于任意实数来说绝对有更快的速度。简单的结论是:在考虑使用哪个时,始终使用double
除非你需要base 10
准确度decimal
offers.
Edit:
关于您关于运算后浮点数精度降低的附加问题,这是一个稍微微妙的问题。事实上,在执行每次操作后,精度(我在这里可互换地使用该术语来表示准确度)将稳步下降。这是由于两个原因:
- 事实上,某些数字(最明显的是小数)无法真正以浮点形式表示
- 会出现舍入错误,就像您手动进行计算一样。然而,这些错误是否严重到足以值得深思熟虑,这在很大程度上取决于上下文(您正在执行多少个操作)。
在所有情况下,如果要比较理论上应该相等的两个浮点数(但使用不同的计算得出),则需要允许一定程度的容差(多少会有所不同,但通常非常小) 。
有关可能引入精度错误的特定情况的更详细概述,请参阅维基百科文章 http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems。最后,如果您想在机器级别对浮点数/运算进行认真深入(和数学)的讨论,请尝试阅读经常引用的文章每个计算机科学家都应该了解的浮点运算知识 https://docs.oracle.com/cd/E19957-01/800-7895/800-7895.pdf.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)