1

18 ビット入力を 0 ~ 9999 の範囲で正規化する必要があるプログラムを作成しています。これは今まで出会ったことのないもので、

私はインターネットを検索し、ここで間違っている場合は修正しましたが、これは 18 ビットのバイナリ (000000000000000000) 入力を自然数に変換してから 1000 で割るのと同じくらい簡単ですか?

別のより効率的な方法はありますか????

ありがとうございました

4

1 に答える 1

3

いいえ、あなたがしたいことは、入力を で掛けることです0.03814697265

理由は非常に単純です。入力の範囲 ( 0.. ) を取り、それを「スライス」2^18に分割します。10000したがって、各スライスの範囲は をわずかに超えることになり26ます。次に、元の範囲からの入力をこれで割る(または/26を掛ける) と、 ..範囲内の数値が得られます。12609999

編集: あなたのバックグラウンドによっては、ここ^では累乗の意味で使用していることを知っておく必要があるかもしれません。この質問にはCのタグが付けられており、べき乗の第一級の概念がないため、意味がないかもしれませんが、XORではないことは明らかです!

于 2012-08-15T19:11:13.600 に答える