2014-06-17 75 views
2

Swift Language Guide說:爲什麼Swift的默認值是雙浮點數?

Double表示一個64位浮點數。 浮點值必須非常大或特別精確時使用它。

Float表示32位浮點數。當 浮點值不需要64位精度時使用它。

但後來上:

夫特總是選擇Double推斷浮點數的類型時(而不是Float)。

這難道不是矛盾嗎?對於大多數浮點數不會有64位精度過高嗎?這是否意味着我應該明確定義Float數字,還是差別在實踐中並不重要?

+0

出於多種原因,Double是標量值的最佳選擇。首先,彩車真的不是很準確 - 添加0.01〜一筆一萬次,你會得到9865.其次,最現代化的處理器是64位的,使得它一樣快左右雙移動爲float。第三,在任何一種情況下,CPU都使用80位寄存器來執行它們的浮點數學運算 - 您不會通過使用浮點數來加快計算速度。對於3D遊戲,浮點數仍然是最好的,因爲它們最大限度地減少了內存使用量,同時最大限度地提高了內存複製速度和渲染速度 - 並非所有gfx卡都支持雙倍。 – AbePralle

回答

7

默認爲Double可保證類型推斷不會導致浮點精度錯誤。

默認爲Float會在某些情況下造成麻煩,所以我會說這是一個保守的選擇。

我沒有確鑿的數據來支持我的要求,但我懷疑這也是區別在性能上沒有理由如此重要。

0

爲什麼浮點數被推斷爲Double可能是由於:

1)許多其他語言如Java和Haskell推斷浮點如Double

2)Double,具有較高的精度,確保了精度不會丟失。他們已經決定保持精確度,而不是在使用Float時可能會看到的潛在性能改進(較低的內存)。