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
War es hilfreich?

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.

scroll top