pub struct ConstDiv { /* private fields */ }
Expand description
定数除算。
除算命令は重いので、加減算や乗算で置き換えることを考える。 同じ値で何度も除算する際には、あらかじめ置き換える値を先に求めておくことで高速化できる。
以下、 による除算を行うとする。 であれば bit 右シフトするだけなので、 べきではないとする。magic number とシフト幅 を求めておき、次の式に基づいて計算する。 は、ある が存在して次の形になる。
と が満たすべき性質について考える。 に対して常に次の式が成り立ってほしい。 はワードサイズで、ここでは とする。
有理数と床関数の性質から、 が常に成り立てばよい。
このとき、 をみたす が存在することを示す。
すなわち、 となる。todo!()
さて、 が見つかったとする。 であれば上の式に基づいて、
直接計算できる。一方で、 の場合はワードサイズに収まらないので、
少々工夫する必要がある。 はワードサイズに収まるので、それを利用する。
todo!()
References
- Warren, Henry S. Hacker’s delight. Pearson Education, 2013.
Implementations§
Trait Implementations§
source§impl PartialEq<ConstDiv> for ConstDiv
impl PartialEq<ConstDiv> for ConstDiv
impl Copy for ConstDiv
impl Eq for ConstDiv
impl StructuralEq for ConstDiv
impl StructuralPartialEq for ConstDiv
Auto Trait Implementations§
impl RefUnwindSafe for ConstDiv
impl Send for ConstDiv
impl Sync for ConstDiv
impl Unpin for ConstDiv
impl UnwindSafe for ConstDiv
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more