File: mult.c

package info (click to toggle)
grass 8.4.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 277,040 kB
  • sloc: ansic: 460,798; python: 227,732; cpp: 42,026; sh: 11,262; makefile: 7,007; xml: 3,637; sql: 968; lex: 520; javascript: 484; yacc: 450; asm: 387; perl: 157; sed: 25; objc: 6; ruby: 4
file content (44 lines) | stat: -rw-r--r-- 1,230 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/* Author: Bill Hoff,2-114C,8645,3563478 (hoff) at uicsl */

/*!
 * \fn int G_math_complex_mult (double *v1[2], int size1, double *v2[2], int
 * size2, double *v3[2], int size3)
 *
 * \brief Multiply two complex vectors, point by point
 *
 * Vectors are in the form: real, imaginary (each a floating number).
 * A vector can be of any size. Computes <b>v3</b> = <b>v1</b> *
 * <b>v2</b>.  <b>v3</b> should as big as the biggest of <b>v1</b> and
 * <b>v2</b>.
 *
 * \param v1
 * \param size1
 * \param v2
 * \param size2
 * \param v3
 * \param size3
 * \return int
 */

int G_math_complex_mult(double *v1[2], int size1, double *v2[2], int size2,
                        double *v3[2], int size3)
{
    int i, n;

    n = (size1 < size2 ? size1 : size2); /* get the smaller size */
    for (i = 0; i < n; i++) {
        *(v3[0] + i) =
            *(v1[0] + i) * *(v2[0] + i) - *(v1[1] + i) * *(v2[1] + i);
        *(v3[1] + i) =
            *(v1[0] + i) * *(v2[1] + i) + *(v2[0] + i) * *(v1[1] + i);
    }

    /* if unequal size, zero out remaining elements of larger vector */
    if (size1 != size2)
        for (i = n; i < size3; i++) {
            *(v3[0] + i) = 0.0;
            *(v3[1] + i) = 0.0;
        }

    return 0;
}