Hallo,
ich benötige eine Funktion um mit großen Hochzahlen rechnen zu können.
pow($base,$exp) steigt leider zu schnell aus. Leider konnte ich keine direkte Lösung finden, hier also mein Vorschlag:
Gibt es eine Möglichkeit diese Funktion noch besser / leistungsfähiger umzusetzten?
ich benötige eine Funktion um mit großen Hochzahlen rechnen zu können.
pow($base,$exp) steigt leider zu schnell aus. Leider konnte ich keine direkte Lösung finden, hier also mein Vorschlag:
PHP-Code:
<?php
/*
Square and Multiply Algorithmus
*/
$base = 13;
$exp = 480;
echo sam($base,$exp); //7.5622055031668E+301
echo pow(13,480); //Inf
/*
berechnet base^exp
*/
function sam($base,$exp)
{
$res = $base;
if($exp == 0) return 1;
while ($exp != 0)
{
$res = $res * $res;//quadriert wird immer
$exp = $exp / 2; //exponent halbieren
(int)$exp; //Kommastellen absägen
if($exp % 2)
{
$res = $res * $base; //bei ungeradem Exponent mit der Basis multiplizieren
$exp--;//und eins vom Exponent abziehen
}
}
return $res;
}
Kommentar