単純なプロジェクトの場合、大きな数字(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];
(これはかなり遅くなりますが、読みやすくなります)
数値はベンフォードの法則に従って分散され、10 ^ x付近で丸め誤差が発生しないため、数値は符号なし64ビット数値として扱われる必要があります(たとえば、Pythonmath.log(1000,10)
では2.999996が返され、2になります)。私が見逃している他の高速で正確な方法はありますか?