ToString抽象操作:未唯一确定的最低有效数字

时间:2016-06-05 14:26:05

标签: javascript ecmascript-5

我正在阅读the ECMAScript abstract operation ToString。在步骤5中( m 是我们要转换为字符串的数字):

  
      
  1. 否则,让 n k s 为整数,使 k ≥1,10^ ( k -1)≤ s < 10 ^ k s 的数字值×10 ^( n - k )是 m k 尽可能小。请注意, k s 的十进制表示中的位数, s 不能被10整除,并且 s 的最低有效数字不一定由这些标准唯一确定
  2.   

我无法弄清楚在哪种情况下s的最低有效位不会被唯一确定。任何一个例子?

1 个答案:

答案 0 :(得分:1)

答案是 - 与浮点数学一样 - 在可用精度的边缘进行舍入。

让我们来s = 7011750883285835k=16和一些n(让他们说n=0)。现在确定m,我们得到浮点数0x3FE67006BD248487(在0.70117508832858355…附近)。但是,我们也可以选择s = 7011750883285836,它也等于m

关键在于,如果我们将双精度转换为十进制表示,我们就会得到0.701175088328583551167128007364。这比必要的时间长得多(并且意味着比可用的精度更高),因此ToString算法指定使用最少量的重要数字来生成m的十进制表示(" k尽可能小")仍然会解析为我们想要的数字m。有时,我们可以向上或向下舍入以获得该结果,并且允许两种方式。