[BraLUG] Ich brauche einen guten Algorithmus
A Zapletal
a.zapletal at gmail.com
Do Feb 7 22:49:55 CET 2008
> Also sagen wir einmal, dass in einer Minute die Zeitbasis 100ms zu
> schnell geht (was sich aber ändern kann... Temperatur etc.). Kleinste
> auflösbare Zeit in meinem Programm ist 1ms. Ziel ist es jetzt, diese
> 100ms gleichmäßig über eine Minute zu verteilen, also 40x 2ms und 20x
> 1ms die Sekunde zu verlängern. In diesem vereinfachten Fall müßte
> soetwas rauskommen 221221221221221....
Hi,
eigentlich müsste in obigem Bsp jede Sekunde um 100/60ms=5/3ms erhöht
werden (was natürlich nicht geht). Also nimmst Du die darin enthaltene
größte nat. Zahl (Integ.division) zum Erhöhen (hier 1ms) und merkst Dir
den Rest (hier 2/3ms), der noch "nachzuholen" ist.
Diesen Rest addierst Du im nächsten Sekundenzeitschrit zum
(Soll-)Erhöhungswert dazu 2/3ms+5/3ms=7/3ms, tatsächliche Erhöhung also
2ms, neuer Rest 1/3ms.
So geht das immer weiter, wir bekämen
122122122...
Du brauchst also nur Division- und Modulooperation und eine
Speicherzelle für den Rest.
Arnd
Mehr Informationen über die Mailingliste Bralug