我已經讀過雙精度和單精度之間的區別。 可是,在大多數狀況下, float
和double
float
彷佛是可互換的,即,使用一個或另外一個彷佛不影響結果。 真的是這樣嗎? 花車和雙打什麼時候能夠互換? 它們之間有什麼區別? 算法
浮點數的精度低於雙精度數。 儘管您已經知道,但請閱讀有關浮點算法的知識,以更好地理解。 服務器
如下是C99標準(ISO-IEC 9899 6.2.5§10)或C ++ 2003(ISO-IEC 14882-2003 3.1.9§8)標準說: 數據結構
共有三種浮點類型:
float
,double
和long double
。double
類型至少提供與float
同樣高的精度,long double
類型至少提供與double
同樣高的精度。float
類型的值集是double
類型的值集的子集;double
類型的值集合是long double
類型的值集合的子集。 測試
C ++標準增長了: spa
浮點類型的值表示形式是實現定義的。 code
我建議看一看優秀的每位計算機科學家應該瞭解的關於浮點算法的知識 ,該算法深刻地涵蓋了IEEE浮點標準。 您將瞭解表示的詳細信息,而且將意識到在幅度和精度之間要進行權衡。 浮點表示的精度隨着幅度的減少而增長,所以-1和1之間的浮點數是精度最高的數字。 get
使用浮點數時,您不能相信本地測試將與在服務器端進行的測試徹底相同。 您的本地系統以及最終測試的運行環境和編譯器可能有所不一樣。 在某些TopCoder競賽中,我曾屢次看到此問題,尤爲是當您嘗試比較兩個浮點數時。 編譯器
浮點計算中涉及的數字大小不是最相關的東西。 相關的是正在執行的計算。 io
本質上,若是您正在執行計算而且結果是一個無理數或重複的小數,那麼當該數字被壓縮爲您使用的有限大小的數據結構時,將出現舍入錯誤。 因爲double是float大小的兩倍,所以舍入偏差會小不少。 編譯
測試可能專門使用了會致使這種錯誤的數字,所以測試了您在代碼中使用了適當的類型。