2015-09-10 55 views
0
for(float i=1; i<=1.5; i+=0.1) 
{ 
    // statements 
} 

上面的C++ for循環運行5次。不應該運行6次?如何解決C++中的循環?

+0

您需要閱讀http://floating-point-gui.de/ –

+0

如果您將1.3表示爲「0.33333333」,您必須從1減去1/3,然後小於或等於零? –

回答

0

正是由於0.1倍數不能準確二進制提出,並存儲的實際值是近似的,可能是略低於0.1。因此,5*0.1可能小於0.5或者可能更多(取決於如何表示浮點值)。

通常使用浮點變量(以及涉及浮點值的等式或不等式的測試)來控制循環通常是一個非常糟糕的主意。影響可能包括運行更多(或更少)預期的時間,或者 - 在某些不好的情況下 - 預計有限次數運行的無限循環。

在你的情況,你會過得更好做這樣的事情

for (int i = 0; i < 5; ++i) 
{ 
    float value = 1.0 * i*0.1; 
     // use value here rather than the i in your original code 
} 

或者,你可以使用一些測試,允許浮點不精確(如比較i - 1.5一些值,比如機器精度) 。與此相關的是,迭代的實際數量仍然可能具有某種程度的不可預測性,特別是在涉及大量迭代的循環中(例如從1.050000.00.01的步驟迭代),因爲舍入誤差可以累積或抵消在循環過程中的不同階段。