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.
This commit is contained in:
parent
769d8a7bbe
commit
50c5ed4876
5 changed files with 16 additions and 13 deletions
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue