如何知道一个数字是否为无理数(无穷大)


How to know if a number is irrational (infinite)

我创建了一个函数来检查一个数字是否无理:

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

但当有像sqrt(1194739201)这样的大数字时,它就不起作用了,它会返回0
你有没有一个想法或者确实存在一个更好的功能?

is_infinite()

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

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

从上面的评论中,您正在寻找一种计算数学精确平方根的方法。这个问题属于符号计算领域,不能用浮点运算来解决。下面是一个(故意简化的)如何象征性地取平方根的例子:

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=23×32

然后,将每个幂除以二,这就给出了根的合理部分:

462=21×31×71

剩余部分(1和0)形成无理部分

26=21×30