Mod in Avrco anders als in C

Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 526
Registered: 02 / 2007
Subject:

Mod in Avrco anders als in C

 · 
Posted: 22.11.2018 - 09:58  ·  #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
Gender: n/a
Posts: 526
Registered: 02 / 2007
Subject:

Re: Mod in Avrco anders als in C

 · 
Posted: 22.11.2018 - 10:43  ·  #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
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Mod in Avrco anders als in C

 · 
Posted: 23.11.2018 - 13:24  ·  #3
Soviel zu "C ist ja soooo portabel"
:angry5:
rolf
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   66   80 · Page-Gen-Time: 0.026589s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI