#pragma once
#include <cmath>
namespace a83 {
constexpr float PI = 3.141592653589793116;
float sin(float val) { return std::sin(val); }
float cos(float val) { return std::cos(val); }
float sqrt(float val) { return std::sqrt(val); }
//! радианы в градусы
float rad2deg(float rad) {
  constexpr auto CONST = 180.0f / PI;
  return rad * CONST;
}
//! градусы в радианы
float deg2rad(float deg) {
  constexpr auto CONST = PI / 180.0f;
  return deg * CONST;
}
void clampRad(float& rad) {
  constexpr auto maxRad = PI * 2.0f;
  rad = std::fmod(rad, maxRad);
  if (rad < 0.0f)
    rad += maxRad;
}
void clampDeg(float& deg) {
  constexpr auto maxDeg = 360.0f;
  deg = std::fmod(deg, maxDeg);
  if (deg < 0.0f)
    deg += maxDeg;
}
//! получить знак чила в виде -1, 1
float getSign(float val) { return std::copysign(1.0f, val); }
//! безопасное деление
template <class T1, class T2> auto safe_div(T1 a, T2 b) -> decltype(a / b)
  { return (b == 0 ? 0 : a / b); }
} // a83 ns