
John C. Femiani wrote:
Neal Becker wrote:
//self operator %=(base_type x) { val %= x; return *this; } What should this do? I think perhaps it should behave like fmod (?)
I had a fixed-point library with the purpose that code written should be able to choose to use fixed-point or floating point math at compile time without having to rewrite the algorithms. Instead of providing a % operator I provided an fmod function for parity with floating point types. /// Computes the remainder of fixed-point division /// @param x The numerator. /// @param y The divisor. /// @return the value x - i * y, for some integer i such that, if y is /// non-zero, the result has the same sign as x and magnitude /// less than the magnitude of y. template<std::size_t M, std::size_t F> inline fixed<M,F> fmod( fixed<M,F> x, fixed<M,F> y ) { return as_fixed(x.raw() % y.raw()); } /// shorthand for fmod( fixed, integer ) template<std::size_t M, std::size_t F, typename T > inline typename boost::enable_if<boost::is_integral<T>,fixed<M,F> >::type fmod( fixed<M,F> x, T y ) { return fmod( x, fixed<M,F>(y) ); } Thanks, Michael Marcin