MATLAB - Boden Frage
-
20-08-2019 - |
Frage
Ich bin ein Anfänger MATLAB. Hier ist das Problem:
>> a = floor(7/2.5)
a =
2.00
>> b = rem(7,2.5)
b =
2.00
>> c = floor(b/2)
c =
0
c sollte 1 sein, oder? Warum ist es 0 ???
Es ist anders, wenn b = 2 direkt eingegeben wird, wie folgt:
>> b = 2
b =
2.00
>> c = floor(b/2)
c =
1.00
Lösung
In zwei Worten:. Rundungsfehler
Du hast Recht, sollte c 1,0 in exakter Arithmetik sein. da Sie einen Schwimmer in den Argumenten von rem verwendet, erhalten Sie die Antwort als Schwimmer jedoch. Offenbar ist b nicht genau 2, aber 2,0, was bedeutet, dass es sich um eine Doppel ganz in der Nähe 2. Daher ist, b / 2 die Doppel 1,0 wird, offenbar in diesem Fall sein Wert ist etwas kleiner als eins, so dass Sie eine 0 als der ganzzahlige Wert. Wenn Sie dies verhindern wollen, sowohl Boden verwenden und ceil, und die Werte vergleichen.
Wenn Sie die Antwort auf ganze Zahl konvertieren möchten, nur statt Boden nutzen rund.
Andere Tipps
Wenn Sie die Zeile
d = b-a
zu Ihrem Beispiel Sie sehen das Ergebnis werden
d =
-4.4409e-016
Die Bedeutung Matlab eine Zahl nahe berechnet, aber nicht genau, 2 für b. Das kommt ziemlich viel in der Arbeit mit Gleitkommazahlen. Versuchen
help eps
für weitere Informationen.
Numerische Fragen dieser Art sind auch mit in der
Ja, das ist ein numerisches Problem. Sie sollten solche Dinge mit Vorsicht verwendet werden. Wenn Sie genaue Arithmetik wollen, sollten Sie ‚sym‘ für Ihre Zahl z versuchen. Dann werden Sie keine solche Fehler, aber Ihre Berechnungen werden viel langsamer. b=rem(sym(7),sym(2.5))