#include "norm.h"
#include "rt_nonfinite.h"
#include <math.h>
Go to the source code of this file.
|
| double | b_norm (const double x[3]) |
| | Calculates the Euclidean norm (magnitude) of a 3-element vector.
|
| |
| double | c_norm (const double x[4]) |
| | Calculates the Euclidean norm (magnitude) of a 4-element vector.
|
| |
◆ b_norm()
| double b_norm |
( |
const double |
x[3] | ) |
|
Calculates the Euclidean norm (magnitude) of a 3-element vector.
- Parameters
-
| [in] | x | A 3-element array representing the input vector. |
- Returns
- The Euclidean norm of the vector as a double.
Definition at line 21 of file norm.c.
22{
23 double absxk;
24 double scale;
25 double t;
26 double y;
27 scale = 3.3121686421112381E-170;
28 absxk = fabs(x[0]);
29 if (absxk > 3.3121686421112381E-170) {
30 y = 1.0;
31 scale = absxk;
32 } else {
33 t = absxk / 3.3121686421112381E-170;
34 y = t * t;
35 }
36 absxk = fabs(x[1]);
37 if (absxk > scale) {
38 t = scale / absxk;
39 y = y * t * t + 1.0;
40 scale = absxk;
41 } else {
42 t = absxk / scale;
43 y += t * t;
44 }
45 absxk = fabs(x[2]);
46 if (absxk > scale) {
47 t = scale / absxk;
48 y = y * t * t + 1.0;
49 scale = absxk;
50 } else {
51 t = absxk / scale;
52 y += t * t;
53 }
54 return scale * sqrt(y);
55}
Referenced by mekf().
◆ c_norm()
| double c_norm |
( |
const double |
x[4] | ) |
|
Calculates the Euclidean norm (magnitude) of a 4-element vector.
- Parameters
-
| [in] | x | A 4-element array representing the input vector. |
- Returns
- The Euclidean norm of the vector as a double.
Definition at line 61 of file norm.c.
62{
63 double absxk;
64 double scale;
65 double t;
66 double y;
67 scale = 3.3121686421112381E-170;
68 absxk = fabs(x[0]);
69 if (absxk > 3.3121686421112381E-170) {
70 y = 1.0;
71 scale = absxk;
72 } else {
73 t = absxk / 3.3121686421112381E-170;
74 y = t * t;
75 }
76 absxk = fabs(x[1]);
77 if (absxk > scale) {
78 t = scale / absxk;
79 y = y * t * t + 1.0;
80 scale = absxk;
81 } else {
82 t = absxk / scale;
83 y += t * t;
84 }
85 absxk = fabs(x[2]);
86 if (absxk > scale) {
87 t = scale / absxk;
88 y = y * t * t + 1.0;
89 scale = absxk;
90 } else {
91 t = absxk / scale;
92 y += t * t;
93 }
94 absxk = fabs(x[3]);
95 if (absxk > scale) {
96 t = scale / absxk;
97 y = y * t * t + 1.0;
98 scale = absxk;
99 } else {
100 t = absxk / scale;
101 y += t * t;
102 }
103 return scale * sqrt(y);
104}
Referenced by mekf().