Use our own constants instead of M_PI, M_*, etc. (#1733)

These constants are not part of the standard. We instead use our own
constexpr definitions in the filament::math namespace, as part of
the scalar.h include.
This commit is contained in:
Romain Guy
2019-10-02 15:31:38 -07:00
committed by GitHub
parent 7ea7d1d5f2
commit a4a1bf07aa
22 changed files with 218 additions and 193 deletions

View File

@@ -14,11 +14,10 @@
* limitations under the License.
*/
#include <math.h>
#include <gtest/gtest.h>
#include <math/fast.h>
#include <math/scalar.h>
using namespace filament::math;
@@ -27,48 +26,47 @@ protected:
};
TEST_F(FastTest, Trig) {
constexpr float sqrt1_2f = (float)M_SQRT1_2;
constexpr double sqrt1_2d = M_SQRT1_2;
constexpr float sqrt1_2f = (float) F_SQRT1_2;
constexpr double sqrt1_2d = F_SQRT1_2;
constexpr float abs_error = 0.002f; // 0.2%
EXPECT_FLOAT_EQ( 0.0f, fast::sin<float>(-M_PI));
EXPECT_NEAR (-sqrt1_2f, fast::sin<float>(-M_PI_2 - M_PI_4), abs_error);
EXPECT_FLOAT_EQ(-1.0f, fast::sin<float>(-M_PI_2));
EXPECT_NEAR (-sqrt1_2f, fast::sin<float>(-M_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::sin<float>(-F_PI));
EXPECT_NEAR (-sqrt1_2f, fast::sin<float>(-F_PI_2 - F_PI_4), abs_error);
EXPECT_FLOAT_EQ(-1.0f, fast::sin<float>(-F_PI_2));
EXPECT_NEAR (-sqrt1_2f, fast::sin<float>(-F_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::sin<float>(0.0));
EXPECT_NEAR ( sqrt1_2f, fast::sin<float>(M_PI_4), abs_error);
EXPECT_FLOAT_EQ( 1.0f, fast::sin<float>(M_PI_2));
EXPECT_NEAR ( sqrt1_2f, fast::sin<float>(M_PI_2 + M_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::sin<float>(M_PI));
EXPECT_NEAR ( sqrt1_2f, fast::sin<float>(F_PI_4), abs_error);
EXPECT_FLOAT_EQ( 1.0f, fast::sin<float>(F_PI_2));
EXPECT_NEAR ( sqrt1_2f, fast::sin<float>(F_PI_2 + F_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::sin<float>(F_PI));
EXPECT_FLOAT_EQ(-1.0f, fast::cos<float>(-M_PI));
EXPECT_NEAR (-sqrt1_2f, fast::cos<float>(-M_PI_2 - M_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::cos<float>(-M_PI_2));
EXPECT_NEAR (sqrt1_2f, fast::cos<float>(-M_PI_4), abs_error);
EXPECT_FLOAT_EQ(-1.0f, fast::cos<float>(-F_PI));
EXPECT_NEAR (-sqrt1_2f, fast::cos<float>(-F_PI_2 - F_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::cos<float>(-F_PI_2));
EXPECT_NEAR (sqrt1_2f, fast::cos<float>(-F_PI_4), abs_error);
EXPECT_FLOAT_EQ( 1.0f, fast::cos<float>(0.0));
EXPECT_NEAR (sqrt1_2f, fast::cos<float>(M_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::cos<float>(M_PI_2));
EXPECT_NEAR (-sqrt1_2f, fast::cos<float>(M_PI_2 + M_PI_4), abs_error);
EXPECT_FLOAT_EQ(-1.0f, fast::cos<float>(M_PI));
EXPECT_NEAR (sqrt1_2f, fast::cos<float>(F_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::cos<float>(F_PI_2));
EXPECT_NEAR (-sqrt1_2f, fast::cos<float>(F_PI_2 + F_PI_4), abs_error);
EXPECT_FLOAT_EQ(-1.0f, fast::cos<float>(F_PI));
EXPECT_FLOAT_EQ( 0.0f, fast::sin<double>(-M_PI));
EXPECT_NEAR (-sqrt1_2d, fast::sin<double>(-M_PI_2 - M_PI_4), abs_error);
EXPECT_FLOAT_EQ(-1.0f, fast::sin<double>(-M_PI_2));
EXPECT_NEAR (-sqrt1_2d, fast::sin<double>(-M_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::sin<double>(-F_PI));
EXPECT_NEAR (-sqrt1_2d, fast::sin<double>(-F_PI_2 - F_PI_4), abs_error);
EXPECT_FLOAT_EQ(-1.0f, fast::sin<double>(-F_PI_2));
EXPECT_NEAR (-sqrt1_2d, fast::sin<double>(-F_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::sin<double>(0.0));
EXPECT_NEAR ( sqrt1_2d, fast::sin<double>(M_PI_4), abs_error);
EXPECT_FLOAT_EQ( 1.0f, fast::sin<double>(M_PI_2));
EXPECT_NEAR ( sqrt1_2d, fast::sin<double>(M_PI_2 + M_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::sin<double>(M_PI));
EXPECT_NEAR ( sqrt1_2d, fast::sin<double>(F_PI_4), abs_error);
EXPECT_FLOAT_EQ( 1.0f, fast::sin<double>(F_PI_2));
EXPECT_NEAR ( sqrt1_2d, fast::sin<double>(F_PI_2 + F_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::sin<double>(F_PI));
EXPECT_FLOAT_EQ(-1.0f, fast::cos<double>(-M_PI));
EXPECT_NEAR (-sqrt1_2d, fast::cos<double>(-M_PI_2 - M_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::cos<double>(-M_PI_2));
EXPECT_NEAR (sqrt1_2d, fast::cos<double>(-M_PI_4), abs_error);
EXPECT_FLOAT_EQ(-1.0f, fast::cos<double>(-F_PI));
EXPECT_NEAR (-sqrt1_2d, fast::cos<double>(-F_PI_2 - F_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::cos<double>(-F_PI_2));
EXPECT_NEAR (sqrt1_2d, fast::cos<double>(-F_PI_4), abs_error);
EXPECT_FLOAT_EQ( 1.0f, fast::cos<double>(0.0));
EXPECT_NEAR (sqrt1_2d, fast::cos<double>(M_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::cos<double>(M_PI_2));
EXPECT_NEAR (-sqrt1_2d, fast::cos<double>(M_PI_2 + M_PI_4), abs_error);
EXPECT_FLOAT_EQ(-1.0f, fast::cos<double>(M_PI));
EXPECT_NEAR (sqrt1_2d, fast::cos<double>(F_PI_4), abs_error);
EXPECT_FLOAT_EQ( 0.0f, fast::cos<double>(F_PI_2));
EXPECT_NEAR (-sqrt1_2d, fast::cos<double>(F_PI_2 + F_PI_4), abs_error);
EXPECT_FLOAT_EQ(-1.0f, fast::cos<double>(F_PI));
}