tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

bug894786-2.js (2768B)


      1 function f56(x) {
      2  var a = x >>> 0; // Range = [0 .. UINT32_MAX] (bits = 32)
      3  var b = 0x800000; // == 2^23 (bits = 24)
      4  if (a > 0) {
      5    // Beta node: Range [1 .. UINT32_MAX] (bits = 32)
      6    var c = a * b; // Range = [0 .. +inf] (bits = a.bits + b.bits - 1 = 55)
      7    var d = c + 1; // Range = [0 .. +inf] (bits = c.bits + 1 = 56)
      8    return (d | 0) & 1;
      9  } else {
     10    return 1;
     11  }
     12 }
     13 
     14 function f55(x) {
     15  var a = x >>> 0; // Range = [0 .. UINT32_MAX] (bits = 32)
     16  var b = 0x400000; // == 2^22 (bits = 23)
     17  if (a > 0) {
     18    // Beta node: Range [1 .. UINT32_MAX] (bits = 32)
     19    var c = a * b; // Range = [0 .. +inf] (bits = a.bits + b.bits - 1 = 54)
     20    var d = c + 1; // Range = [0 .. +inf] (bits = c.bits + 1 = 55)
     21    return (d | 0) & 1;
     22  } else {
     23    return 1;
     24  }
     25 }
     26 
     27 // Still returns 1, because the top-level bit is not represented.
     28 function f54(x) {
     29  var a = x >>> 0; // Range = [0 .. UINT32_MAX] (bits = 32)
     30  var b = 0x200000; // == 2^21 (bits = 22)
     31  if (a > 0) {
     32    // Beta node: Range [1 .. UINT32_MAX] (bits = 32)
     33    var c = a * b; // Range = [0 .. +inf] (bits = a.bits + b.bits - 1 = 53)
     34    var d = c + 1; // Range = [1 .. +inf] (bits = c.bits + 1 = 54)
     35    return (d | 0) & 1;
     36  } else {
     37    return 1;
     38  }
     39 }
     40 
     41 // Can safely truncate after these operations. (the mantissa has 53 bits)
     42 function f53(x) {
     43  var a = x >>> 0; // Range = [0 .. UINT32_MAX] (bits = 32)
     44  var b = 0x100000; // == 2^20 (bits = 21)
     45  if (a > 0) {
     46    // Beta node: Range [1 .. UINT32_MAX] (bits = 32)
     47    var c = a * b; // Range = [0 .. +inf] (bits = a.bits + b.bits - 1 = 52)
     48    var d = c + 1; // Range = [1 .. +inf] (bits = c.bits + 1 = 53)
     49    return (d | 0) & 1;
     50  } else {
     51    return 1;
     52  }
     53 }
     54 
     55 function f52(x) {
     56  var a = x >>> 0; // Range = [0 .. UINT32_MAX] (bits = 32)
     57  var b = 0x80000; // == 2^19 (bits = 20)
     58  if (a > 0) {
     59    // Beta node: Range [1 .. UINT32_MAX] (bits = 32)
     60    var c = a * b; // Range = [0 .. +inf] (bits = a.bits + b.bits - 1 = 51)
     61    var d = c + 1; // Range = [1 .. +inf] (bits = c.bits + 1 = 52)
     62    return (d | 0) & 1;
     63  } else {
     64    return 1;
     65  }
     66 }
     67 
     68 function f51(x) {
     69  var a = x >>> 0; // Range = [0 .. UINT32_MAX] (bits = 32)
     70  var b = 0x40000; // == 2^18 (bits = 19)
     71  if (a > 0) {
     72    // Beta node: Range [1 .. UINT32_MAX] (bits = 32)
     73    var c = a * b; // Range = [0 .. +inf] (bits = a.bits + b.bits - 1 = 50)
     74    var d = c + 1; // Range = [1 .. +inf] (bits = c.bits + 1 = 51)
     75    return (d | 0) & 1;
     76  } else {
     77    return 1;
     78  }
     79 }
     80 
     81 var e = Math.pow(2, 32);
     82 for (var i = 1; i < e; i = i * 1.5) {
     83    var x = i >>> 0;
     84    assertEq(f56(x) , (x >= Math.pow(2, 30)) ? 0 : 1);
     85    assertEq(f55(x), (x >= Math.pow(2, 31)) ? 0 : 1);
     86    assertEq(f54(x), 1);
     87    assertEq(f53(x), 1);
     88    assertEq(f52(x), 1);
     89    assertEq(f51(x), 1);
     90 }