PHP Multiplikation von Dezimalzahlen mit GMPLib

xXNeXoNXx

Lt. Junior Grade
Registriert
Mai 2008
Beiträge
455
Hallo,

Folgendes Problem. Für ein bisschen Matheprogrammierung verwende ich aktuell PHP in Verbindung mit der gmplib. Nun habe ich eine Funktion geschrieben, mit der ich Potenzen ausrechnen kann:

Code:
function expon ($gz,$expn)
{
        if ($expn != 0)
        {
        $erg = $gz;
        for ($i=2;$i<=$expn;$i++)
        {
            $erg = gmp_mul($erg, $gz);
        }
        }
        else
        {
            $erg = 1;
        }
        return $erg;
}

Im Prinzip funktioniert diese Funktion auch gut. Sobald ich aber eine Dezimalzahl als Basis nehme, bekomme ich als Ergebnis immer "0" und das Logfile des Servers sagt mir:

Code:
PHP Warning:  gmp_mul(): Unable to convert variable to GMP - wrong type in $path/forward.php on line 5

Ganz offensichtlich kommt gmp_mul also nicht mit diesen Dezimalzahlen zurecht, es muss im GMP-Paket also eine andere Funktion für die Multiplikation von Dezimalzahlen geben. Eine Übersicht über die Funktionen gibt es hier. Oder mache ich einfach sonst irgendetwas falsch? Ich würde mich sehr über Hilfe freuen!

MfG
 
Inwiefern übergebe ich denn einen int? Wo gibt es denn bei PHP explizit integer? In der Dokumentation steht "numeric string", was ich auch übergebe.

Im übrigen führt ein

Code:
<?php
echo '0.5*0.5 = ".gmp_strval(gmp_mul('0.5','0.5'));
?>

auch zu einem Null-Ergebnis - Ohne Fehlermeldung des Servers. Die Fehlermeldung von weiter oben hat also wohl eine Andere Ursache.

MfG
 
xXNeXoNXx schrieb:
Inwiefern übergebe ich denn einen int? Wo gibt es denn bei PHP explizit integer?
in php gibt es explizit int, string, double, sowie resource, ... schließlich gibt es auch überprüfungen auf typen (===, !==), sowie is_int, is_string, is_double, ... weiterhin gibt es einen unterschied, ob du nun via .= strings verknüpft oder mittels += hochzählst. nur weil php die typen automatisch zuordnet, heißt es nicht, dass es typen nicht gibt. seit php 5 kann ich auch folgendes definieren:
Code:
function foo( int $a, int $b, string $c )
{
 # ...
}
wenn du hierbei falsche typen angibst, kommt genauso ein fehler zustande.
xXNeXoNXx schrieb:
In der Dokumentation steht "numeric string", was ich auch übergebe.
leider kann ichs nich testen, denn im xampp ist der gmp support nicht eingebaut. was passiert denn, wenn du das oben genannte beispiel ausführst? wenn selbst das nicht funktioniert, wird wohl irgendwas in der konfiguration/lib falsch sein und es nicht an php selbst liegen.
 
Zurück
Oben