【发布时间】:2020-10-31 20:43:08
【问题描述】:
新的 IEEE 128 位十进制浮点类型 https://en.wikipedia.org/wiki/Decimal128_floating-point_format 指定有效数(尾数)可以用两种方式之一表示,可以是简单的二进制整数,也可以是密集的十进制(在这种情况下,每个十位代表三位十进制数字)。
C# 的decimal 类型早于该标准,但具有相同的想法。它带有二进制整数有效位。
从表面上看,这似乎效率低下;对于加法和减法,要排列有效数字,您必须将其中一个除以十的幂;除法是所有算术运算符中最昂贵的。
选择的原因是什么?什么相应的优势被认为值得惩罚?
【问题讨论】:
-
“因为这是写的”? .NET 1 于 2002 年初发布;可能有特定的技术 r 可供选择,或者可能完全是“什么符合预期的行为并且我们可以按时发货?” - 但是:希望在这一点上找到全部原因可能是雄心勃勃的
-
因为这是英特尔在微处理器中的浮点单元中使用的。请参阅:software.intel.com/content/www/us/en/develop/articles/…
-
@jdweng 该链接讨论了一个软件浮点库。我没有在其中看到任何表明十进制浮点是在今天的英特尔 CPU 上的硬件中实现的,更不用说在发明 C# 的时候了?
-
您认为英特尔在哪里使用该库?请参阅:intel.com/content/dam/www/public/us/en/documents/case-studies/…
-
@jdweng Intel 处理器上的浮点单元是二进制而不是十进制
标签: c# .net floating-point decimal 128-bit