Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.42 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html><head><meta charset="UTF-8">
  3. <title>test complementBiasedExponent</title>
  4. <script type="text/javascript">
  5. "use strict";
  6. var CSNumber = {};
  7. CSNumber.realmult = function(r, c) {
  8. return {
  9. "ctype": "number",
  10. "value": {
  11. 'real': r * c.value.real,
  12. 'imag': r * c.value.imag
  13. }
  14. };
  15. };
  16. var List = {};
  17. List._helper = {};
  18. // See IEEE Std 754-2008, 3.4 Binary interchange format encodings:
  19. // sign(1 bit) | biased exponent(11 bits) | trailing significand field(52 bits)
  20. List._helper.complementBiasedExponent = function f(n) {
  21. f.f64[0] = n;
  22. var newexp = 0x7ff0 ^ f.ui16[f.which] & 0x7ff0;
  23. f.f64[0] = 0;
  24. f.ui16[f.which] = newexp;
  25. return f.f64[0];
  26. };
  27. // Define the static varibles
  28. List._helper.complementBiasedExponent.ab8 = new ArrayBuffer(8);
  29. List._helper.complementBiasedExponent.ui16 = new Uint16Array(List._helper.complementBiasedExponent.ab8, 0, 4);
  30. List._helper.complementBiasedExponent.f64 = new Float64Array(List._helper.complementBiasedExponent.ab8, 0, 1);
  31. List._helper.complementBiasedExponent.f64[0] = 9007199254740992; // just a number to test little-endian versus big-endian
  32. List._helper.complementBiasedExponent.which = List._helper.complementBiasedExponent.ui16[3] === 17216 ? 3 : 0;
  33. List.realVector = function(l) {
  34. var erg = [];
  35. for (var i = 0; i < l.length; i++) {
  36. erg[i] = {
  37. "ctype": "number",
  38. "value": {
  39. 'real': l[i],
  40. 'imag': 0
  41. }
  42. };
  43. }
  44. return {
  45. 'ctype': 'list',
  46. 'value': erg
  47. };
  48. };
  49. List.absmax = function(a, m) { //Only for Lists or Lists of Lists that contain numbers
  50. //Used for Normalize max
  51. var abs = Math.abs;
  52. for (var i = 0; i < a.value.length; i++) {
  53. var v = a.value[i];
  54. if (v.ctype === "number") {
  55. m = Math.max(m, abs(v.value.real), abs(v.value.imag));
  56. }
  57. if (v.ctype === "list") {
  58. m = List.absmax(v, m);
  59. }
  60. }
  61. return m;
  62. };
  63. List.realmult = function(r, a) {
  64. var erg = [];
  65. for (var i = 0; i < a.value.length; i++) {
  66. var v = a.value[i];
  67. if (v.ctype === 'number') {
  68. erg[i] = CSNumber.realmult(r, v);
  69. } else if (v.ctype === 'list') {
  70. erg[i] = List.realmult(r, v);
  71. } else {
  72. erg[i] = nada;
  73. }
  74. }
  75. return {
  76. 'ctype': 'list',
  77. 'value': erg
  78. };
  79. };
  80. List.normalizeMaxR = function(a) {
  81. var max = List.absmax(a, 0);
  82. var s = Math.pow(2, Math.ceil(-1 - Math.log(max) / Math.LN2));
  83. if (!isFinite(s) || s === 0) return a;
  84. return List.realmult(s, a);
  85. };
  86. List.normalizeMaxA = function(a) {
  87. var max = List.absmax(a, 0);
  88. var s = List._helper.complementBiasedExponent(max) * 0.25;
  89. if (!isFinite(s) || s === 0) return a;
  90. return List.realmult(s, a);
  91. };
  92. // See IEEE Std 754-2008, 3.4 Binary interchange format encodings:
  93. // sign(1 bit) | biased exponent(11 bits) | trailing significand field(52 bits)
  94. List.normalizeMax = function f(a) {
  95. f.f64[0] = List.absmax(a, 0);
  96. var newexp = 0x7ff0 ^ f.ui16[f.which] & 0x7ff0; // complement the biased exponent
  97. f.f64[0] = 0;
  98. f.ui16[f.which] = newexp;
  99. var s = f.f64[0] * 0.25;
  100. if (!isFinite(s) || s === 0) return a;
  101. return List.realmult(s, a);
  102. };
  103. // Define the static varibles
  104. List.normalizeMax.ab8 = new ArrayBuffer(8);
  105. List.normalizeMax.ui16 = new Uint16Array(List.normalizeMax.ab8, 0, 4);
  106. List.normalizeMax.f64 = new Float64Array(List.normalizeMax.ab8, 0, 1);
  107. List.normalizeMax.f64[0] = 9007199254740992; // just a number to test little-endian versus big-endian
  108. List.normalizeMax.which = List.normalizeMax.ui16[3] === 17216 ? 3 : 0;
  109. </script></head><body><pre><script type="text/javascript">
  110. "use strict";
  111. var c = 1000 * 2000;
  112. var j;
  113. var ct;
  114. var r0 = 0;
  115. ct = Date.now();
  116. for (j = 1; j <= c; ++j) r0 += Math.pow(2, Math.ceil(-1 - Math.log(j) / Math.LN2)) * j;
  117. var t0 = ((Date.now() - ct) / (c / 1000));
  118. var r1 = 0;
  119. ct = Date.now();
  120. for (j = 1; j <= c; ++j) r1 += List._helper.complementBiasedExponent(j) * 0.25 * j;
  121. var t1 = ((Date.now() - ct) / (c / 1000));
  122. var h = List.realVector([.6, .8, 1]);
  123. var nh;
  124. var r2 = 0;
  125. ct = Date.now();
  126. for (j = 1; j <= c; ++j) { h.value[2].value.real = j; r2 += List.normalizeMaxR(h).value[2].value.real; };
  127. var t2 = ((Date.now() - ct) / (c / 1000));
  128. var r3 = 0;
  129. ct = Date.now();
  130. for (j = 1; j <= c; ++j) { h.value[2].value.real = j; r3 += List.normalizeMaxA(h).value[2].value.real; };
  131. var t3 = ((Date.now() - ct) / (c / 1000));
  132. var r4 = 0;
  133. ct = Date.now();
  134. for (j = 1; j <= c; ++j) { h.value[2].value.real = j; r4 += List.normalizeMax(h).value[2].value.real; };
  135. var t4 = ((Date.now() - ct) / (c / 1000));
  136.  
  137. var res = 0; // expect 48429704585 / 32768
  138. var jk;
  139. var k = 1 / 2;
  140. for (j = 1; j <= c; ++j) res += (jk = j * k) < 1 ? jk : j * (k /= 2);
  141. document.write("Time:" + t0 + " (μs) for each pow2CeilInvLog\n");
  142. document.write("Time:" + t1 + " (μs) for each complementBiasedExponent\n");
  143. document.write("Time:" + t2 + " (μs) for each normalizeMax w/pow2CeilInvLog\n");
  144. document.write("Time:" + t3 + " (μs) for each normalizeMax w/call complementBiasedExponent\n");
  145. document.write("Time:" + t4 + " (μs) for each normalizeMax w/inline complementBiasedExponent\n");
  146. document.write((r0 === res && r1 === res && r2 === res && r3 === res && r4 === res ? "PASS" : "FAIL") + " Difference " + (t0 - t1) + " (μs) alone versus " + (t2 - t3) + " (μs) called or " + (t2 - t4) + " (μs) inlined in normalizeMax\n");
  147. </script></pre></body></html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement