In zwei Worten: Kürzungsfehler.
Sie haben Recht, c sollte genau arithmetisch 1.0 sein. Da Sie jedoch in den Argumenten von rem einen Float verwendet haben, erhalten Sie die Antwort als Float. Anscheinend ist b nicht genau 2, sondern 2.0, was bedeutet, dass es ein Double sehr nahe bei 2 ist. Daher wird b / 2 die doppelte 1.0, anscheinend in diesem Fall ist sein Wert etwas kleiner als eins, was eine 0 als ergibt der ganzzahlige Wert Wenn Sie dies verhindern möchten, verwenden Sie sowohl Boden als auch Decke und vergleichen Sie die Werte.
Wenn Sie die Antwort in Integer umwandeln möchten, verwenden Sie einfach round statt floor.
Ja, das ist ein numerisches Problem. Sie sollten solche Dinge mit Vorsicht verwenden. Wenn Sie genaue Arithmetik wollen, sollten Sie versuchen, 'sym' für Ihre Nummer, z. B.
%Vor%Dann werden Sie keine solchen Fehler mehr haben, aber Ihre Berechnungen werden viel langsamer sein.
Tags und Links matlab floating-point precision number-rounding