2012-07-26 52 views
0

我目前正試圖找到我的解決方案,不會讓一個值超過某個值,在這種情況下,0x1000(4096)。這是一個簡單的解決方案,但關鍵在於速度。最快的方法,不要讓一個值超過另一個 - C++

int someVal = rand(); 
for(int i = 0; i < 10000; i++) 
{ 
    if(someVal > 0x1000) 
     someVal = 0x1000; 
    cout << someVal; 
    someVal = rand(); 
} 

這太慢了,除非當然沒有其他辦法可以做到這一點。感謝您的幫助,Hetelek。

+3

不發送值到stdout會加快東西;-) – Jimmy 2012-07-26 08:35:47

+1

這是爲什麼慢。你有計時嗎?或看着大會。該循環中唯一顯着緩慢的部分是通過'cout'打印 – 2012-07-26 08:43:16

+0

我知道這不是因爲條件語句有價值... @Jimmy - 這些只是調試字符串。 – hetelek 2012-07-26 08:44:19

回答

0

可以試試這個;

floatValue = floor(floatValue * 0x1000 + 0.5)/0x1000; 
1

你想完成什麼?

在這種簡單的情況下,您可以在循環後檢查一次。我不確定你的目標是什麼。

5

不知道你要完成什麼。這是否能解決您的問題?

someVal = rand() % 0x1001; 
+0

也就是說,整數模量是一個着名的緩慢的CPU操作,原來的如果可能在許多CPU上更快...值得標杆,如果你真的很在意。 – 2012-07-26 09:32:48

+0

@Tony Delroy:比生成一個新的隨機數更昂貴?你一定是在開玩笑...... – 2012-07-26 09:55:38

+0

好吧,回到問題首先是多麼明智,但它確實要求比if/assignment更快的事情,我只是說即使你的是一個如果你真的在乎(這是一種微妙的方式來說你可能不應該也不會在這之後)......; -P – 2012-07-26 13:19:53

0

使用and掩蔽解釋:

someVal = rand() & 0xfff; 
+0

這個問題允許0到0x1000(含);你的建議不包括0x1000,將它折回0。 – 2012-07-26 08:45:35

+0

是的,也許OP可以忍受這個 – perreal 2012-07-26 08:49:28

+1

也許他們可以......從0到0xFFF的值是非常不可能的,但是這個示例代碼是不小心的書面......: - /。根據我的經驗,想要4096個值(0..4095)比4097更常見。 – 2012-07-26 09:35:50

相關問題