Problem mit großen Zahlen

OP #1867181
Lesenswert?

Hallo,

ich habe ein Problem mit avr-gcc und dem Umgang mit großen Zahlen.

Ich muss einen Wert den ich in Sekunden besitze in Stunden umwandeln und 
auf einem Display ausgeben.
Soweit, so gut.

Die Sekunden liegen mir in bis zu vier Hex-Werten vor.
Der maximale Wert ist jeweils 0xFF

Die Werte lassen sich auch einfach zusammentüddeln:

wert1*0x01 + wert2*0x100 + wert3*0x10000

nur spätestens da wird die geschichte ziemlich groß.
Dann muss das ganze noch durch 3600 (0xE10) geteilt werden, damit ich 
meine Stunden hab.

Und wenn ich versuche das ganze auf nem Display mit sprintf auszugeben, 
darf meine variable nicht größer als uint16 sein.

Also wie stelle ich das am besten an?
Moderator (Firma: Titel) Persönliche Seite #1867205
Lesenswert?

Phil J. schrieb:
> Und wenn ich versuche das ganze auf nem Display mit sprintf auszugeben,
> darf meine variable nicht größer als uint16 sein.
Das wären doch immerhin 65535 Stunden...

> Also wie stelle ich das am besten an?
Ich vermute mal, dass dein Ansatz irgendwie verkorkst ist.
Poste mal deinen Code und sag dort, wo es klemmt...
Gast #1867232
Lesenswert?

Sekundenzähler als unsigend long und dann für die
Stunden durch 3600 teilen. Den Wert auf uint16 prüfen (wenn wichtig
"überlauf" auswerten) und dann in uint16 casten.
Wie Lothar bereits schrieb sind dann halt "nur" max.65535 Stunden.
#1867237
Lesenswert?

und wiveiel Stellen hinter dem Komma sollen es sein? wenn es nicht 100% 
genau sein soll, dann könnte man Wert1 ignorieren, nur noch wert2*0x01 + 
wert3*0x0100... machen und auch nur durch (3600/256) teilen statt durch 
3600. Dann hätte man beim Zwischenschritt der Gesamtsekunden schonmal 
eine Größenordnung weniger...

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