Ich habe ein Programm in C ++ (kompiliert mit g ++). Ich versuche, zwei Doppelte als Operanden auf die Modulfunktion anzuwenden, erhalte jedoch den folgenden Fehler:
Fehler: Ungültige Operanden vom Typ 'double' und 'double' zum binären 'Operator%'
Hier ist der Code:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
fmod
zu unerwartetem Verhalten führen können. Zum Beispielfmod(1, 0.1);
sollte mathematisch Null sein, wird aber tatsächlich fast 0,1 sein. Das Ausmaß des Fehlers steigt mit der Größe des Quotienten. Zum Beispielfmod(9E14, 0.1);
ergibt sich ein Wert von ungefähr 0,05, was aus mathematischer Sicht einfach falsch ist.fmod(x,0.1)
dividiert x durch diesen genauen Bruch und nimmt den Rest, anstatt durch den numerischen Wert "ein Zehntel" zu dividieren.Antworten:
Der
%
Operator ist für ganze Zahlen. Sie suchen diefmod()
Funktion .quelle
angle
beispielsweise der Fall ist, werden359.9999999
beideangle
undfmod(angle, 360)
wahrscheinlich als angezeigt360
. (Fügen Sie nach Bedarf weitere 9s hinzu.) Versuchen Sie, die Werte beispielsweise mit einer Genauigkeit von 50 Stellen zu drucken.fmod(x, y)
ist die Funktion, die Sie verwenden.quelle
Verwenden Sie
fmod()
von<cmath>
. Wenn Sie die C-Header-Datei nicht einschließen möchten:quelle
Sie können Ihre eigene Modulfunktion implementieren, um dies für Sie zu tun:
Dann können Sie einfach verwenden
dmod(6.3, 2)
, um den Rest zu erhalten0.3
.quelle