単純なプロジェクトでは、大きな数字(4294967123など)を読みやすくする必要があるため、接頭辞(4294967123 - > 4.29G、12345 - > 12.34Kなど)の最初の桁のみを書いています。 。)ラウンドオーダーの計算
はコードは(簡体字)次のようになります。
const char* postfixes=" KMGT";
char postfix(unsigned int x)
{
return postfixes[(int) floor(log10(x))];
}
それは動作しますが、私は、完全な精度の対数を計算し、それを丸めし、それをダウンキャストするよりもエレガント/よりよい解決策があることを考えます再び整数。私が考え
他のソリューション:
int i=0;
for(; x >= 1000 ; ++i) x/=1000;
return postfixes[i];
(これはかなり遅いですが、読みやすくするために)
番号はベンフォードの法則と数に応じての間に分布しているが、符号なし64として扱われるべきです10^xの近くに丸め誤差がないはずです(例えば、Python math.log(1000,10)
は2.999996を返し、2になります)。 私は行方不明の高速、正確な他の方法はありますか?
。 x << = 3; – Drakosha
"整数の整数ログベース2を見つける(別名最高ビットセットの位置)" http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogLookup – Drakosha
ああ!これは、有名なゲーム_Taipanを思い出させます!_(これをプレイしましたか?)_Taipan!_対数を使用しました。 –