// // Math.inl // amoeba // // Created by Timothy Prepscius on 12/30/16. // Copyright © 2016 Timothy Prepscius. All rights reserved. // // inline #pragma once #include "Real.hpp" #include #include namespace tjp { namespace core { namespace math { template T clamp(const T &t, T l=0, T r=1) { return std::min(std::max(t, l), r); } template Real ceil(const Real &r) { return std::ceil(r); } template Real floor(const Real &r) { return std::floor(r); } template Real trunc(const Real &r) { return std::trunc(r); } template Real pow2(const Real &r) { return r*r; } template Real min_value(const Real &lhs, const Real &rhs) { if (lhs < rhs) return lhs; return rhs; } template Real max_value(const Real &lhs, const Real &rhs) { if (lhs > rhs) return lhs; return rhs; } template Real sign_of(const Real & a) { if (a < 0) return (Real)-1; return 1; } template Real abs(const Real & a) { return std::abs(a); } template Real sin(const Real & a) { return std::sin(a); } // inline template Real cos(const Real & a) { return std::cos(a); } // inline template Real sqrt(const Real &v) { return std::sqrt(v); } // inline template Real acos(const Real & v) { return std::acos(v); } // inline template Real atan(const Real & v) { return std::atan(v); } // inline template Real atan2(const Real & v, const Real & e) { return std::atan2(v, e); } // inline template Real hypot(const Real & v, const Real & e) { return std::hypot(v, e); } template Real length(const Real & r) { return abs(r); } template Real lengthSquared(Real r) { return r*r; } // ---- template<> inline u128 abs(const u128 &v) { return v; } template<> inline s128 abs(const s128 &v) { return v >= 0 ? v : -v; } template Real fract(Real r) { Real _; return std::modf(r, &_); } } // namespace } // namespace } // namespace