Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Sep 2nd, 2011  |  syntax: PHP  |  size: 1.83 KB  |  views: 66  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. function intmul($x, $y)
  2. {
  3.         $o = 0;
  4.        
  5.         if ($x < $y) {
  6.                 $tmp = $y; $y = $x; $x = $tmp;
  7.         }
  8.        
  9.         while ($y) {
  10.                 if ($y & 0x01) $o += $x;
  11.                 if ($y & 0x02) $o += $x << 1;
  12.                 if ($y & 0x04) $o += $x << 2;
  13.                 if ($y & 0x08) $o += $x << 3;
  14.                 if ($y & 0x10) $o += $x << 4;
  15.                 if ($y & 0x20) $o += $x << 5;
  16.                 if ($y & 0x40) $o += $x << 6;
  17.                 if ($y & 0x80) $o += $x << 7;
  18.  
  19.                 $x <<= 8;
  20.                 $y >>= 8;
  21.                 $y &= 0x7FFFFFFF;
  22.         }
  23.        
  24.         return $o & 0xFFFFFFFF;
  25. }
  26.  
  27.  
  28. // an even faster version
  29.  
  30. function intmul($x, $y)
  31. {
  32.         return
  33.                 (($y & 0x00000001) ? ($x) : 0) +
  34.                 (($y & 0x00000002) ? ($x << 1) : 0) +
  35.                 (($y & 0x00000004) ? ($x << 2) : 0) +
  36.                 (($y & 0x00000008) ? ($x << 3) : 0) +
  37.                 (($y & 0x00000010) ? ($x << 4) : 0) +
  38.                 (($y & 0x00000020) ? ($x << 5) : 0) +
  39.                 (($y & 0x00000040) ? ($x << 6) : 0) +
  40.                 (($y & 0x00000080) ? ($x << 7) : 0) +
  41.                 (($y & 0x00000100) ? ($x << 8) : 0) +
  42.                 (($y & 0x00000200) ? ($x << 9) : 0) +
  43.                 (($y & 0x00000400) ? ($x << 10) : 0) +
  44.                 (($y & 0x00000800) ? ($x << 11) : 0) +
  45.                 (($y & 0x00001000) ? ($x << 12) : 0) +
  46.                 (($y & 0x00002000) ? ($x << 13) : 0) +
  47.                 (($y & 0x00004000) ? ($x << 14) : 0) +
  48.                 (($y & 0x00008000) ? ($x << 15) : 0) +
  49.                 (($y & 0x00010000) ? ($x << 16) : 0) +
  50.                 (($y & 0x00020000) ? ($x << 17) : 0) +
  51.                 (($y & 0x00040000) ? ($x << 18) : 0) +
  52.                 (($y & 0x00080000) ? ($x << 19) : 0) +
  53.                 (($y & 0x00100000) ? ($x << 20) : 0) +
  54.                 (($y & 0x00200000) ? ($x << 21) : 0) +
  55.                 (($y & 0x00400000) ? ($x << 22) : 0) +
  56.                 (($y & 0x00800000) ? ($x << 23) : 0) +
  57.                 (($y & 0x01000000) ? ($x << 24) : 0) +
  58.                 (($y & 0x02000000) ? ($x << 25) : 0) +
  59.                 (($y & 0x04000000) ? ($x << 26) : 0) +
  60.                 (($y & 0x08000000) ? ($x << 27) : 0) +
  61.                 (($y & 0x10000000) ? ($x << 28) : 0) +
  62.                 (($y & 0x20000000) ? ($x << 29) : 0) +
  63.                 (($y & 0x40000000) ? ($x << 30) : 0) +
  64.                 (($y & 0x80000000) ? ($x << 31) : 0) & 0xFFFFFFFF;
  65. }