+template<typename T>
+inline T operator/(const Angle<T> &a1, const Angle<T> &a2)
+{
+ return a1.radians()/a2.radians();
+}
+
+template<typename T>
+inline Angle<T> &Angle<T>::wrap_with_base(const Angle<T> &b)
+{
+ while(value<b.value)
+ value += 2*M_PI;
+ while(value>=b.value+2*M_PI)
+ value -= 2*M_PI;
+ return *this;
+}
+
+template<typename T>
+inline Angle<T> &Angle<T>::wrap_positive()
+{
+ return wrap_with_base(zero());
+}
+
+template<typename T>
+inline Angle<T> &Angle<T>::wrap_balanced()
+{
+ return wrap_with_base(-half_turn());
+}
+
+template<typename T>
+inline Angle<T> wrap_with_base(const Angle<T> &a, const Angle<T> &b)
+{
+ Angle<T> r = a;
+ return r.wrap_with_base(b);
+}
+
+template<typename T>
+inline Angle<T> wrap_positive(const Angle<T> &a)
+{
+ Angle<T> r = a;
+ return r.wrap_positive();
+}
+
+template<typename T>
+inline Angle<T> wrap_balanced(const Angle<T> &a)
+{
+ Angle<T> r = a;
+ return r.wrap_balanced();
+}
+
+template<typename T>
+inline Angle<T> abs(const Angle<T> &angle)
+{
+ return Angle<T>::from_radians(std::abs(angle.radians()));
+}
+