Da Vinci Firmware 1
Firmware for the DaVinci-M rocket avionics board.
Loading...
Searching...
No Matches
norm.c
Go to the documentation of this file.
1/*
2 * Academic License - for use in teaching, academic research, and meeting
3 * course requirements at degree granting institutions only. Not for
4 * government, commercial, or other organizational use.
5 * File: norm.c
6 *
7 * MATLAB Coder version : 24.2
8 * C/C++ source code generated on : 05-May-2025 18:59:11
9 */
10
11/* Include Files */
12#include "norm.h"
13#include "rt_nonfinite.h"
14#include <math.h>
15
16/* Function Definitions */
17/*
18 * Arguments : const double x[3]
19 * Return Type : double
20 */
21double b_norm(const double x[3])
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}
56
57/*
58 * Arguments : const double x[4]
59 * Return Type : double
60 */
61double c_norm(const double x[4])
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}
105
106/*
107 * File trailer for norm.c
108 *
109 * [EOF]
110 */
double b_norm(const double x[3])
Calculates the Euclidean norm (magnitude) of a 3-element vector.
Definition norm.c:21
double c_norm(const double x[4])
Calculates the Euclidean norm (magnitude) of a 4-element vector.
Definition norm.c:61
Provides MATLAB Coder helper functions to calculate the Euclidean norm of a vector.
Provides definitions and utility functions for non-finite floating-point values.