3

新的 IEEE 128 位十进制浮点类型https://en.wikipedia.org/wiki/Decimal128_floating-point_format指定有效位(尾数)可以用两种方式之一表示,或者作为简单的二进制整数,或者以密集十进制表示(在这种情况下,每十位代表三个十进制数字)。

C# 的decimal类型早于该标准,但具有相同的想法。它带有二进制整数有效位。

从表面上看,这似乎效率低下。对于加法和减法,要排列有效数字,您必须将其中一个除以十的幂;除法是所有算术运算符中最昂贵的。

选择的原因是什么?什么相应的优势被认为值得惩罚?

4

1 回答 1

-1

选择一种表示几乎总是关于权衡。

这里

二进制编码在与十进制编码数据(如字符串(ASCII、Unicode 等)和 BCD 等)之间进行转换时效率较低。因此,仅当数据是二进制而不是十进制时才最好选择二进制编码。IBM 发布了一些未经验证的性能数据。

在这里您可以找到有关相对性能的更多信息。

基本上,它表明了你的想法,小数位通常更快,但大多数运算显示出相似的性能,二进制甚至在除法中获胜。还要记住,由于英特尔似乎主要依赖于二进制显着性(我找不到有关其他制造商的提示),因此它们更有可能获得硬件支持,并且比小数点有很大的优势。

于 2020-07-11T11:48:54.040 回答