下面的例子突出了一個陷阱相對於使用浮點數:調度事件時的時間是一個浮點值
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
該代碼輸出如下:
failed to schedule at 1.3
我沒預計這個錯誤,但我明白爲什麼會發生。爲了解決這個問題,我有哪些選擇?在我的代碼
一個補丁修復是:
available_again = 0.1*(i+1)
我想知道如果這是正確的路線。我的具體應用涉及事件的時間安排,事件發生的時間由複雜的數學函數決定,例如:sinc(2 * pi * f * t)。事件的持續時間會使事件相互重疊,在這種情況下,我需要通過不同的渠道發送事件。在我的代碼
可能聽起來很明顯,但我認爲唯一可靠的方法是使用整數(並將單位設置爲毫秒,微秒或其他)。也許你可以縮放複雜的時間戳並將它們用作整數(如int(1000 * sin(2 * pi * f * t)')? – jdehesa 2014-08-28 08:56:27