2
我只是測試一個量化器類,我已經在一個項目中使用,並模擬一個相對精細粒度範圍的數字(用於量化到離散步驟的類),我做了一個For ... Next循環使用雙倍作爲遞增值。像這樣:這裏發生了什麼?!?對於d As Double = 0到1步驟0.01不精確?
For d As Double = 0 To 1 Step 0.01
' logic here
Next
的結果不是我想從我的預期量化,而且我抓傷我的頭了好一會兒試圖找出在我的量化邏輯是錯誤的。最後,我簡單地將循環所產生的數字轉儲出來,幾乎只是爲了它的地獄。令我非常驚訝的是,上面的循環並沒有以0.01的精確步長產生一系列數字。
這是我用過的循環:
For d As Double = 0 To 1 Step 0.01
Me.TextBox1.AppendText(d.ToString & vbCrLf)
Next
,這是它打印號碼清單:
0
0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.1
0.11
0.12
0.13
0.14
0.15
0.16
0.17
0.18
0.19
0.2
0.21
0.22
0.23
0.24
0.25
0.26
0.27
0.28
0.29
0.3
0.31
0.32
0.33
0.34
0.35
0.36
0.37
0.38
0.39
0.4
0.41
0.42
0.43
0.44
0.45
0.46
0.47
0.48
0.49
0.5
0.51
0.52
0.53
0.54
0.55
0.56
0.57
0.58
0.59
0.6
0.61
0.62
0.63
0.64
0.65
0.66
0.67
0.68
0.69
0.7
0.71
0.72
0.73
0.74
0.75
0.76
0.77
0.78
0.79
0.8
0.810000000000001
0.820000000000001
0.830000000000001
0.840000000000001
0.850000000000001
0.860000000000001
0.870000000000001
0.880000000000001
0.890000000000001
0.900000000000001
0.910000000000001
0.920000000000001
0.930000000000001
0.940000000000001
0.950000000000001
0.960000000000001
0.970000000000001
0.980000000000001
0.990000000000001
顯然,直到0.8,這是我所期待的,但在那之後。 。 到底是怎麼回事?將環路的上限從1增加到3,將在特定的時間間隔內顯示類似的不精確數字頻帶。我必須重寫循環到這樣的東西嗎?
Dim d As Double
For i As Integer = 0 To 100
d = i/100
' logic here
Next
我想說的是「精確」,用一個小數,但我只是表露無疑;) – Marc
感謝。我想我必須......但這真的讓我感到驚訝 - 特別是在這個規模上。我曾認爲雙打不會絆倒,直到低於這個數量級的數量級。 – d7samurai
@Marc - 出於某種原因,我從來沒有用過任何小數。將看看它們是否適合該法案。謝謝。 – d7samurai