Google OR-Tools v9.12
a fast and portable software suite for combinatorial optimization
Loading...
Searching...
No Matches
util::math::ConstantDivisor< uint32_t > Class Reference

Division and modulus using uint32_t numerators and denominators. More...

#include <constant_divisor.h>

Inheritance diagram for util::math::ConstantDivisor< uint32_t >:
util::math::internal::ConstantDivisorBase< uint32_t, uint64_t, ConstantDivisor< uint32_t > >

Public Types

using value_type = uint32_t
 
typedef uint32_t value_type
 
- Public Types inherited from util::math::internal::ConstantDivisorBase< uint32_t, uint64_t, ConstantDivisor< uint32_t > >
using value_type
 

Public Member Functions

 ConstantDivisor (value_type denominator)
 REQUIRES: denominator > 1.
 
value_type div (value_type numerator) const
 
 ConstantDivisor (value_type denominator)
 
value_type div (value_type n) const
 
value_type mod (value_type n) const
 
- Public Member Functions inherited from util::math::internal::ConstantDivisorBase< uint32_t, uint64_t, ConstantDivisor< uint32_t > >
 ConstantDivisorBase (uint64_t magic, value_type denominator)
 
value_type mod (value_type numerator) const
 
value_type denominator () const
 

Friends

value_type operator/ (value_type a, const ConstantDivisor &b)
 
value_type operator% (value_type a, const ConstantDivisor &b)
 

Additional Inherited Members

- Protected Types inherited from util::math::internal::ConstantDivisorBase< uint32_t, uint64_t, ConstantDivisor< uint32_t > >
using MagicValueType
 
- Protected Attributes inherited from util::math::internal::ConstantDivisorBase< uint32_t, uint64_t, ConstantDivisor< uint32_t > >
uint64_t magic_
 

Detailed Description

Division and modulus using uint32_t numerators and denominators.

Definition at line 137 of file constant_divisor.h.

Member Typedef Documentation

◆ value_type [1/2]

typedef uint32_t util::math::ConstantDivisor< uint32_t >::value_type

Definition at line 59 of file constant_divisor.h.

◆ value_type [2/2]

using util::math::ConstantDivisor< uint32_t >::value_type = uint32_t

Definition at line 141 of file constant_divisor.h.

Constructor & Destructor Documentation

◆ ConstantDivisor() [1/2]

util::math::ConstantDivisor< uint32_t >::ConstantDivisor ( value_type d)
explicit

REQUIRES: denominator > 1.

If we hardcode shift_amount to 32, the 32-bit formula is: magic_number = 2 ^ 64 / d value / d = value * magic_number >> 64

One caveat is that for d == 1, magic_number takes 65 bits overflowing a uint64_t. So, we again disallow inputs with d == 1.

Definition at line 39 of file constant_divisor.cc.

◆ ConstantDivisor() [2/2]

util::math::ConstantDivisor< uint32_t >::ConstantDivisor ( value_type denominator)
inlineexplicit

Definition at line 61 of file constant_divisor.h.

Member Function Documentation

◆ div() [1/2]

value_type util::math::ConstantDivisor< uint32_t >::div ( value_type n) const
inline

Definition at line 64 of file constant_divisor.h.

◆ div() [2/2]

value_type util::math::ConstantDivisor< uint32_t >::div ( value_type numerator) const
inline

Definition at line 146 of file constant_divisor.h.

◆ mod()

value_type util::math::ConstantDivisor< uint32_t >::mod ( value_type n) const
inline

Definition at line 66 of file constant_divisor.h.

Friends And Related Symbol Documentation

◆ operator%

value_type operator% ( value_type a,
const ConstantDivisor< uint32_t > & b )
friend

Definition at line 72 of file constant_divisor.h.

◆ operator/

value_type operator/ ( value_type a,
const ConstantDivisor< uint32_t > & b )
friend

Definition at line 68 of file constant_divisor.h.


The documentation for this class was generated from the following files: