所以我(我想)理解Float, Double, and Decimal之间的区别,但我想知道的一件事是为什么有两个大小的浮动二进制点,但只有一个浮动小数点大小?
如果我理解正确的一般原则,如果你不需要额外的大小,你想在32位处理器上使用浮点数(32位)来实现双倍(64位)的性能双重的。在64位处理器上,double应该更高性能,因此这个原理并不是必需的。但Decimal类型是128位。那么为什么不提供64位十进制,甚至是32位?
只是用例问题;没有人真的需要它吗?或者是否存在技术原因,例如您无法准确呈现小于128位的有用小数范围?
答案 0 :(得分:4)
与Eric Lippert的Features start off as unimplemented and only become implemented when people spend effort implementing them的强制性链接。
为什么这不是个好主意:
答案 1 :(得分:1)
较小的十进制类型的能力较差。由于您不倾向于执行浮点数据常见的相同类型的高容量计算,因此似乎不需要基于性能的较小小数。
答案 2 :(得分:1)
为什么有两种大小的浮点二进制点
因为许多编程语言已经有单独的单精度和双精度浮点类型,包括C(++),Java和Visual Basic。很自然地,C ++ / CLI,J#和VB.NET也会有这些类型。
OTOH,没有向后兼容性的原因有多个十进制浮点类型。
如果我理解正确的一般原则,你会想要使用 浮点(32位),性能超过32位的双倍(64位) 处理器,如果你不需要额外的双倍大小。
没有。尽管它的名称,double
长期以来一直是“主要”浮点类型,float
是用于内存优化的“半精度”类型。例如,.NET System.Math
类几乎总是使用double
而不是float
。在所有C语言中,像1.23
这样的文字都有double
类型(你需要一个额外的f
来获得一个浮点数。)
那么为什么不提供64位十进制,甚至是32位?
使用32位(可能是7位数)decimal
时,您会一直遇到舍入错误。现在,在某些情况下,为了提高效率,您可能会故意牺牲精度,但在这种情况下,您也可以使用float
来获得硬件支持的好处。