對於一個簡單的項目,我必須使大數字(例如4294967123)可讀,所以我只寫了前綴數字(4294967123 - > 4.29G,12345 - > 12.34K等) 。)計算一個大小的數字
代碼(簡體)看起來是這樣的:
const char* postfixes=" KMGT";
char postfix(unsigned int x)
{
return postfixes[(int) floor(log10(x))];
}
它的工作原理,但我認爲還有比計算全精度數,舍入並鑄造它歸結爲一個更優雅/更好的解決方案再次int。
其他的解決方案我想到:
int i=0;
for(; x >= 1000 ; ++i) x/=1000;
return postfixes[i];
(這是顯著慢,但更易於閱讀)
的數字是根據本福德定律與數字之間的分配應被視爲無符號64位數,因爲在10^x附近不應該有舍入誤差(例如,python math.log(1000,10)
返回2.999996,這會變成2)。 我錯過了什麼快速,準確的其他方式?
我想你應該嘗試替換x/= 1000;其中x << = 3; – Drakosha 2009-07-30 10:02:37
您也可以使用「查找整數的整數日誌庫2(也稱爲最高位集的位置)」http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogLookup – Drakosha 2009-07-30 10:05:22
哦!這讓我想起了着名的遊戲_Taipan!_(玩過那個?)_Taipan!_使用了對數。 – 2009-09-05 08:48:09