18 ビット入力を 0 ~ 9999 の範囲で正規化する必要があるプログラムを作成しています。これは今まで出会ったことのないもので、
私はインターネットを検索し、ここで間違っている場合は修正しましたが、これは 18 ビットのバイナリ (000000000000000000) 入力を自然数に変換してから 1000 で割るのと同じくらい簡単ですか?
別のより効率的な方法はありますか????
ありがとうございました
18 ビット入力を 0 ~ 9999 の範囲で正規化する必要があるプログラムを作成しています。これは今まで出会ったことのないもので、
私はインターネットを検索し、ここで間違っている場合は修正しましたが、これは 18 ビットのバイナリ (000000000000000000) 入力を自然数に変換してから 1000 で割るのと同じくらい簡単ですか?
別のより効率的な方法はありますか????
ありがとうございました
いいえ、あなたがしたいことは、入力を で掛けることです0.03814697265
。
理由は非常に単純です。入力の範囲 ( 0
.. ) を取り、それを「スライス」2^18
に分割します。10000
したがって、各スライスの範囲は をわずかに超えることになり26
ます。次に、元の範囲からの入力をこれで割る(または/26
を掛ける) と、 ..範囲内の数値が得られます。1
26
0
9999
編集: あなたのバックグラウンドによっては、ここ^
では累乗の意味で使用していることを知っておく必要があるかもしれません。この質問にはCのタグが付けられており、べき乗の第一級の概念がないため、意味がないかもしれませんが、XORではないことは明らかです!