正整数 を固定したとき、色々な非負整数 に対して を求めたい。 を非負整数として という形の演算で求めることを考える。シフトで切り捨てが入るので、 と切り上げにするのがよさそう。誤差を考える。( は非負整数、)とすると、。 より小さくなることはないとわかる。 も求める値も整数なので、(床関数の中身が) 未満だけ大きくなる誤差は許容される(正しい値が求まる)。つまり、 であればよい( のケースはシフトだけでいいので省略)。計算結果が だけ大きくなることを許容する場合、 であればよい。例えば乗算に _mm_mullo_epi32 を使う場合、扱えるのは 未満の非負整数なので、 という条件も加わる。 を全探索して、正しい値が計算できる の範囲が広いものを使う(範囲は例えば 万以下とかになるが、 の値によって違ってくる)。
(さすがに読みづらかったのでtex記法使ったけどクソ時間かかった)