ubuntuusers.de

[PHP][GMP] Multiplikation von Deizimalzahlen

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Elinoy

Anmeldungsdatum:
2. Mai 2009

Beiträge: 345

Hallo,

Folgendes Problem. Für ein bisschen Matheprogrammierung verwende ich aktuell PHP in Verbindung mit der gmplib (Paketname unter Lucid: php5-gmp). Nun habe ich eine Funktion geschrieben, mit der ich Potenzen ausrechnen kann:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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 sagt mir:

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

Nexon

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4681

Wohnort: Berlin

Was meinst Du mit "Dezimalzahl"? Laut der Dokumentation will gmp_mul() als Argumente entweder eine "Ressource" haben, also in diesem Fall einen der Datentypen, welche die libgmp bereitstellt oder eine Zeichenkette die man als Zahl interpretieren kann.

Elinoy

(Themenstarter)

Anmeldungsdatum:
2. Mai 2009

Beiträge: 345

Ich meine damit, dass gmp_mul() super funktioniert, wenn ich z.B. gmp_mul('2','1') rechne, wenn ich aber z.B. gmp_mul('0.5','1') rechnen lasse, kommt null raus.

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Offensichtlich verwendet gmp_mul Ganzzahl-Arithmetik. Mal wieder ein Grund, warum schwache Typisierung Mist ist: eine ordentliche Programmiersprache hätte Dir das um die Ohren gehauen, PHP bringt einfach ein falsches Ergebnis.

Elinoy

(Themenstarter)

Anmeldungsdatum:
2. Mai 2009

Beiträge: 345

Ja, ich denke auch, dass das der Fehler ist. Ich verwende jetzt stattdessen BC Math - Bisher scheints damit zu klappen 😉

Antworten |