Commit Graph

74 Commits

Author SHA1 Message Date
Andrew Tridgell
154ae64e63 AP_Math: support either polarity in linear_interpolate() 2021-06-05 13:05:30 +10:00
Tom Pittenger
ba6bb21560 AP_Math: added helper for16bit float conversions 2021-04-28 19:22:53 -07:00
Andrew Tridgell
e884e4c5ac AP_Math: added fixedwing_turn_rate() helper 2021-02-27 14:42:20 +11:00
Andrew Tridgell
806852c9c3 AP_Math: speedup fill nanf 2020-11-10 16:15:45 +11:00
Andrew Tridgell
cdcf32d22c AP_Math: added calc_lowpass_alpha_dt()
used in several places
2020-11-10 16:15:45 +11:00
Michael du Breuil
051640e2b2 AP_Math: Log line numbers on constrain_nan's for constrain float 2020-11-03 11:04:13 +11:00
Patrick José Pereira
6ee401cb00 AP_Math: Remove isnan check for non-float type
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2020-10-16 09:22:05 +11:00
Tom Pittenger
787d7f5254 Revert "AP_Math: add function to convert any base to any base"
This reverts commit 935cb39dff.
2020-10-07 19:11:38 +11:00
Tom Pittenger
935cb39dff AP_Math: add function to convert any base to any base
Example: convert dec 12345 to 0x12345 or dec 1200 to octal 1200
2020-09-15 13:09:50 -07:00
Randy Mackay
bdb67532b0 AP_Math: clarify get_vel_correction_for_sensor_offset comment 2020-06-02 08:33:42 +09:00
Randy Mackay
4639e8a698 AP_Math: add get_vel_correction_for_sensor_offset 2020-06-01 17:51:24 +09:00
Peter Barker
58a8e54d83 AP_Math: create and use INTERNAL_ERROR macro so we get line numbers 2020-04-30 13:21:36 +10:00
Patrick José Pereira
1635054c4f AP_Math: Add missing constexpr
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2020-03-17 10:23:47 +11:00
Andrew Tridgell
66b4e92444 AP_Math: make fill_nanf() use a signalling NaN
we want use of these values to trigger a FPE
2019-10-01 17:35:26 +10:00
Peter Barker
6fe09b6120 AP_Math: move is_valid_octal into adsb
This doesn't ensure the value is octal digits - there's more magic in
it.
2019-10-01 09:18:15 +10:00
Peter Barker
975804fa35 AP_Math: remove unit_mod concept from wrap functions
devcall decided it would be clearer to have non-shared implementation
for the _cd variants
2019-09-25 13:19:44 +10:00
Andrew Tridgell
9b746b89db AP_Math: added fill_nanf()
used in SITL to invalidate memory
2019-09-24 12:51:54 +10:00
Peter Barker
5692f3d79e AP_Math: stop returning float for integer wrap_180/wrap_360 etc 2019-09-18 12:57:02 +10:00
Mark Whitehorn
b515431008 AP_Math: add expo and throttle_curve functions 2019-04-23 09:46:38 +10:00
Peter Barker
381bb41a5e AP_Math: make constraining NaNs an internal error 2019-04-09 10:18:43 +10:00
Andrew Tridgell
d4eaf09baf AP_Math: added rotation_equal() 2018-10-01 14:26:56 +09:00
Peter Barker
8fee27937a AP_Math: eliminate SITL float-equals issues 2018-08-28 09:54:47 +10:00
Peter Barker
6af0dcfed0 AP_Math: create a constrain_int64
The template system doesn't work across 32/64 bit builds (SITL
vs fmuv4), probably because int is typedef'd to int64
2018-06-15 08:01:22 +10:00
Tom Pittenger
3653ba61d7 AP_Math: add is_valid_octal helper function.
returns true if valid
2018-05-23 14:02:45 -07:00
Andrew Tridgell
d4d7d1f734 AP_Math: avoid double maths when not needed 2018-05-07 11:43:23 +10:00
Andrew Tridgell
f5b24a3838 AP_Math: fixed build of Sub with ChibiOS 2018-01-15 11:46:02 +11:00
Andrew Tridgell
f088c3de23 AP_Math: added long templates 2018-01-15 11:46:02 +11:00
Miguel Arroyo
7cea21afa2 AP_Math: Moves rand_vec3f from SITL_State. 2017-06-29 09:22:08 +10:00
Francisco Ferreira
da5060964b AP_Math: uniformize template type parameter keyword
Use typename everywhere instead of class
2017-06-21 18:19:31 +09:00
Andrew Tridgell
2fcecaa7c5 AP_Math: added rand_float() 2017-05-03 20:12:04 +10:00
Lucas De Marchi
82d210144b AP_Math: remove warnings from constrain_value()
Return type is T which can be an integral type, float or double. By
dividing by 2 we avoid float operation on the first case and do the
right thing on the second and third.
2017-01-27 12:15:19 -08:00
Lucas De Marchi
2605c7265b AP_Math: remove warnings from safe_asin()
Return type is float, so operate on float types everywhere.
Fixes this warning while building for PX4:

