1

z_f0.0f と 1.0f の間に固定された floatがあり、これをソート順を維持する符号なし整数に変換したいと考えています。

これを行う簡単な方法は次のとおりです。

float z_f = 0.5;
unsigned int z_ui = (unsigned int) z_f*(MAX_UINT32);//Scale to full range of uint32

これは機能しますか?
これにより、精度が低下しますか? 同じ結果を達成するためのより良い方法はありますか?

4

3 に答える 3

0

優先順位の理由から、まず C スタイルのキャストを避けます。2 つ目は、精度の問題により、この操作をfloatではなく、 で実行することdoubleです。

unsigned int z_ui 
                 = static_cast<unsigned int>(satic_cast<double>(z_f)*MAX_UINT32);
于 2013-10-31T16:36:25.913 に答える