【发布时间】:2012-03-22 16:23:04
【问题描述】:
所以我(想我)理解Float, Double, and Decimal 之间的区别,但我想知道的一件事是为什么有两种大小的浮点二进制点,但只有一种大小的浮点小数点?
如果我正确理解了一般原则,如果您不需要额外的大小,您可能希望在 32 位处理器上使用浮点数(32 位)以获得双倍(64 位)的性能双的。在 64 位处理器上,双精度应该更高性能,所以这个理由不是必需的。但是 Decimal 类型是 128 位。那么为什么不提供 64 位十进制,甚至 32 位呢?
这只是用例的问题吗?没有人真正需要它吗?还是有技术原因,比如您无法准确呈现小于 128 位的有用十进制范围?
【问题讨论】:
-
为什么单精度浮点数比双精度浮点数快?内存总线在任何情况下都是 64 位宽的,如今许多 CPU 都有独立的 FPU,这些 FPU 具有足够大的寄存器(x86 有 80 位浮点数!),内部布线的任何速度差异都应该很小(可能小于一个机器周期)。更好的理由是内存大小,即便如此,您也需要数百万个数字才能有所作为。
-
@delnan 浮点/双倍分界线是几十年前创建的,当时计算硬件非常不同。还要考虑像 SSE 这样的 SIMD 操作可以推送两倍于双倍的浮点数。
-
@DavidHeffernan 确实如此。我完全意识到这一点,但 OP 显然认为今天存在类似的差异。因此我的评论。 SIMD 的优点在于,虽然这超出了大多数人关心的优化水平。
-
@delnan 仍然存在 SIMD 差异
-
我不知道硬件中可能存在或仍然存在哪些区别,因此感谢您的启发性讨论。
标签: .net floating-point