예제 #1
0
 /**
  * Calculate the Hamming Distance.
  *
  * @param int $hash1
  * @param int $hash2
  */
 public function distance($hash1, $hash2)
 {
     if (extension_loaded('gmp')) {
         $dh = gmp_hamdist("0x{$hash1}", "0x{$hash2}");
     } else {
         $hash1 = hexdec($hash1);
         $hash2 = hexdec($hash2);
         $dh = 0;
         for ($i = 0; $i < 64; $i++) {
             $k = 1 << $i;
             if (($hash1 & $k) !== ($hash2 & $k)) {
                 $dh++;
             }
         }
     }
     return $dh;
 }
예제 #2
0
 /**
  * Calculate the Hamming Distance.
  *
  * @param int $hash1
  * @param int $hash2
  */
 public function distance($hash1, $hash2)
 {
     if (!is_numeric($hash1) or !is_numeric($hash2)) {
         throw new UnexpectedValueException();
     }
     if (extension_loaded('gmp')) {
         $dh = gmp_hamdist(sprintf("0x%x", $hash1), sprintf("0x%x", $hash2));
     } else {
         $dh = 0;
         for ($i = 0; $i < 64; $i++) {
             $k = 1 << $i;
             if (($hash1 & $k) !== ($hash2 & $k)) {
                 $dh++;
             }
         }
     }
     return $dh;
 }
예제 #3
0
<?php

var_dump(gmp_hamdist(1231231, 0));
var_dump(gmp_hamdist(1231231, -1));
var_dump(gmp_hamdist(1231231, "8765434567897654333334567"));
var_dump(gmp_hamdist(-364264234, "8333765434567897654333334567"));
$n = gmp_init("8765434567");
$n1 = gmp_init("987654445678");
var_dump(gmp_hamdist($n, "8333765434567897654333334567"));
var_dump(gmp_hamdist($n, $n));
var_dump(gmp_hamdist($n, $n1));
var_dump(gmp_hamdist($n, $n1, 1));
var_dump(gmp_hamdist($n, array()));
var_dump(gmp_hamdist(array(), $n));
var_dump(gmp_hamdist(array(), array()));
var_dump(gmp_hamdist());
echo "Done\n";
예제 #4
0
파일: mostInOne.php 프로젝트: badlamer/hhvm
$b = gmp_init(21);
$g = gmp_gcd($a, $b);
$r = gmp_gcdext($a, $b);
$check_gcd = gmp_strval($g) == gmp_strval($r['g']);
$eq_res = gmp_add(gmp_mul($a, $r['s']), gmp_mul($b, $r['t']));
$check_res = gmp_strval($g) == gmp_strval($eq_res);
if ($check_gcd && $check_res) {
    $fmt = "Solution: %d*%d + %d*%d = %d\n";
    printf($fmt, gmp_strval($a), gmp_strval($r['s']), gmp_strval($b), gmp_strval($r['t']), gmp_strval($r['g']));
} else {
    echo "Error while solving the equation\n";
}
// gmp_hamdist
$ham1 = gmp_init("1001010011", 2);
$ham2 = gmp_init("1011111100", 2);
echo gmp_hamdist($ham1, $ham2) . "\n";
echo gmp_popcount(gmp_xor($ham1, $ham2)) . "\n";
// gmp_init (although that's probably tested well by now)
var_dump($a = gmp_init(123456));
var_dump($b = gmp_init("0xFFFFDEBACDFEDF7200"));
// gmp_intval
echo gmp_intval(PHP_INT_MAX) . "\n";
echo gmp_intval(gmp_add(PHP_INT_MAX, 1)) . "\n";
echo gmp_intval(gmp_sub(PHP_INT_MAX, 1)) + 1 . "\n";
echo gmp_strval(gmp_add(PHP_INT_MAX, 1)) . "\n";
// gmp_invert
echo gmp_invert("5", "10");
// no inverse, outputs nothing, result is FALSE
$invert = gmp_invert("5", "11");
echo gmp_strval($invert) . "\n";
// gmp_jacobi
예제 #5
0
 /**
  * Calculate the Hamming Distance.
  *
  * @param int $hash1
  * @param int $hash2
  * @return int
  */
 public function distance($hash1, $hash2)
 {
     if (extension_loaded('gmp')) {
         if ($this->mode === self::HEXADECIMAL) {
             $dh = gmp_hamdist('0x' . $hash1, '0x' . $hash2);
         } else {
             $dh = gmp_hamdist($hash1, $hash2);
         }
     } else {
         if ($this->mode === self::HEXADECIMAL) {
             $hash1 = hexdec($hash1);
             $hash2 = hexdec($hash2);
         }
         $dh = 0;
         for ($i = 0; $i < 64; $i++) {
             $k = 1 << $i;
             if (($hash1 & $k) !== ($hash2 & $k)) {
                 $dh++;
             }
         }
     }
     return $dh;
 }