Da Vinci Firmware 1
Firmware for the DaVinci-M rocket avionics board.
Loading...
Searching...
No Matches
norm.c File Reference
#include "norm.h"
#include "rt_nonfinite.h"
#include <math.h>
Include dependency graph for norm.c:

Go to the source code of this file.

Functions

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.
 

Function Documentation

◆ b_norm()

double b_norm ( const double  x[3])

Calculates the Euclidean norm (magnitude) of a 3-element vector.

Parameters
[in]xA 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().

Here is the caller graph for this function:

◆ c_norm()

double c_norm ( const double  x[4])

Calculates the Euclidean norm (magnitude) of a 4-element vector.

Parameters
[in]xA 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().

Here is the caller graph for this function: