Beachten Sie, dass fmod nicht gleichwertig zu dieser Grundfunktion ist:
<?php
function modulo($a, $b) {
return $a - $b * floor($a/$b);
}
?>
weil fmod() einen Wert mit dem gleichen Vorzeichen zurück, wie $ ein. Mit anderen Worten, die floor() - Funktion ist nicht korrekt, da sie auf -INF anstatt auf Null gerundet wird.
Um fmod ($ a, $ b) der richtige Weg ist zu emulieren:
<?php
function fmod($a, $b) {
return $a - $b * (($b < 0) ? ceil($a/$b) : floor($a/$b)));
}
?>
Beachten Sie, dass beide Funktionen eine Division durch Null werfen, wenn $ b null ist.
Die erste Funktion Modulo() oben ist die mathematische Funktion, die für die Arbeit an zyklischen Strukturen (wie Kalander computions oder trignonometric Funktionen nützlich ist:
- fmod($a, 2*PI) returns a value in [0..2*PI) if $a is positive
- fmod($a, 2*PI) returns a value in [-2*PI..0] if $a is negative
- modulo($a, 2*PI) returns a value always in [0..2*PI) independantly of the sign of $a
Vielleicht sollten Sie angeben, wie Sie erwarten, dass eine Null behandelt wird? –
bitte bearbeiten und verbessern, ich fragte diese Frage als Referenz verwendet werden –
Akam, was passieren sollte, wenn eine Null auftritt, ist spezifisch für das Problem/Domäne. Wenn Sie ein Wiki erstellen, in dem Sie beschreiben, was diese Funktionen tun, gehen Sie darauf ein. –