Advertisement
Guest User

Untitled

a guest
Sep 2nd, 2011
568
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.83 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement