The name “re” came from “reciprocal” but since we have “inverse” for matrices, I thought it would be nice to make everything consistent.undefined
| @@ -111,7 +111,7 @@ public: | |||
| template<int K> friend Real<K> nextafter(Real<K> const &x, Real<K> const &y); | |||
| /* Power functions */ | |||
| template<int K> friend Real<K> re(Real<K> const &x); | |||
| template<int K> friend Real<K> inverse(Real<K> const &x); | |||
| template<int K> friend Real<K> sqrt(Real<K> const &x); | |||
| template<int K> friend Real<K> cbrt(Real<K> const &x); | |||
| template<int K> friend Real<K> pow(Real<K> const &x, Real<K> const &y); | |||
| @@ -270,7 +270,7 @@ template<int K> Real<K> ldexp(Real<K> const &x, int exp); | |||
| template<int K> Real<K> modf(Real<K> const &x, Real<K> *iptr); | |||
| template<int K> Real<K> ulp(Real<K> const &x); | |||
| template<int K> Real<K> nextafter(Real<K> const &x, Real<K> const &y); | |||
| template<int K> Real<K> re(Real<K> const &x); | |||
| template<int K> Real<K> inverse(Real<K> const &x); | |||
| template<int K> Real<K> sqrt(Real<K> const &x); | |||
| template<int K> Real<K> cbrt(Real<K> const &x); | |||
| template<int K> Real<K> pow(Real<K> const &x, Real<K> const &y); | |||
| @@ -310,7 +310,7 @@ template<> real ldexp(real const &x, int exp); | |||
| template<> real modf(real const &x, real *iptr); | |||
| template<> real ulp(real const &x); | |||
| template<> real nextafter(real const &x, real const &y); | |||
| template<> real re(real const &x); | |||
| template<> real inverse(real const &x); | |||
| template<> real sqrt(real const &x); | |||
| template<> real cbrt(real const &x); | |||
| template<> real pow(real const &x, real const &y); | |||
| @@ -400,7 +400,7 @@ static inline quat_t<T> normalize(quat_t<T> const &z) | |||
| */ | |||
| template<typename T> | |||
| static inline cmplx_t<T> re(cmplx_t<T> const &z) | |||
| static inline cmplx_t<T> inverse(cmplx_t<T> const &z) | |||
| { | |||
| return ~z / sqlength(z); | |||
| } | |||
| @@ -408,13 +408,13 @@ static inline cmplx_t<T> re(cmplx_t<T> const &z) | |||
| template<typename T> | |||
| static inline cmplx_t<T> operator /(T a, cmplx_t<T> const &b) | |||
| { | |||
| return a * re(b); | |||
| return a * inverse(b); | |||
| } | |||
| template<typename T> | |||
| static inline cmplx_t<T> operator /(cmplx_t<T> a, cmplx_t<T> const &b) | |||
| { | |||
| return a * re(b); | |||
| return a * inverse(b); | |||
| } | |||
| template<typename T> | |||
| @@ -440,7 +440,7 @@ static inline bool operator !=(T a, cmplx_t<T> const &b) { return b != a; } | |||
| */ | |||
| template<typename T> | |||
| static inline quat_t<T> re(quat_t<T> const &q) | |||
| static inline quat_t<T> inverse(quat_t<T> const &q) | |||
| { | |||
| return ~q / sqlength(q); | |||
| } | |||
| @@ -448,13 +448,13 @@ static inline quat_t<T> re(quat_t<T> const &q) | |||
| template<typename T> | |||
| static inline quat_t<T> operator /(T x, quat_t<T> const &y) | |||
| { | |||
| return x * re(y); | |||
| return x * inverse(y); | |||
| } | |||
| template<typename T> | |||
| static inline quat_t<T> operator /(quat_t<T> const &x, quat_t<T> const &y) | |||
| { | |||
| return x * re(y); | |||
| return x * inverse(y); | |||
| } | |||
| template<typename T> | |||
| @@ -468,7 +468,7 @@ template<typename T> | |||
| static inline sqt_t<T> inverse(sqt_t<T> const &tr) | |||
| { | |||
| auto inv_s = T(1) / tr.s; | |||
| auto inv_q = re(tr.q); | |||
| auto inv_q = inverse(tr.q); | |||
| return sqt_t<T>(inv_s, inv_q, inv_q * tr.t * -inv_s); | |||
| } | |||
| @@ -25,7 +25,7 @@ namespace lol | |||
| * done on demand, but here is the dependency list anyway: | |||
| * - fast_log() requires R_1 | |||
| * - log() requires R_LN2 | |||
| * - re() require R_2 | |||
| * - inverse() require R_2 | |||
| * - exp() requires R_0, R_1, R_LN2 | |||
| * - sqrt() requires R_3 | |||
| */ | |||
| @@ -48,16 +48,16 @@ LOL_CONSTANT_GETTER(R_10, (real)10.0); | |||
| LOL_CONSTANT_GETTER(R_LN2, fast_log(R_2())); | |||
| LOL_CONSTANT_GETTER(R_LN10, log(R_10())); | |||
| LOL_CONSTANT_GETTER(R_LOG2E, re(R_LN2())); | |||
| LOL_CONSTANT_GETTER(R_LOG10E, re(R_LN10())); | |||
| LOL_CONSTANT_GETTER(R_LOG2E, inverse(R_LN2())); | |||
| LOL_CONSTANT_GETTER(R_LOG10E, inverse(R_LN10())); | |||
| LOL_CONSTANT_GETTER(R_E, exp(R_1())); | |||
| LOL_CONSTANT_GETTER(R_PI, fast_pi()); | |||
| LOL_CONSTANT_GETTER(R_PI_2, R_PI() / 2); | |||
| LOL_CONSTANT_GETTER(R_PI_3, R_PI() / R_3()); | |||
| LOL_CONSTANT_GETTER(R_PI_4, R_PI() / 4); | |||
| LOL_CONSTANT_GETTER(R_1_PI, re(R_PI())); | |||
| LOL_CONSTANT_GETTER(R_1_PI, inverse(R_PI())); | |||
| LOL_CONSTANT_GETTER(R_2_PI, R_1_PI() * 2); | |||
| LOL_CONSTANT_GETTER(R_2_SQRTPI, re(sqrt(R_PI())) * 2); | |||
| LOL_CONSTANT_GETTER(R_2_SQRTPI, inverse(sqrt(R_PI())) * 2); | |||
| LOL_CONSTANT_GETTER(R_SQRT2, sqrt(R_2())); | |||
| LOL_CONSTANT_GETTER(R_SQRT3, sqrt(R_3())); | |||
| LOL_CONSTANT_GETTER(R_SQRT1_2, R_SQRT2() / 2); | |||
| @@ -487,7 +487,7 @@ template<> real real::operator *(real const &x) const | |||
| template<> real real::operator /(real const &x) const | |||
| { | |||
| return *this * re(x); | |||
| return *this * inverse(x); | |||
| } | |||
| template<> real const &real::operator +=(real const &x) | |||
| @@ -608,7 +608,7 @@ template<> real clamp(real const &x, real const &a, real const &b) | |||
| return (x < a) ? a : (x > b) ? b : x; | |||
| } | |||
| template<> real re(real const &x) | |||
| template<> real inverse(real const &x) | |||
| { | |||
| if (!(x.m_signexp << 1)) | |||
| { | |||
| @@ -718,7 +718,7 @@ template<> real cbrt(real const &x) | |||
| * convergence, but this hasn't been checked seriously. */ | |||
| for (int i = 1; i <= real::BIGITS; i *= 2) | |||
| { | |||
| static real third = re(real::R_3()); | |||
| static real third = inverse(real::R_3()); | |||
| ret = third * (x / (ret * ret) + (ret / 2)); | |||
| } | |||
| @@ -1311,7 +1311,7 @@ template<> real atan(real const &x) | |||
| } | |||
| else | |||
| { | |||
| real y = re(absx); | |||
| real y = inverse(absx); | |||
| real yn = y, my2 = -y * y; | |||
| ret = y; | |||
| for (int i = 3; ; i += 2) | |||
| @@ -88,10 +88,10 @@ lolunit_declare_fixture(complex_test) | |||
| lolunit_assert_doubles_equal(norm(b), 1.0, 1e-8); | |||
| } | |||
| lolunit_declare_test(reciprocal) | |||
| lolunit_declare_test(complex_inverse) | |||
| { | |||
| cmplx a(3.0f, -4.0f); | |||
| cmplx b = re(a); | |||
| cmplx b = inverse(a); | |||
| lolunit_assert_equal(a * b, b * a); | |||
| @@ -140,10 +140,10 @@ lolunit_declare_fixture(quaternion_test) | |||
| lolunit_assert_doubles_equal(norm(b), 1.0, 1e-5); | |||
| } | |||
| lolunit_declare_test(reciprocal) | |||
| lolunit_declare_test(quaternion_inverse) | |||
| { | |||
| quat a(2.f, -2.f, -8.f, 3.f); | |||
| quat b = re(a); | |||
| quat b = inverse(a); | |||
| quat c = 1.f / a; | |||
| lolunit_assert_doubles_equal(b.w, c.w, 1e-5); | |||
| @@ -38,12 +38,12 @@ lolunit_declare_fixture(real_test) | |||
| lolunit_assert_equal(b1, 1.0); | |||
| lolunit_assert_equal(b2, 1.0); | |||
| double c1 = exp(re(real::R_LOG2E())); | |||
| double c1 = exp(inverse(real::R_LOG2E())); | |||
| double c2 = log(exp2(real::R_LOG2E())); | |||
| lolunit_assert_equal(c1, 2.0); | |||
| lolunit_assert_equal(c2, 1.0); | |||
| double d1 = exp(re(real::R_LOG10E())); | |||
| double d1 = exp(inverse(real::R_LOG10E())); | |||
| lolunit_assert_equal(d1, 10.0); | |||
| double e1 = exp(real::R_LN2()); | |||