如何知道数字是否不合理(无限)

时间:2014-10-20 08:52:35

标签: php numbers infinity

我创建了一个检查数字是否不合理的函数:

function Verifie_infini($value) {
    if(strlen(substr(strrchr($value, "."), 1))>= 10) {
        return 1;
    } else {
        return 0;
    }
}

但是当有大量数据时它不起作用:sqrt(1194739201)它会返回0 你有想法还是确实存在更好的功能?

2 个答案:

答案 0 :(得分:4)

is_infinite()

  

如果val为无穷大(正或负),则返回TRUE,如   log(0)的结果或任何太大而无法放入浮点数的值   平台。

if(is_infinite($number))
{
  #your code
}

答案 1 :(得分:1)

从上面的评论中,您正在寻找一种计算数学上精确平方根的方法。此问题属于symbolic computation的域,无法通过浮点操作解决。这是一个(故意简化的)如何象征性地取平方根的例子:

function factorize($n) {
    $factors = array();
    $p = 2;
    while($n > 1) {
        if($n % $p == 0) {
            $factors[$p]++;
            $n = intval($n / $p);
        } else $p++;
    }
    return $factors;
}

function symbolic_root($n) {
    $rat = $irr = 1;
    foreach(factorize($n) as $prime => $power) {
        $rat *= pow($prime, intval($power / 2));
        $irr *= pow($prime, intval($power % 2));
    }
    if($irr == 1) return $rat;
    if($rat == 1) return "sqrt $irr";    
    return "$rat * sqrt($irr)";
}

echo symbolic_root(1522756), "\n"; # prints "1234"
echo symbolic_root(5549544), "\n"; # prints "462 * sqrt(26)"

对那些好奇的解释:

首先,我们将数字计入主要权力:

  

5549544 = 2 3 ×3 2 ×7 2 ×11 2 ×13 1功能

然后,将每个权力除以2,这给了我们根的合理部分:

  

462 = 2 1 ×3 1 ×7 1 ×11 1 ×13 0功能

和休息(1s和0s)构成了不合理的部分

  

26 = 2 1 ×3 0 ×7 0 ×11 0 ×13 1功能