MATLAB: Merkwürdigkeit bei Ganzzahl-Division

Gast #5629846
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?
Gast #5630363
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren