C# 4.0 为什么System.Numerics.Complex使用双精度而不是小数?
我最近一直在使用C# 4.0 为什么System.Numerics.Complex使用双精度而不是小数?,c#-4.0,floating-point,C# 4.0,Floating Point,我最近一直在使用System.Numerics.Complex,我开始注意到典型的浮点“漂移”,其中存储的值被计算出百万分之一或类似的值,这是众所周知的,常见于float类型,甚至double类型。我查看了这个复杂的结构,果然,它使用了double变量。为什么它使用double值来存储数据,而不是decimal值,这是为了防止这种情况发生?如何解决这个问题?回答您的问题: doubles速度快几个数量级,因为操作是在硬件级别完成的 对于大型计算,base-2浮点实际上更精确,因为上下移动指数时“
System.Numerics.Complex
,我开始注意到典型的浮点“漂移”,其中存储的值被计算出百万分之一或类似的值,这是众所周知的,常见于float
类型,甚至double
类型。我查看了这个复杂的结构,果然,它使用了double
变量。为什么它使用double
值来存储数据,而不是decimal
值,这是为了防止这种情况发生?如何解决这个问题?回答您的问题:
double
s速度快几个数量级,因为操作是在硬件级别完成的decimal
不是为防止漂移而设计的。它被设计成精确地表示十进制值。它使用128位这一事实可能会让你更容易接受漂移,但额外的精度是以性能为代价的,以至于设计师们认为基于double
的复杂的类型会更好地满足大多数人的需求。大自然不会用10个手指计算,只有人类有。NET的十进制也有一个相当小的指数范围(在十进制中,它被称为“刻度”),大约在10^28和10^28之间。双精度的范围要大得多。@HansPassant:自然也不会用两个手指计数。不过,电脑确实如此。当然,一只负重燕子的飞行速度只能用有限的以蟒蛇为基数的数字来精确表示。