代码之家  ›  专栏  ›  技术社区  ›  Dagg Nabbit

此javascript表达式的最高和最低可能结果?

  •  6
  • Dagg Nabbit  · 技术社区  · 14 年前

    +(''+Math.random()).substring(2)
    

    额外学分:


    Daniel的回答(已删除,最大值为1000000000000000,最小值为0):

        Math.random();
    
    >> 0.00012365682050585747
    
        '12365682050585747'.length
    
    >> 17
    
        12365682050585747 > 10000000000000000
    
    >> true
    

    ... 所以1000000000000000不能是最大值!

    2 回复  |  直到 14 年前
        1
  •  3
  •   kennytm    14 年前

    这取决于随机数是如何生成的,以及该数字将如何转换为字符串。ECMAScript规范没有同时指定这两个。

    实际上,该数字最多有17个有效数字,因此最多应为10个 .

    -6 ?x<10个 -6 ,1)当试图穷尽地寻求最大值时。

    s码 电子 s码 ¤ 2 2 -52 精度Δ s码 -52 和-20· ¤ -1. 规范建议 ToNumber(ToString(x)) == x ,所以数字应该精确到2 电子 电子 . 因此,“17位”数字与(2 × 2 ) × 2 电子 将是一个给定的 电子 0. .

                 v                 
    (-20) 0.0000019073486328124998
    (-19) 0.0000038146972656249996
    (-18) 0.0000076293945312499975 (n=3)
    (-17)  0.000015258789062499998
    (-16)  0.000030517578124999997
    (-15)  0.000061035156249999986 (n=2)
    (-14)   0.00012207031249999999
    (-13)   0.00024414062499999997
    (-12)   0.00048828124999999995
    (-11)    0.0009765624999999999 (always 16-digit?)
    (-10)    0.0019531249999999998
    (-9)     0.0039062499999999996
    (-8)     0.0078124999999999965 (n=4)
    (-7)      0.015624999999999998
    (-6)      0.031249999999999997
    (-5)      0.062499999999999986 (n=2)
    (-4)       0.12499999999999999
    (-3)       0.24999999999999997
    (-2)       0.49999999999999994
    (-1)        0.9999999999999999 (always 16-digit?)
    

    从这里我们知道绝对最大值是 78,124,999,999,999,965 .


    Math.random() 可以返回区间[0,1]中的任何非负数,因此安全最小值为-324 5e-324 (双精度最小次正常数为4.94×10 ).

        2
  •  2
  •   hluk    14 年前

    编辑:您还可以尝试从字符串中解析一个数字,以查看哪个值为无穷大。

    var a = "1";
    while(parseInt(a)!==Infinity) a=a+"0";
    alert("Length of the highest number is: " + (a.length-1));