pub trait TypedDiv<K: IsInteger> {
    type Output: IsInteger;
    type Remainder: IsInteger;
}
Expand description

Returns the Quotient of H/K for H: Div<K, Output: …> Note about implementation detail: This is an expanded version of long division - it takes O(1) steps but the constant is quite big unfortunately (to be precise its 32 multiplications plus a negligible amount of addition and subtraction and other stuff) If there were many divisions, the compile time increases quite a bit

Example

// (This doc test takes about 5 seconds to complete on my computer)
use const_arithmetic::*;
let a = parse_integer!(25);
let b = parse_integer!(4);
let quotient = parse_integer!(6);
let modulus = parse_integer!(1);
 
// This verifies that 25/4 = 6 ... 1
fn example<P, Q, R, S>(_p: P, _q: Q, _r: R, _s: S) where
P: IsInteger,
Q: IsInteger,
R: IsInteger,
S: IsInteger,
P: TypedDiv<Q, Output = R, Remainder = S>
{}
 
example(a, b, quotient, modulus);

Required Associated Types§

Implementors§

source§

impl<K, Hx0: Hex, Hx1: Hex, Hx2: Hex, Hx3: Hex, Hx4: Hex, Hx5: Hex, Hx6: Hex, Hx7: Hex, H1: IsInteger, Q1: IsInteger, H2: IsInteger, Q2: IsInteger, H3: IsInteger, Q3: IsInteger, H4: IsInteger, Q4: IsInteger, H5: IsInteger, Q5: IsInteger, H6: IsInteger, Q6: IsInteger, H7: IsInteger, Q7: IsInteger, H8: IsInteger, Q8: IsInteger, H9: IsInteger, Q9: IsInteger, H10: IsInteger, Q10: IsInteger, H11: IsInteger, Q11: IsInteger, H12: IsInteger, Q12: IsInteger, H13: IsInteger, Q13: IsInteger, H14: IsInteger, Q14: IsInteger, H15: IsInteger, Q15: IsInteger, H16: IsInteger, Q16: IsInteger, H17: IsInteger, Q17: IsInteger, H18: IsInteger, Q18: IsInteger, H19: IsInteger, Q19: IsInteger, H20: IsInteger, Q20: IsInteger, H21: IsInteger, Q21: IsInteger, H22: IsInteger, Q22: IsInteger, H23: IsInteger, Q23: IsInteger, H24: IsInteger, Q24: IsInteger, H25: IsInteger, Q25: IsInteger, H26: IsInteger, Q26: IsInteger, H27: IsInteger, Q27: IsInteger, H28: IsInteger, Q28: IsInteger, H29: IsInteger, Q29: IsInteger, H30: IsInteger, Q30: IsInteger, H31: IsInteger, Q31: IsInteger, H32: IsInteger, Q32: IsInteger, B, Eq1, Eq0, H33: IsInteger, Q33: IsInteger, HResult: IsInteger, QResult: IsInteger> TypedDiv<K> for TypedInteger<Hx0, Hx1, Hx2, Hx3, Hx4, Hx5, Hx6, Hx7>where K: TypedGreaterThan<TypedInteger<_0, _0, _0, _0, _0, _0, _0, _0>, Output = B> + DivInner<TypedInteger<Hx0, Hx1, Hx2, Hx3, Hx4, Hx5, Hx6, Hx7>, TypedInteger<_0, _0, _0, _0, _0, _0, _0, _0>, TypedInteger<_0, _0, _0, _0, _0, _0, _0, _8>, Hout = H1, Qout = Q1> + DivInner<H1, Q1, TypedInteger<_0, _0, _0, _0, _0, _0, _0, _4>, Hout = H2, Qout = Q2> + DivInner<H2, Q2, TypedInteger<_0, _0, _0, _0, _0, _0, _0, _2>, Hout = H3, Qout = Q3> + DivInner<H3, Q3, TypedInteger<_0, _0, _0, _0, _0, _0, _0, _1>, Hout = H4, Qout = Q4> + DivInner<H4, Q4, TypedInteger<_0, _0, _0, _0, _0, _0, _8, _0>, Hout = H5, Qout = Q5> + DivInner<H5, Q5, TypedInteger<_0, _0, _0, _0, _0, _0, _4, _0>, Hout = H6, Qout = Q6> + DivInner<H6, Q6, TypedInteger<_0, _0, _0, _0, _0, _0, _2, _0>, Hout = H7, Qout = Q7> + DivInner<H7, Q7, TypedInteger<_0, _0, _0, _0, _0, _0, _1, _0>, Hout = H8, Qout = Q8> + DivInner<H8, Q8, TypedInteger<_0, _0, _0, _0, _0, _8, _0, _0>, Hout = H9, Qout = Q9> + DivInner<H9, Q9, TypedInteger<_0, _0, _0, _0, _0, _4, _0, _0>, Hout = H10, Qout = Q10> + DivInner<H10, Q10, TypedInteger<_0, _0, _0, _0, _0, _2, _0, _0>, Hout = H11, Qout = Q11> + DivInner<H11, Q11, TypedInteger<_0, _0, _0, _0, _0, _1, _0, _0>, Hout = H12, Qout = Q12> + DivInner<H12, Q12, TypedInteger<_0, _0, _0, _0, _8, _0, _0, _0>, Hout = H13, Qout = Q13> + DivInner<H13, Q13, TypedInteger<_0, _0, _0, _0, _4, _0, _0, _0>, Hout = H14, Qout = Q14> + DivInner<H14, Q14, TypedInteger<_0, _0, _0, _0, _2, _0, _0, _0>, Hout = H15, Qout = Q15> + DivInner<H15, Q15, TypedInteger<_0, _0, _0, _0, _1, _0, _0, _0>, Hout = H16, Qout = Q16> + DivInner<H16, Q16, TypedInteger<_0, _0, _0, _8, _0, _0, _0, _0>, Hout = H17, Qout = Q17> + DivInner<H17, Q17, TypedInteger<_0, _0, _0, _4, _0, _0, _0, _0>, Hout = H18, Qout = Q18> + DivInner<H18, Q18, TypedInteger<_0, _0, _0, _2, _0, _0, _0, _0>, Hout = H19, Qout = Q19> + DivInner<H19, Q19, TypedInteger<_0, _0, _0, _1, _0, _0, _0, _0>, Hout = H20, Qout = Q20> + DivInner<H20, Q20, TypedInteger<_0, _0, _8, _0, _0, _0, _0, _0>, Hout = H21, Qout = Q21> + DivInner<H21, Q21, TypedInteger<_0, _0, _4, _0, _0, _0, _0, _0>, Hout = H22, Qout = Q22> + DivInner<H22, Q22, TypedInteger<_0, _0, _2, _0, _0, _0, _0, _0>, Hout = H23, Qout = Q23> + DivInner<H23, Q23, TypedInteger<_0, _0, _1, _0, _0, _0, _0, _0>, Hout = H24, Qout = Q24> + DivInner<H24, Q24, TypedInteger<_0, _8, _0, _0, _0, _0, _0, _0>, Hout = H25, Qout = Q25> + DivInner<H25, Q25, TypedInteger<_0, _4, _0, _0, _0, _0, _0, _0>, Hout = H26, Qout = Q26> + DivInner<H26, Q26, TypedInteger<_0, _2, _0, _0, _0, _0, _0, _0>, Hout = H27, Qout = Q27> + DivInner<H27, Q27, TypedInteger<_0, _1, _0, _0, _0, _0, _0, _0>, Hout = H28, Qout = Q28> + DivInner<H28, Q28, TypedInteger<_8, _0, _0, _0, _0, _0, _0, _0>, Hout = H29, Qout = Q29> + DivInner<H29, Q29, TypedInteger<_4, _0, _0, _0, _0, _0, _0, _0>, Hout = H30, Qout = Q30> + DivInner<H30, Q30, TypedInteger<_2, _0, _0, _0, _0, _0, _0, _0>, Hout = H31, Qout = Q31> + DivInner<H31, Q31, TypedInteger<_1, _0, _0, _0, _0, _0, _0, _0>, Hout = H32, Qout = Q32> + TypedEqual<TypedInteger<_1, _0, _0, _0, _0, _0, _0, _0>, Output = Eq1> + IsInteger, B: AssertTrue + Binary, Eq1: If<TypedInteger<_0, _0, _0, _0, _0, _0, _0, _0>, H32, Output = H33> + If<TypedInteger<Hx0, Hx1, Hx2, Hx3, Hx4, Hx5, Hx6, Hx7>, Q32, Output = Q33> + Binary, TypedInteger<Hx0, Hx1, Hx2, Hx3, Hx4, Hx5, Hx6, Hx7>: TypedEqual<TypedInteger<_0, _0, _0, _0, _0, _0, _0, _0>, Output = Eq0>, Eq0: If<TypedInteger<_0, _0, _0, _0, _0, _0, _0, _0>, H33, Output = HResult> + If<TypedInteger<_0, _0, _0, _0, _0, _0, _0, _0>, Q33, Output = QResult> + Binary,

§

type Output = QResult

§

type Remainder = HResult