| *DECK SDSDOTF |
| REAL FUNCTION SDSDOTF (N, SB, SX, INCX, SY, INCY) |
| C***BEGIN PROLOGUE SDSDOT |
| C***PURPOSE Compute the inner product of two vectors with extended |
| C precision accumulation. |
| C***LIBRARY SLATEC (BLAS) |
| C***CATEGORY D1A4 |
| C***TYPE SINGLE PRECISION (SDSDOT-S, CDCDOT-C) |
| C***KEYWORDS BLAS, DOT PRODUCT, INNER PRODUCT, LINEAR ALGEBRA, VECTOR |
| C***AUTHOR Lawson, C. L., (JPL) |
| C Hanson, R. J., (SNLA) |
| C Kincaid, D. R., (U. of Texas) |
| C Krogh, F. T., (JPL) |
| C***DESCRIPTION |
| C |
| C B L A S Subprogram |
| C Description of Parameters |
| C |
| C --Input-- |
| C N number of elements in input vector(s) |
| C SB single precision scalar to be added to inner product |
| C SX single precision vector with N elements |
| C INCX storage spacing between elements of SX |
| C SY single precision vector with N elements |
| C INCY storage spacing between elements of SY |
| C |
| C --Output-- |
| C SDSDOT single precision dot product (SB if N .LE. 0) |
| C |
| C Returns S.P. result with dot product accumulated in D.P. |
| C SDSDOT = SB + sum for I = 0 to N-1 of SX(LX+I*INCX)*SY(LY+I*INCY), |
| C where LX = 1 if INCX .GE. 0, else LX = 1+(1-N)*INCX, and LY is |
| C defined in a similar way using INCY. |
| C |
| C***REFERENCES C. L. Lawson, R. J. Hanson, D. R. Kincaid and F. T. |
| C Krogh, Basic linear algebra subprograms for Fortran |
| C usage, Algorithm No. 539, Transactions on Mathematical |
| C Software 5, 3 (September 1979), pp. 308-323. |
| C***ROUTINES CALLED (NONE) |
| C***REVISION HISTORY (YYMMDD) |
| C 791001 DATE WRITTEN |
| C 890531 Changed all specific intrinsics to generic. (WRB) |
| C 890831 Modified array declarations. (WRB) |
| C 890831 REVISION DATE from Version 3.2 |
| C 891214 Prologue converted to Version 4.0 format. (BAB) |
| C 920310 Corrected definition of LX in DESCRIPTION. (WRB) |
| C 920501 Reformatted the REFERENCES section. (WRB) |
| C***END PROLOGUE SDSDOT |
| REAL SX(*), SY(*), SB |
| DOUBLE PRECISION DSDOT |
| C***FIRST EXECUTABLE STATEMENT SDSDOT |
| DSDOT = SB |
| IF (N .LE. 0) GO TO 30 |
| IF (INCX.EQ.INCY .AND. INCX.GT.0) GO TO 40 |
| C |
| C Code for unequal or nonpositive increments. |
| C |
| KX = 1 |
| KY = 1 |
| IF (INCX .LT. 0) KX = 1+(1-N)*INCX |
| IF (INCY .LT. 0) KY = 1+(1-N)*INCY |
| DO 10 I = 1,N |
| DSDOT = DSDOT + DBLE(SX(KX))*DBLE(SY(KY)) |
| KX = KX + INCX |
| KY = KY + INCY |
| 10 CONTINUE |
| 30 SDSDOTF = DSDOT |
| RETURN |
| C |
| C Code for equal and positive increments. |
| C |
| 40 NS = N*INCX |
| DO 50 I = 1,NS,INCX |
| DSDOT = DSDOT + DBLE(SX(I))*DBLE(SY(I)) |
| 50 CONTINUE |
| SDSDOTF = DSDOT |
| RETURN |
| END |