Forum: Digitale Signalverarbeitung / DSP / Machine Learning MATLAB: Merkwürdigkeit bei Ganzzahl-Division


von Mike (Gast)


Lesenswert?

Ich habe einen in Matlab entwickelten Ganzzahl-Algorithmus auf einen 
ARM-Cortex-Controller übertragen. Dabei fiel mir auf, dass die 
Rechenergebnisse von ARM und Matlab unterschiedlich sind. Der ARM (bzw. 
der C-Compiler) verhält sich so, wie ich das bei einer Integer-Division 
erwarte: Es wird nur der Ganzzahlanteil des Quotienten berechnet, ein 
eventueller Divisionsrest verworfen. 3/2 ergibt also 1. Dies ist 
äquivalent zu einem Abrunden auf die nächstniedrigere Ganzzahl.

Nicht so bei Matlab:
1
>> m = uint32(3);
2
>> n = uint32(2);
3
>> m/n
4
ans = 2

Matlab scheint also hier auf- statt abzurunden. Es sieht so aus, als ob 
hier tatsächlich kaufmännisch gerundet wird, denn z.B. 7/3 wird als 2 
berechnet.

Gibt es eine Möglichkeit, Matlab das "klassische" Abrunden beizubringen?

von Pogo (Gast)


Lesenswert?

Mike schrieb:
> Gibt es eine Möglichkeit, Matlab das "klassische" Abrunden beizubringen?
Ganzzahloperation auf dem Ergebnis?

Ich würde aber mal fragen, ob das nicht was faul ist. Das Verhalten ist 
mir so nicht bekannt.

MATLAB-Experten in the house?

von Felix U. (ubfx)


Lesenswert?

idivide(uint32(3), uint32(2))

Pogo schrieb:
> Ich würde aber mal fragen, ob das nicht was faul ist. Das Verhalten ist
> mir so nicht bekannt.

Das ist tatsächlich "working as intended"
https://de.mathworks.com/help/matlab/ref/rdivide.html?searchHighlight=division&s_tid=doc_srchtitle

: Bearbeitet durch User
von Mike (Gast)


Lesenswert?

> Das ist tatsächlich "working as intended"
> 
https://de.mathworks.com/help/matlab/ref/rdivide.html?searchHighlight=division&s_tid=doc_srchtitle

Vielen Dank, den Hilfetext muss man erst mal finden! Da steht der 
lapidare Hinweis:
> MATLAB® rounds the results when dividing integer data types.

Damit ist wohl das kaufmännische Runden gemeint.
idivide(m,n) liefert das aus der Computerwelt bekannte, in Richtung auf 
die Null gerundete Ergebnis. Umständlich, aber jetzt stimmen die 
Rechenergebnisse überein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.