function bcroot($冪, $指數 = '3', $scale = 0){ #開方 if($冪 == '0'){ return '0'; }elseif($冪 == '1'){ return '1'; } $底擴位 = strval($scale +1); $冪擴位 = bcmul($指數,$底擴位); $冪 = bcmul($冪,bcpow('10',$冪擴位)); $小數點位 = strpos($冪,'.'); if($小數點位 !== FALSE){ $冪 = substr($冪,0,$小數點位); } $冪長 = strlen($冪); $底數長 = ceil($冪長 / intval($指數)); $底數 = ''; for($i=0;$i<$底數長;$i++){ for($j=0;$j<10;$j++){ $新數 = $底數.strval($j); $新數 = str_pad($新數,$底數長,'0'); $新冪 = bcpow($新數,$指數); $比較 = bccomp($冪,$新冪); if($比較 == 1){ #冪大 if($j == 9){ $底數 .= '9'; } }elseif($比較 == -1){ #新冪大 $底數 .= strval($j -1); break; }else{ #相等 $底數 = $新數; break 2; } } } $底數 = bcdiv($底數,bcpow('10',$底擴位),$scale); return $底數; }