Kann man prüfen ob eine Zahl gerade ist?
Martin
- javascript
0 Hans-Peter Rieger0 Thomas Meinike0 Andreas
0 Thomas Meinike0 jan0 Michael Schröpl0 Eisbär0 Andreas
0 Martin
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
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
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
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
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
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?
... zum Geburtstag, alles Gute und viele Ideen zum Wohle der Self-Gemeinde :-)
Hans-Peter
Danke Euch beiden!
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
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
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
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
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
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
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
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
Hallo,
[Nachtrag]
Der gefragte Modulo-Operator findet sich bei den arithmetischen Operatoren: http://www.php.net/manual/de/language.operators.arithmetic.php.
MfG, Thomas
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
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
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
Hallo zusammen
if (zahl & 1)
alert("ungerade");
else
alert("gerade");
Welche der beiden Varianten ist performanter
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
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
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
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++;
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!
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
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
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
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