[BraLUG] Ich brauche einen guten Algorithmus

Reinhold BraLUG at aedon-its.de
Do Feb 7 23:07:34 CET 2008


A Zapletal wrote:
>> 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.

Auch eine Variante, aber IMHO denke ich, dass mit meinem Vorschlag die
Sache ohne Division und zusätzlicher Speicherzelle zu lösen ist.
Einfach immer 2ms addieren, ausser die Abfrage auf <Sekunde> mod 3
ergibt 0, dann nur 1ms.

Reinhold




Mehr Informationen über die Mailingliste Bralug