dladiv.c

来自「InsightToolkit-1.4.0(有大量的优化算法程序)」· C语言 代码 · 共 59 行

C
59
字号
#include "f2c.h"
#include "netlib.h"

/* Modified by Peter Vanroose, June 2001, to allow p/q being equal to a,b,c or d */

/* Subroutine */ void dladiv_(a, b, c, d, p, q)
const doublereal *a, *b, *c, *d;
doublereal *p, *q;
{
    static doublereal e, f, t;

/*  -- LAPACK auxiliary routine (version 2.0) --                          */
/*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,        */
/*     Courant Institute, Argonne National Lab, and Rice University       */
/*     October 31, 1992                                                   */

/*  Purpose                                                               */
/*  =======                                                               */
/*                                                                        */
/*  DLADIV performs complex division in  real arithmetic                  */
/*                                                                        */
/*                        a + i*b                                         */
/*             p + i*q = ---------                                        */
/*                        c + i*d                                         */
/*                                                                        */
/*  The algorithm is due to Robert L. Smith and can be found              */
/*  in D. Knuth, The art of Computer Programming, Vol.2, p.195            */
/*                                                                        */
/*  Arguments                                                             */
/*  =========                                                             */
/*                                                                        */
/*  A       (input) DOUBLE PRECISION                                      */
/*  B       (input) DOUBLE PRECISION                                      */
/*  C       (input) DOUBLE PRECISION                                      */
/*  D       (input) DOUBLE PRECISION                                      */
/*          The scalars a, b, c, and d in the above expression.           */
/*                                                                        */
/*  P       (output) DOUBLE PRECISION                                     */
/*  Q       (output) DOUBLE PRECISION                                     */
/*          The scalars p and q in the above expression.                  */
/*                                                                        */
/*  ===================================================================== */

    if (abs(*d) < abs(*c)) {
        e = *d / *c;
        f = *c + *d * e;
        t  = (*a + *b * e) / f;
        *q = (*b - *a * e) / f;
        *p = t;
    } else {
        e = *c / *d;
        f = *d + *c * e;
        t  = (*a * e + *b) / f;
        *q = (*b * e - *a) / f;
        *p = t;
    }
} /* dladiv_ */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?