Mailinglisten-Archive |
Hi! Thomas Wagner schrieb: > Daniel Jänecke wrote: > > weil modulo den rest bei einer division zurückgibt; also zB 5:2 = 2 Rest 1, > > also 5 % 2 = 1; wenn ich durch 1 teile, gibt's keinen Rest ... > Versteh ich nicht so ganz. > > Delphi und andere Sprachen geben mir bei 6.5 % 1 immer 0.5 zurück. > Sogar der Taschenrechner von Windows. > > Kann das Problem auch anders lösen, mich interessiert nur das warum und > wieso. Was ich nicht verstehe, ist, wieso man Modulo auf Werte vom Typ REAL anwenden will. Das ist eine Funktion, die den Rest einer Division ausgibt. Bei INT gibt es einen Rest, wenn das Ergebnis wieder INT sein soll. Damit ist 5 % 2 der Rest von 5\2 (Ganzzahldivision), also 1. Bei REAL ist der Rest immer Null, weil ich 7,5 / 3,2 = 2,34375 teilen kann und im Werteraum von REAL bleibt ein Rest von 0,0. Wie man sieht, ist Modulo für REAL-Werte ziemlich merkbefreit und man kann auf zwei Arten an das Problem rangehen: 1. Man definert REAL % REAL = 0. Das macht Sinn. 2. Man wandelt die Wert nach INT (runden oder abschneiden) und führt dann einen Modulo aus. Meiner Meinung nach weniger sinnvoll. Was macht der wunderbare Taschenrechner bei meinem Beispiel 7,5 % 3,2? Das Ergebnis ist: 1,1. Ist das Vorkommastellen und Nachkommastellen getrennt mit Modulo behandelt? Ich weiß es nicht, was da gerechnet wird. Aber es erreicht IMHO hohe Werte auf der nach oben offenen Merkbefreiungsskala... PHP scheint nach Methode 2 zu verfahren, denn dort ist 7,5 % 3,2 = 1. Gruß Oliver -- Oliver Fink NetUSE AG, Siemenswall, D-24107 Kiel, Germany Fon: +49 431 386435 00 -- Fax: +49 431 386435 99
php::bar PHP Wiki - Listenarchive