closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

Mod in Avrco anders als in C



Lschreyer offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age:
Posts: 400
Registered: 02 / 2007
Private message
Subject: Mod in Avrco anders als in C  -  Posted: 22.11.2018 - 10:58   -  
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.
go down go up
Lschreyer offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age:
Posts: 400
Registered: 02 / 2007
Private message
Subject: Re: Mod in Avrco anders als in C  -  Posted: 22.11.2018 - 11:43   -  
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.
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5378
Registered: 03 / 2002
Homepage Private message
Subject: Re: Mod in Avrco anders als in C  -  Posted: 23.11.2018 - 14:24   -  
Soviel zu "C ist ja soooo portabel"
:angry5:
rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 10.12.2018 - 19:32