Martin: Kann man prüfen ob eine Zahl gerade ist?

Hallo,
kann ich mit javascript prüfen ob eine zahl ganz ist?
also nicht zahlen wie 3,456 sondern nur z.B. 2,45,3434

geht das?
bei den Math-Obejkten habe ich nichts gefunden.

MfG
Martin

  1. kann ich mit javascript prüfen ob eine zahl ganz ist?
    also nicht zahlen wie 3,456 sondern nur z.B. 2,45,3434

    Hi Martin,

    if ((DeineZahl/2) == 0) alert ("Die Zahl ist gerade");

    Gruß
    Hans-Peter

    1. Hallo,

      kann ich mit javascript prüfen ob eine zahl ganz ist?
      also nicht zahlen wie 3,456 sondern nur z.B. 2,45,3434

      Hi Martin,

      if ((DeineZahl/2) == 0) alert ("Die Zahl ist gerade");

      War wohl nix.

      if ((DeineZahl%2) == 0) alert ("Die Zahl ist gerade");
      ist besser, denn es funktioniert. Auch wenn der Unterschied nur die beiden kleinen Nullen am / sind ;-)

      Andreas

      1. if ((DeineZahl%2) == 0) alert ("Die Zahl ist gerade");
        ist besser, denn es funktioniert.

        Herrjeh, natürlich.

        Kennst Du den Effekt, dass Du "irgendwie" siehst, dass etwas totaler Quatsch ist, Dir aber ums Verrecken nicht einfällt warum ? Ist dass das Alter ? Sorry :-)

        Hans-Peter

        1. Kennst Du den Effekt, dass Du "irgendwie" siehst, dass etwas totaler Quatsch ist, Dir aber ums Verrecken nicht einfällt warum ? Ist dass das Alter ? Sorry :-)

          Ob daß das Alter ist?
          Kann ich nicht sagen, noch bin ich 35 Jahre *jung*.
          Frag in 2 Stunden 26 Minuten wieder, dann bin ich 36 Jahre *alt*...

          Andreas

          1. Hi Andreas,

            na denn, mittlerweile passt es ja: Herzlichen Glückwunsch zum Geburtstag!

            Grüße,

            Utz

            PS: Hat denn wirklich keiner außer mir diesen Wink mit dem Zaunpfahl bemerkt?

          2. ... zum Geburtstag, alles Gute und viele Ideen zum Wohle der Self-Gemeinde :-)

            Hans-Peter

            1. Danke Euch beiden!

              1. Hallo Andreas,

                Danke Euch beiden!

                Der Tag ist noch nicht rum;) Also herzlichen Glückwunsch. Wo steigt die Tour? Ich habe heute und morgen noch frei *G*. Du hättest Dir aber auch besseres Wetter aussuchen können, also wirklich ;) Außerdem heißt es 29G, ähem...

                jan

  2. Hallo,

    kann ich mit javascript prüfen ob eine zahl ganz ist?
    also nicht zahlen wie 3,456 sondern nur z.B. 2,45,3434

    var x=5;
    if(x % 2 != 0)alert("Die Zahl ist ungerade.");
    else alert("Die Zahl ist gerade.");

    % steht fuer den Mod(ulo)-Operator, der den Rest der ganzzahligen Division ermittelt. Geht die Division durch 2 auf, ist das Ergebnis gleich 0 und die Zahl ist gerade.

    MfG, Thomas

    1. Hallo!

      kann ich mit javascript prüfen ob eine zahl ganz ist?
      also nicht zahlen wie 3,456 sondern nur z.B. 2,45,3434

      var x=5;
      if(x % 2 != 0)alert("Die Zahl ist ungerade.");
      else alert("Die Zahl ist gerade.");

      % steht fuer den Mod(ulo)-Operator, der den Rest der ganzzahligen Division ermittelt. Geht die Division durch 2 auf, ist das Ergebnis gleich 0 und die Zahl ist gerade.

      Geht das genau so in PHP?`

      Grüße
      Andreas

      1. Hallo,

        Geht das genau so in PHP?

        Warum probierst Du es nicht?

        Analog waere:

        <?php

        $x=5;
        if($x % 2 != 0)print "Die Zahl ist ungerade.\n";
        else print "Die Zahl ist gerade.\n";

        ?>

        MfG, Thomas

        1. Hallo,

          Geht das genau so in PHP?

          Warum probierst Du es nicht?

          Da ich bei selbstversuchen schlecht Zufallstreffer auschließen kann!

          Analog waere:

          <?php

          $x=5;
          if($x % 2 != 0)print "Die Zahl ist ungerade.\n";
          else print "Die Zahl ist gerade.\n";

          ?>

          Grüße
          Andreas

          1. Hallo,

            Warum probierst Du es nicht?
            Da ich bei selbstversuchen schlecht Zufallstreffer auschließen kann!

            Hm, man kennt den Algorithmus, findet auch in PHP den Modulo-Operator vor und damit ist das doch jenseits von Zufall.

            MfG, Thomas

            1. Hallo!

              Hm, man kennt den Algorithmus,

              nicht wirklich

              findet auch in PHP den Modulo-Operator vor

              bis jetzt moch nicht

              und damit ist das doch jenseits von Zufall.

              Wenn dem so ist schon

              Ich finde in PHP(manual) irgendwie nur "höhere" mathematische Funktionen, wo stehen da die einfachen? Den Modulo-Operator kenn ich nämlich nur aus diesem Thread!

              Grüße
              Andreas

              1. Hallo,

                Hm, man kennt den Algorithmus,
                nicht wirklich

                Soweit waren wir doch bereits in der JavaScript-Antwort. Eine Zahl ist gerade, wenn sie ohne Rest durch 2 teilbar ist.

                Ich finde in PHP(manual) irgendwie nur "höhere" mathematische Funktionen, wo stehen da die einfachen? Den Modulo-Operator kenn ich nämlich nur aus diesem Thread!

                Keine Ahnung, wo Du suchst ;-). Im Manual unter Operatoren schauen und dann zu Bit-Operatoren verzweigen und schon bist Du hier gelandet: http://www.php.net/manual/de/language.operators.bitwise.php.

                MfG, Thomas

                1. Hallo,

                  [Nachtrag]

                  Der gefragte Modulo-Operator findet sich bei den arithmetischen Operatoren: http://www.php.net/manual/de/language.operators.arithmetic.php.

                  MfG, Thomas

  3. Hallo,

    [Nachtrag]

    Im Titel fragst Du nach gerader Zahl, aber im Text nach ganzer Zahl. Der erste Teil ist schon da, deshalb noch mal zum zweiten:

    var x=5;
    if(x==parseInt(x))alert("Ganze Zahl");
    else alert("keine ganze Zahl");

    bei x=5.1 kommt entsprechend der else-Zweig.

    MfG, Thomas

  4. Hallo,

    der Modulo-Operator wurde dir ja schon vorgestellt. Um festzustellen ob eine Zahl gerade ist oder nicht, reicht es aber auch aus, das erste Bit zu überprüfen. Ist es gesetzt, so handelt es sich um eine ungerade Zahl.

    if (zahl & 1)
      alert("ungerade");
    else
      alert("gerade");

    jan

    1. HI Jan,

      Um festzustellen ob eine Zahl gerade ist oder nicht, reicht es aber
      auch aus, das erste Bit zu überprüfen

      andere würden womöglich "das letzte Bit" dazu sagen - zumindest in
      Leserichtung der üblichen Binärdarstellung.

      Viele Grüße
            Michael

    2. Hallo zusammen

      if (zahl & 1)
        alert("ungerade");
      else
        alert("gerade");

      Welche der beiden Varianten ist performanter

      • Prüfung auf Modulo 2?
      • Prüfung auf das letzte Bit?

      Welcher Algorithmus läuft bei Modulo 2 in etwa ab?
      Welches sind die markanten Schritte in einer Modulo-Operation?

      Aus reiner Neugier ;-)

      Grüsse

      Eisbär

      1. Hallo Eisbär,

        Welche der beiden Varianten ist performanter

        • Prüfung auf Modulo 2?
        • Prüfung auf das letzte Bit?

        Das kommt natürlich wieder auf die Implementierung an - aber ich denke, die Variante mit dem Bit-Test ist die schnellere, wenn auch der Unterschied rein akademisch sein dürfte. Wahrscheinlich in der Ordnung von ein, zwei Taktzyklen (huii, das macht bei den heutigen Gigahertz-CPUs irgendwas im Nanosekundenbereich).

        Welcher Algorithmus läuft bei Modulo 2 in etwa ab?
        Welches sind die markanten Schritte in einer Modulo-Operation?

        Beim Modulo wird intern eine Division ausgeführt und statt dem Quotienten einfach der Divisionsrest genommen. Da heute - von einigen RISCs und µCs mal abgesehen - so ziemlich jede CPU von sich aus Integer-Divisionen unterstützt, ist der Zeitbedarf minimal. Und die Modulo-Operation ist eh nur für Ganzzahlen (also Integers) definiert. Streng mathematisch sogar nur für positive ganze Zahlen, obwohl viele Script Engines oder C-Runtimes die Operation auch hemmungslos mit negativen Zahlen ausführen. Was dabei rauskommt, ist allerdings nicht klar festgelegt.

        Aus reiner Neugier ;-)

        Ist deine Neugier damit befriedigt? *SCNR*

        Gruß,

        Martin

        1. Hallo Martin

          Welcher Algorithmus läuft bei Modulo 2 in etwa ab?
          Welches sind die markanten Schritte in einer Modulo-Operation?

          Beim Modulo wird intern eine Division ausgeführt und statt dem Quotienten einfach der Divisionsrest genommen. Da heute - von einigen RISCs und µCs mal abgesehen - so ziemlich jede CPU von sich aus Integer-Divisionen unterstützt, ist der Zeitbedarf minimal. Und die Modulo-Operation ist eh nur für Ganzzahlen (also Integers) definiert. Streng mathematisch sogar nur für positive ganze Zahlen, obwohl viele Script Engines oder C-Runtimes die Operation auch hemmungslos mit negativen Zahlen ausführen. Was dabei rauskommt, ist allerdings nicht klar festgelegt.

          Aber auch wenn die Division in einem Divisions-Modul der CPU vorgenommen wird, wird Sie doch merklich mehr Taktzyklen benötigen, da die Division die wahrscheinlich aufwendigste Grundoperation ist.
          Oder habe ich da was falsch verstanden?

          Aus reiner Neugier ;-)

          Ist deine Neugier damit befriedigt? *SCNR*

          Noch nicht ganz, auch wenn ich zugebe, dass die paar Takte bei irgenwelchen GHz-CPUs im Einzelfall vernachlässigbar sind ;-)

          Das Ganze erinnert mich aber an die Probleme bei der Implementation eine Langzahl-Bibliothek, wo die Division-Operationen mit die aufwändigsten in Bezug auf Codierung und Performance waren.

          Grüsse
          Eisbär

          1. Hi!

            Aber auch wenn die Division in einem Divisions-Modul der CPU vorgenommen wird, wird Sie doch merklich mehr Taktzyklen benötigen, da die Division die wahrscheinlich aufwendigste Grundoperation ist.

            Richtig. Beim 8086 brauchte eine Division etwa 80 bis 200 Takte, waehrend eine AND-Operation bei 2 Takten lag. Beim Pentium hat man eine Division schon auf etwa 10 oder 15 Takte gedrueckt, waehrend einfache Operationen wie AND oder auch Addition nur noch einen Takt brauchten, wobei dies durch Parallelisierung auch noch nach unten gedrueckt werden konnte. Wie es bei modernen CPUs ist, weiss ich nicht, aber ich denke, man kann schon davon ausgehen, dass eine Division nach wie vor viel aufwendiger ist.

            Das ganze bezieht sich auf Ganzzahldivisionen, die in der ALU der CPU erledigt werden. Fliesskommadivisionen werden in der FPU durchgefuehrt; fuer die gilt obiges nicht.

            So long

            --
            while (!asleep()) sheep++;

            1. Nochmal hallo miteinander,

              mit vollem Bauch denkt sich's zwar langsamer, aber trotzdem...

              Aber auch wenn die Division in einem Divisions-Modul der CPU vorgenommen wird, wird Sie doch merklich mehr Taktzyklen benötigen, da die Division die wahrscheinlich aufwendigste Grundoperation ist.

              [...] aber ich denke, man kann schon davon ausgehen, dass eine Division nach wie vor viel aufwendiger ist.

              Im Prinzip richtig. Aber - abracadabra: Schlaue C-Compiler erkennen schon im Quelltext, dass es sich beim Divisor um eine Konstante handelt. Wenn diese Konstante gar eine Zweierpotenz ist, codieren sie die Operation gar nicht mehr als Division, sondern als Schiebeoperation (z.B. bei Borland oder MS C-Compilern). Ob und in welchem Maß das auch auf Scriptsprachen zutrifft, kann ich allerdings nicht sagen.

              Das ganze bezieht sich auf Ganzzahldivisionen, die in der ALU der CPU erledigt werden. Fliesskommadivisionen werden in der FPU durchgefuehrt; fuer die gilt obiges nicht.

              Stimmt. Aber auch die FPU braucht für eine Division "relativ lange", soweit ich mich erinnere, so um die hundert-schlagmichtot Zyklen. Wieder ein Argument für die Programmierer, auf Integer- oder Festpunktarithmetik zu setzen, wo es möglich ist.

              Have a nice day,
                Martin

              while (!asleep()) sheep++;

              *lol* Der ist gut!

    3. Hallo!

      der Modulo-Operator wurde dir ja schon vorgestellt. Um festzustellen ob eine Zahl gerade ist oder nicht, reicht es aber auch aus, das erste Bit zu überprüfen. Ist es gesetzt, so handelt es sich um eine ungerade Zahl.

      Man, man, man - was ist das jetzt schon wieder? Was hat die Schreibweise unten mit Bits zu tun? Und was bedeutet & als Operator?

      Ist das wieder Sprachenübergreifend so?

      if (zahl & 1)
        alert("ungerade");
      else
        alert("gerade");

      Grüße
      Andreas

      1. Hallo,

        Man, man, man - was ist das jetzt schon wieder? Was hat die Schreibweise unten mit Bits zu tun? Und was bedeutet & als Operator?

        zahl & 1 prueft, ob das 2^0-Bit gesetzt ist, und wenn ja, dann ist die Zahl ungerade, weil alle anderen Potenzen von 2 zu geraden Zahlen fuehren und somit auch die Summe gerade ist.

        4=1*2^2+0*2^1+0*2^0 --> 10_0_
        5=1*2^2+0*2^1+1*2^0 --> 10_1_

        Ist das wieder Sprachenübergreifend so?

        Ja:

        <?php

        $x=5;
        if($x & 1)print "Ungerade Zahl\n";
        else print "Gerade Zahl\n";

        ?>

        MfG, Thomas

        1. HallO!

          zahl & 1 prueft, ob das 2^0-Bit gesetzt ist, und wenn ja, dann ist die Zahl ungerade, weil alle anderen Potenzen von 2 zu geraden Zahlen fuehren und somit auch die Summe gerade ist.

          Hm. ich dachte immer ich wäre gut in Mathematik, aber von solchen Sachen habe ich noch nie was gehört ;-)

          4=1*2^2+0*2^1+0*2^0 --> 10_0_
          5=1*2^2+0*2^1+1*2^0 --> 10_1_

          hab gerade im PHP - Manual http://www.php.net/manual/de/language.operators.bitwise.php  gefunden, mit Deiner Hilfe verstehe ich es glaube ich:

          Also würde ich mit Zahl & 2 prüfen ob 2^1 -bit gesetzt, aber in Wirklichkeit nutzt man nur aus, das in Bit-schreibweise 2 = 1*2^1+0*2^0 ist, oder? Somit wäre

          (3 & 2) wahr und
          (4 & 2) unwahr,

          oder?

          Danke Dir sehr, ohne Deine Erklärung hätte ich es wohl nicht verstanden!

          Grüße
          Andreas

  5. Hallo,
    ich möcht mich bei allen für ihre antworten bedanken.
    hätte nicht gemeint das das zu so einer regen diskussion ausartet.
    mein problem hab ich jetzt mit der parseInt() funktion gelöst.
    warum so kompliziert mit den mods wenns auch einfach geht?

    MfG
    Martin