L'exemple suivant met en évidence un écueil en ce qui concerne l'utilisation des nombres à virgule flottante:Planification d'événements lorsque le temps est une valeur en virgule flottante
available_again = 0
for i in range(0,15):
time = 0.1*i
if time < available_again:
print("failed to schedule at " + str(time))
available_again = time + 0.1
Ce code produit les éléments suivants:
failed to schedule at 1.3
Je n'étais Je ne m'attends pas à cette erreur, mais je comprends pourquoi cela se produit. Quelles options ai-je pour résoudre ce problème?
Une solution dans mon code serait:
available_again = 0.1*(i+1)
Je me demande si cela est la bonne voie. Mon application particulière implique la planification d'événements où l'heure à laquelle les événements se produisent est dictée par des fonctions mathématiques complexes, par exemple: sinc (2 * pi * f * t). La durée des événements sera telle que les événements peuvent se chevaucher, auquel cas je devrai les envoyer sur des canaux séparés.
Cela peut paraître évident, mais je pense que la seule façon fiable d'y parvenir est d'utiliser des entiers (et de définir l'unité en millisecondes, en microsecondes ou autre). Peut-être pouvez-vous redimensionner vos horodatages complexes et les utiliser comme des entiers (comme 'int (1000 * sin (2 * pi * f * t)')? – jdehesa