2015-02-09 102 views
-1

我認爲他們在64位架構師上是一樣的。比較float比double更高效嗎?

例如我正在寫一個函數模板,我應該提供一個float和double的規範,還是我應該只提供一個規範需要一個double並讓其他數字自動轉換爲double?假設所考慮的唯一數字類型是float,double,int,long,unsigned int,unsigned long。

+1

這取決於體系結構,所以你需要指定 - x86,ARM或其他。 – sashoalm 2015-02-09 17:31:49

+2

即使在特定的架構上,也可以依賴於上下文。但即使使用'double',你也不能假設**轉換後的整數類型會給你相同的比較結果。 – 2015-02-09 17:32:15

+2

相關:[你什麼時候使用float,什麼時候使用double](http://programmers.stackexchange.com/questions/188721/when-do-you-use-float-and-when-do-you-use -double)[爲什麼雙精度優先於浮點數?](http://stackoverflow.com/questions/22818382/why-are-double-preferred-over-float) – Deduplicator 2015-02-09 17:32:42

回答

2

將浮點數與浮點數比較,將浮點數與雙精度浮點數或雙精度浮點數進行比較通常要麼相同,要麼略快,但差別通常不大。你可能會考慮的更大的性能問題是從float到double的轉換,這可能是免費或非常昂貴的,取決於它在哪裏以及如何完成。不管怎樣,真的不值得擔心太多,除非你已經分析並發現了一個涉及這個函數的巨大循環的瓶頸,在這種情況下,你可以自己測試性能差異並作出相應的反應。

+0

你能解釋一下什麼決定浮動的雙倍轉換成本?編譯器或硬件實現? – swang 2015-02-09 23:30:58

-3

最好的解決方案:使用模板化類型。這將自動使用提供的類型,並且所有速度優化都將由編譯器完成。

仍然不錯的解決方案:使用您想要支持的最大類型(通常爲longdouble),具有一個用於積分的函數和一個用於浮點類型的函數。

對積分類型使用浮點運算失去精度,應該避免。