mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-01 21:07:40 +08:00
added a divide by 0 failsafe (#2209)
* added a divide by 0 failsafe * added checks in pprz_stat code * implemented proposed fixes * restored size div
This commit is contained in:
@@ -38,13 +38,17 @@
|
|||||||
*/
|
*/
|
||||||
int32_t mean_i(int32_t *array, uint32_t n_elements)
|
int32_t mean_i(int32_t *array, uint32_t n_elements)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (n_elements == 0) {
|
||||||
|
// Note that something else is wrong if you want the mean of 0 samples.
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
// determine the mean for the vector:
|
// determine the mean for the vector:
|
||||||
float sum = 0.f;
|
float sum = 0.f;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
for (i = 0; i < n_elements; i++) {
|
for (i = 0; i < n_elements; i++) {
|
||||||
sum += (float)array[i];
|
sum += (float)array[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
return (int32_t)(sum / n_elements);
|
return (int32_t)(sum / n_elements);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,6 +77,10 @@ int32_t variance_i(int32_t *array, uint32_t n_elements)
|
|||||||
*/
|
*/
|
||||||
int32_t covariance_i(int32_t *array1, int32_t *array2, uint32_t n_elements)
|
int32_t covariance_i(int32_t *array1, int32_t *array2, uint32_t n_elements)
|
||||||
{
|
{
|
||||||
|
if (n_elements == 0) {
|
||||||
|
// Note that something else is wrong if you want the covariance of 0 samples.
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
// Determine means for each vector:
|
// Determine means for each vector:
|
||||||
float sumX = 0.f, sumY = 0.f, sumXY = 0.f;
|
float sumX = 0.f, sumY = 0.f, sumXY = 0.f;
|
||||||
|
|
||||||
@@ -83,7 +91,6 @@ int32_t covariance_i(int32_t *array1, int32_t *array2, uint32_t n_elements)
|
|||||||
sumY += (float)array2[i];
|
sumY += (float)array2[i];
|
||||||
sumXY += (float)(array1[i]) * (float)(array2[i]);
|
sumXY += (float)(array1[i]) * (float)(array2[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (int32_t)(sumXY / n_elements - sumX * sumY / (n_elements * n_elements));
|
return (int32_t)(sumXY / n_elements - sumX * sumY / (n_elements * n_elements));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,6 +121,10 @@ float sum_f(float *array, uint32_t n_elements)
|
|||||||
*/
|
*/
|
||||||
float mean_f(float *array, uint32_t n_elements)
|
float mean_f(float *array, uint32_t n_elements)
|
||||||
{
|
{
|
||||||
|
if (n_elements == 0) {
|
||||||
|
// Note that something else is wrong if you want the mean of 0 samples.
|
||||||
|
return 0.f;
|
||||||
|
}
|
||||||
return (sum_f(array, n_elements) / n_elements);
|
return (sum_f(array, n_elements) / n_elements);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,6 +151,10 @@ float variance_f(float *array, uint32_t n_elements)
|
|||||||
*/
|
*/
|
||||||
float covariance_f(float *arr1, float *arr2, uint32_t n_elements)
|
float covariance_f(float *arr1, float *arr2, uint32_t n_elements)
|
||||||
{
|
{
|
||||||
|
if (n_elements == 0) {
|
||||||
|
// Note that something else is wrong if you want the covariance of 0 samples.
|
||||||
|
return 0.f;
|
||||||
|
}
|
||||||
// Determine means for each vector:
|
// Determine means for each vector:
|
||||||
float sumX = 0.f, sumY = 0.f, sumXY = 0.f;
|
float sumX = 0.f, sumY = 0.f, sumXY = 0.f;
|
||||||
|
|
||||||
@@ -150,6 +165,5 @@ float covariance_f(float *arr1, float *arr2, uint32_t n_elements)
|
|||||||
sumY += arr2[i];
|
sumY += arr2[i];
|
||||||
sumXY += arr1[i] * arr2[i];
|
sumXY += arr1[i] * arr2[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
return (sumXY / n_elements - sumX * sumY / (n_elements * n_elements));
|
return (sumXY / n_elements - sumX * sumY / (n_elements * n_elements));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user