我有一個很大的公式,必須計算大約每秒300次。我的大部分變量都是浮點數,但有些變量只是進入該公式的參數。在某些情況下,不需要浮動。我可以使用int參數。但是我想知道在計算中混合int和float類型是否會導致系統轉換類型,而不是保存性能。在大型計算中只使用float而不是混合float和int會更好嗎?
回答
要小心假設int操作始終比float操作快。在隔離他們可能是,但moving data between a float register and an int register is shockingly slow on modern processors。所以一旦你的數據在一個浮點數上,你應該把它保留在一個浮點上以便進一步計算。
首先,是的,系統會轉換變量,以便它可以在通用基類型中進行計算。其次,這不是你應該最擔心的,除非你已經對你的程序進行了基準測試,並且你知道這是你的瓶頸。
只是爲了澄清的第一部分,不過,如果你有
double a = 10.0;
int b = 5;
int c = 2;
和公式是
double d = a + (b/c);
,我知道會用整數數學在這裏他們可以最系統,爲在這種情況下除法運算,然後在需要的地方切換到浮點運算。簡而言之,整數和浮點數學之間的決定是在操作員級完成的。
我想說這取決於什麼是對你更重要。在性能方面,最好使用float作爲它,你不會投入整數次(每秒約300次;))。
如果它是在你的代碼中經常使用的東西,那麼你可以關心它,否則不需要實現任何改變。如果您還沒有聽說或閱讀「The Fallacy of Premature Optimisation」,現在這樣做可能會對您有所幫助。規則是20%的代碼需要80%的性能。
我懷疑有很好的經驗法則。它可能很大程度上取決於處理器,編譯器以及您正在執行的操作的特定組合。設置一個計時器,在計算之前和之後運行,並進行各種調整並查看哪些運行速度更快。
原則上,從float到int的轉換經常會讓你放慢速度,因爲需要額外的指令來做到這一點,但實際上唯一的方法是測量。查看各種變化的彙編器轉儲可以幫助您獲得良好的直覺,但即使如此,處理器也可能以流水線方式,甚至以非明顯的方式對指令進行重新排序。
另外,一定要調查海灣合作委員會的浮點優化開關,並確保您使用最好的你。
取決於...結果的正確性對您而言很重要嗎?
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int x = 5;
int y = 2;
float z = 12.3f;
float result = z + (x/y);
printf("%f\n", result);
result = z + ((float) x)/y;
printf("%f\n", result);
return EXIT_SUCCESS;
}
C:\Temp> t
14.300000
14.800000
做什麼會給你正確的結果。
- 1. 不使用float的好處是:對嗎?
- 2. ANTLR將INT與FLOAT混合在一起
- 3. 在uint32_t計算中轉換爲float float
- 4. is if(float> int)if(float>(float)int)?
- 5. 加載128位混合float + int數據?
- 6. 計算值類型(int,float,string)使用通用方法的C#中的大小
- 7. always int int = float float in python
- 8. 在通信緩衝區中混合int和float
- 9. 使用組聚合時,數據類型從Int更改爲Float
- 10. 我可以使用泛型float []和int []嗎?
- 11. Python不會用float覆蓋int
- 12. Float Division計算器
- 13. 爲什麼python statistics.mean()返回一個int類型,而不是float
- 14. 爲什麼Vector2(來自XNA的庫)使用float而不是int?
- 15. 爲什麼使用FloatBuffer而不是float []?
- 16. 在table less設計中使用float是否很好?
- 17. atof()for float而不是double
- 18. 是否可以使用一行命令將[int,bool,float]轉換爲['int','bool','float']?
- 19. C++ float to int
- 20. C++ int float casting
- 21. Android Float To Int
- 22. 的Javascript:操作使用float和int
- 23. 是否使用Integer/Float/Double計算價格和折扣
- 24. 功能使用int和float類型,在C++
- 25. 二元運算符'*'不能應用於'Float'和'Float!'類型的操作數。
- 26. Python float和int行爲
- 27. int和float函數重載
- 28. 爲什麼在android canvas中繪製操作使用float而不是int(x,y)?
- 29. 在SSRS中比較Float和Int
- 30. 在PHP中乘以float和int
請注意,在某些CPU上,整數除法實際上可能比fp除法更慢。例如,在Intel Atom上,IDIV m32需要57個週期,而FDIV是25-65。但是,這些操作可能在單獨的功能單元上,因此它們可以同時執行。 – bdonlan 2009-05-20 01:27:51