Mod in Avrco anders als in C

Lschreyer
Schreiberling
Avatar
Geschlecht: keine Angabe
Beiträge: 527
Dabei seit: 02 / 2007
Betreff:

Mod in Avrco anders als in C

 · 
Gepostet: 22.11.2018 - 10:58 Uhr  ·  #1
Ich habe in den letzten Tagen eine C-Library nach Pascal übersetzt, und habe sehr lange nach einem Fehler gesucht, es wollte einfach nicht funktionieren. Es stellt sich dann heraus, dass es an einer Berechnung lag, die MODULO verwendet.

In C stand da so etwas wie x=a mod m wobei m auch negativ werden konnte. Da lag der Haken.

Laut Wikipedia gibt es da zwei Varianten, die mathematische und die symmetrische Modulo-Funktion.
C verwendet die symmetrische Variante die a mod m so berechnet: x = a - m(a div m)
Das klappt dann auch mit negativem M. Alle Onlinerechner rechnen so, der Windows-Rechner aber nicht, der macht es wie Avrco.

In C: 5 mod -1 = 0
In C: 5 mod -2 = -1
In C: 5 mod -3 = -1
In C: 5 mod -4 = -3
In C: 5 mod -5 = 0

In Avrco: 5 mod -1 = 0
In Avrco: 5 mod -2 = 1
In Avrco: 5 mod -3 = 2
In Avrco: 5 mod -4 = 1
In Avrco: 5 mod -5 = 0

Avrco macht aus m also ABS(m).

Der Erfolg war, dass sich ein Zähler dann hoch statt heruntergezählt hat, was jedesmal in einen Überlauf mündete. Dank des Hardwaredebuggers konnte ich das nach langem Probieren irgendwann heraus finden.

Das ist eine böse Falle, die vielleicht im Handbuch/Hilfe erwähnt werden sollte wenn es mal wieder aktualisiert wird.
Lschreyer
Schreiberling
Avatar
Geschlecht: keine Angabe
Beiträge: 527
Dabei seit: 02 / 2007
Betreff:

Re: Mod in Avrco anders als in C

 · 
Gepostet: 22.11.2018 - 11:43 Uhr  ·  #2
Ich habe gerade mal eine Reihe von Compilern durchprobiert, die meisten rechnen wie Avrco, was wohl die übliche Art und Weise ist. Java gibt negative Ergebnisse, was wohl auch die Onlinerechner verwenden. Schräge Sache. Avrco rechnet daher wohl korrekt, der vom lib-Schreiber verwendete wohl anders. War wohl IAR wie es scheint.

Bei https://www.codechef.com/ide kann man übrigens alle möglichen Compilter testen, einfach zwar aber in diesem Fall nützlich.
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: Mod in Avrco anders als in C

 · 
Gepostet: 23.11.2018 - 14:24 Uhr  ·  #3
Soviel zu "C ist ja soooo portabel"
:angry5:
rolf
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 14 · Cache Hits: 14   66   80 · Page-Gen-Time: 0.028447s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI