diff options
author | lawnjelly <lawnjelly@gmail.com> | 2023-05-09 13:49:26 +0100 |
---|---|---|
committer | RĂ©mi Verschelde <rverschelde@gmail.com> | 2023-05-12 12:31:23 +0200 |
commit | efbb28d09a2a4aaa53875edd827e08137f9f19f4 (patch) | |
tree | 01516ffb51e02974f48ac1643f38de29396ec6fd /tests | |
parent | b91b8fce43ab9cb9f8c96f8c640acc801774b6b5 (diff) |
Make acos and asin safe
A common bug with using acos and asin is that input outside -1 to 1 range will result in Nan output. This can occur due to floating point error in the input.
The standard solution is to provide safe_acos function with clamped input. For Godot it may make more sense to make the standard functions safe.
(cherry picked from commit 50c5ed4876250f785be54b8f6124e7663afa38dc)
Diffstat (limited to 'tests')
-rw-r--r-- | tests/core/math/test_math_funcs.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/tests/core/math/test_math_funcs.h b/tests/core/math/test_math_funcs.h index c01cdd78b0..b6cb9620f1 100644 --- a/tests/core/math/test_math_funcs.h +++ b/tests/core/math/test_math_funcs.h @@ -157,15 +157,15 @@ TEST_CASE_TEMPLATE("[Math] asin/acos/atan", T, float, double) { CHECK(Math::asin((T)0.1) == doctest::Approx((T)0.1001674212)); CHECK(Math::asin((T)0.5) == doctest::Approx((T)0.5235987756)); CHECK(Math::asin((T)1.0) == doctest::Approx((T)1.5707963268)); - CHECK(Math::is_nan(Math::asin((T)1.5))); - CHECK(Math::is_nan(Math::asin((T)450.0))); + CHECK(Math::asin((T)2.0) == doctest::Approx((T)1.5707963268)); + CHECK(Math::asin((T)-2.0) == doctest::Approx((T)-1.5707963268)); CHECK(Math::acos((T)-0.1) == doctest::Approx((T)1.670963748)); CHECK(Math::acos((T)0.1) == doctest::Approx((T)1.4706289056)); CHECK(Math::acos((T)0.5) == doctest::Approx((T)1.0471975512)); CHECK(Math::acos((T)1.0) == doctest::Approx((T)0.0)); - CHECK(Math::is_nan(Math::acos((T)1.5))); - CHECK(Math::is_nan(Math::acos((T)450.0))); + CHECK(Math::acos((T)2.0) == doctest::Approx((T)0.0)); + CHECK(Math::acos((T)-2.0) == doctest::Approx((T)Math_PI)); CHECK(Math::atan((T)-0.1) == doctest::Approx((T)-0.0996686525)); CHECK(Math::atan((T)0.1) == doctest::Approx((T)0.0996686525)); |