Advertisement
nzisaacnz

Massive Multiplication

Jul 4th, 2013
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 1.67 KB | None | 0 0
  1. <!-- if, for some reason, you ever wanted super precise unlimited multiplication, then here you have it -->
  2. <!-- only limited to where the carry over is greater than 9007199254740992 -->
  3. <!-- I think your computer would've ran out of memory by then -->
  4.  
  5. <!-- Actually on second thought, the stack would overflow far sooner than reaching an actual limit -->
  6. <script>
  7. function MShift(res,i,j)
  8. {
  9.  var dy=0,dx=0;
  10.  if(j>0)dx=1;
  11.  else if(i>0) dy=1;
  12.  else return;
  13.  var rem = res[i][j]%10;
  14.  var car = (res[i][j]-rem)/10;
  15.  res[i-dy][j-dx]+=car;
  16.  res[i][j]=rem;
  17.  if(res[i-dy][j-dx]>9)MShift(res,i-dy,j-dx);
  18. }
  19. function Multiply(a,b)
  20. {
  21.  a=a.toString();
  22.  b=b.toString();
  23.  var adot = a.length-a.indexOf(".")-1;
  24.  var bdot = b.length-b.indexOf(".")-1;
  25.  if(adot==a.length)adot=0;
  26.  if(bdot==b.length)bdot=0;
  27.  var dotpos = adot+bdot;
  28.  a = a.replace(/\./g,"");
  29.  b = b.replace(/\./g,"");
  30.  var al=a.length;
  31.  var bl=b.length;
  32.  if(al==0||bl==0)return NaN;
  33.  var res = [];
  34.  for(var i=0; i<al; i++)
  35. {
  36.  res[i] = [];
  37.  for(var j=0; j<bl; j++)
  38.  {
  39.   res[i][j] = a[i]*b[j]+(i>0&&j<bl-1?res[i-1][j+1]:0);
  40.    if(res[i][j]>9)MShift(res,i,j);
  41.   }
  42.  }
  43.  for(var i=0; i<al-1; i++)
  44. {
  45.  res[i] = res[i][0];
  46. }
  47. var ret = res.toString().replace(/,/g,"");
  48. if(dotpos>0)ret = ret.substring(0,ret.length-dotpos)+"."+ret.substring(ret.length-dotpos);
  49.  return ret;
  50. }
  51. function doMult()
  52. {
  53.  var left = document.getElementById("left");
  54.  var right = document.getElementById("right");
  55.  var out = document.getElementById("out");
  56.  out.innerHTML = Multiply(left.value,right.value);
  57. }
  58. </script>
  59. <input id="left" oninput="doMult()" /> x <input id="right" oninput="doMult()" /> = <span id="out"></span>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement