mikrocontroller.net

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


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
>> m = uint32(3);
>> n = uint32(2);
>> m/n
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?

Autor: Pogo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Felix U. (ubfx)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Mike (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.