我是否正确decimal floating point numbers可以代表任何“有限值”(不是1/3情况)而没有任何改动,因此它没有像0.1 in case of binary floating point这样的“不可表示”的数字并且可以在进行任何数学计算后都会累积舍入误差?如果是这样,怎么可能?我的意思是,AFAIK无论如何都会对DFP数字进行精确限制,所以有一点他们将无法存储“真实”值并被迫以某种方式对其进行舍入。
但无论如何 - 它是否有任何“非有限”数字(我不知道这些值是否有更好的术语)无法在没有任何改动的情况下表示(如在二进制浮点的情况下已经提到的0.1)数字)?
答案 0 :(得分:0)
你注意到的是有一些数字,比如1/10,它们可以用base-10中的有限位数来表示,但不是在base-2中...但似乎没有数字可用base-2中的有限位数表示,但不能用base-10表示。那是真的!
出错的地方在于将其视为数字本身的基本和重要属性。实际上,“在基数为10”或基数为2的“有限位数”中表示并不是非常重要(除了这两个基数)。如果你想知道它们的代表性,那么它就是:
有理数a / b,其中a和b是没有公因子的有限整数,可用基数10中的有限位数表示,当且仅当b可表示为2的幂乘以幂时5。
所以1/10有效。 7/16有效。 3/500有效。 83/625000有效。 1/3不起作用。
删除单词“乘以5的幂”后,base-2的等效属性与base-10相同。所以7/16仍然有效,但1/10没有。 Base-10能够表达更宽范围的有理数,其有限位数比base-2更多(因为它具有2所有的主要因子,然后是一些)。
但同样,这不是基数10范围之外的数字的基本属性。在另一个使用基地60的星球上,外星人嘲笑我们因为无法用有限的数字来表示1/3。