../../libraries/AP_Math/AP_Math.cpp: In instantiation of 'float safe_asin(T) [with T = double]':
../../libraries/AP_Math/AP_Math.cpp:56:48:   required from here
../../libraries/AP_Math/AP_Math.cpp:44:11: warning: implicit conversion from 'float' to 'double' to match other operand of binary expression [-Wdouble-promotion]
     if (v >= 1.0f) {
           ^
../../libraries/AP_Math/AP_Math.cpp:47:11: warning: implicit conversion from 'float' to 'double' to match other operand of binary expression [-Wdouble-promotion]
     if (v <= -1.0f) {
           ^
2017-01-27 12:15:19 -08:00
Lucas De Marchi
4f8d2059f8 AP_Math: use right epsilon for is_equal()
We are calling fabsf(), which returns a float. We should use the epsilon
from float type, not from the argument type passed to fabsf().

On the other hand when the double version is instantiated we do want to
use the std::numeric_limits<double>::epsilon() value.

This adds a branch to the function, but it's removed when the function
is intantiated by the compiler since the type is known at compile-time.

Fixes this warning when building for PX4:
../../libraries/AP_Math/AP_Math.cpp: In instantiation of 'typename std::enable_if<std::is_floating_point<typename std::common_type<_Tp, _Up>::type>::value, bool>::type is_equal(Arithmetic1, Arithmetic2) [with Arithmetic1 = double; Arithmetic2 = double; typename std::enable_if<std::is_floating_point<typename std::common_type<_Tp, _Up>::type>::value, bool>::type = bool]':
../../libraries/AP_Math/AP_Math.cpp:23:66:   required from here
../../libraries/AP_Math/AP_Math.cpp:17:29: warning: implicit conversion from 'float' to 'double' to match other operand of binary expression [-Wdouble-promotion]
     return fabsf(v_1 - v_2) < std::numeric_limits<decltype(v_1 - v_2)>::epsilon();
                             ^
2017-01-27 12:15:19 -08:00
murata
e903cb9945 AP_Math: Change mask value to hexadecimal number. 2017-01-17 10:20:15 -08:00
Pierre Kancir
da49149d19 AP_Math: is_equal correct comparison for integer as epsilon doesn't exist.
Credit to Kwikius for the right solution
2016-12-20 14:09:04 +00:00
Andrew Tridgell
a8d10e8c2c AP_Math: added get_random16() 2016-12-02 09:49:38 +11:00
Ricardo de Almeida Gonzaga
481e3a2af6 AP_Math: Fix typos 2016-05-13 19:20:06 -03:00
dgrat
6d3b491c02 AP_Math: Replace is_equal with a type safe template function
It makes sense to consider also other floating point types.
2016-05-10 11:41:26 -03:00
dgrat
503867b7dc AP_Math: Replace safe_sqrt() by template function 2016-05-10 11:41:26 -03:00
dgrat
5deb0e8e03 AP_Math: Replace safe_asin() by template function 2016-05-10 11:41:26 -03:00
Lucas De Marchi
846b4927ec AP_Math: use if/else chain instead of 2 ternary operators 2016-05-10 11:41:26 -03:00
dgrat
174f899a29 AP_Math: Replace the constrain_* functions by a single template
Besides being simpler this reduces ~4k in the binary size for PX4.
2016-05-10 11:41:26 -03:00
Lucas De Marchi
880f130670 AP_Math: fix loss of precision on float addition
When using wrap_180_cd() we are adding a small float (180 * 100) to a
possibly big number. This may lose float precision as illustrated by the
unit test failing:

    OUT: ../../libraries/AP_Math/tests/test_math.cpp:195: Failure
    OUT: Value of: wrap_180_cd(-3600000000.f)
    OUT:   Actual: -80
    OUT: Expected: 0.f
    OUT: Which is: 0
2016-05-10 11:41:26 -03:00
dgrat
76362caee0 AP_Math: Replace wrap_* functions with template versions 2016-05-10 11:41:26 -03:00
Andrew Tridgell
6bff07397e AP_Math: added linear_interpolate() function 2016-04-02 22:44:47 +11:00
dgrat
5148e41c1a AP_Math: Cleaned macro definitions
Moved Definitions into a separate header. Replaced PI with M_PI and
removed the M_PI_*_F macros.
2016-02-27 02:51:33 -03:00
dgrat
7c4c8ea579 AP_Math: Remove ROTATION_COMBINATION_SUPPORT
This function is not used.
2016-02-27 02:51:33 -03:00
Valmantas Palikša
d4daf19151 AP_Math: Move simple math function implementations to header for better
compile time optimization

Functions like sq() are better moved to the header file as inline.
Compiler can then optimize these out when used in code, this saves cpu
cycles with stack push, pop during function calls.
2015-09-09 09:57:51 +10:00
Randy Mackay
46c652e42f Math: maxf and minf functions 2015-08-19 16:44:34 +09:00
Andrew Tridgell
77a2b4acf6 AP_Math: removed fast_atan 2015-05-05 13:57:22 +10:00