Nicole: MODULUS ARBEITET FALSCH

Hallo erst mal ;-)

Ich versuche gerade etwas zu schreiben aber dann kommt:
Posting unsauber ???

  1. Hallo erst mal ;-)

    Ich versuche gerade etwas zu schreiben aber dann kommt:
    Posting unsauber ???

    Darf anscheinend keine 3 Fragezeichen im Betreff angeben, kurios.

    Also hier nun mein Problem:

    Hallo erst mal ;-)

    Ich nutze gern, vor allem in Schleifen,
    den Modulus wert.

    Jetzt fiel mir auf, dass dieser nicht korrekt arbeitet
    ab einer gewissen Grösse.
    12345678900 % 12345678800
    ERGEBNISS SOLLTE 100 sein !!!IST ES ABER NICHT!"

    Kennt jemand das Problem ?
    <?PHP
    echo $modulus=(123456789 % 123456780);
    echo "  => ERGEBNISS SOLLTE 9  sein !";
    echo "<br>";
    echo $modulus=(1234567890 % 1234567880);
    echo "  => ERGEBNISS SOLLTE 10  sein !";
    echo "<br>";
    echo $modulus=(12345678900 % 12345678800);
    echo "  => ERGEBNISS SOLLTE 100 sein !!!IST ES ABER NICHT!";
    echo "<br>";
    ?>
    Vielleicht liegts ja auch an meiner alten PHP Version 4.03

    Gruss Nikki

    1. Vielleicht liegts ja auch an meiner alten PHP Version 4.03

      Gruss Nikki

      Liegt an PHP allgemein. Du kannst Mod nur auf integer anwenden. Leider haben die PHP-Entwickler versäumt eine Typenumwandlung vor zunehmen, wenn Zahlen größer als integer berrechnet werden. Da kommst du um einen Workaround nicht herum.

      Grüße

      Robi

      1. Hallo Nicole, hallo Robi

        Liegt an PHP allgemein. Du kannst Mod nur auf integer anwenden. Leider haben die PHP-Entwickler versäumt eine Typenumwandlung vor zunehmen, wenn Zahlen größer als integer berrechnet werden. Da kommst du um einen Workaround nicht herum.

        :-) den gibt es schon.

        http://www.php.net/manual/de/ref.bc.php bzw. für das aktuelle Problem http://www.php.net/manual/de/function.bcmod.php

        Viele Grüße

        Antje

        1. Hallo Nicole, hallo Robi

          Liegt an PHP allgemein. Du kannst Mod nur auf integer anwenden. Leider haben die PHP-Entwickler versäumt eine Typenumwandlung vor zunehmen, wenn Zahlen größer als integer berrechnet werden. Da kommst du um einen Workaround nicht herum.

          :-) den gibt es schon.

          http://www.php.net/manual/de/ref.bc.php bzw. für das aktuelle Problem http://www.php.net/manual/de/function.bcmod.php

          Viele Grüße

          Antje

          Hab ich dann auch gefunden. Trotzdem danke ;)

    2. Hallo Nicole,

      Darf anscheinend keine 3 Fragezeichen im Betreff angeben, kurios.

      Nunja, nach der Deutschen Rechtschreibung sollte nur ein Fragezeichen nach einer Frage stehen.

      Vielleicht liegts ja auch an meiner alten PHP Version 4.03

      Nein. Bei PHP 4.3.0 bei mir ist dem auch so. In Perl und in C passiert das nicht, daher ist das kein Überlaufproblem, zumindest nicht vom Betriebsystem her. Scheint ein Bug zu sein. Melde ihn bitte, dann ist er vielleicht in der nächsten Version korrigiert. Bis dahin kannst Du diese Funktion verwenden:

      function modulus ($zahl, $divisor) {
        while ($zahl > $divisor)
           $zahl -= $divisor;
        return $zahl;
      }

      Viele Grüße,
      Christian

      1. Vielen Dank Christian,
        zuviel des Guten ;-)

        Habe natürlich auch schon eine func. geschrieben,
        aber wollte wissen ob es wirklich an PHP liegt.

        function fmodulus($num,$mod){
        $x=floor(($num/$mod));  // 13/5=2 13-(2*5)=3
        $modulus=($num -($x*$mod));
        return $modulus;
        }

        function modulus ($zahl, $divisor) {
          while ($zahl > $divisor)
             $zahl -= $divisor;
          return $zahl;
        }

        Gruss Nikki