[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