/*Translated by FOR_C, v3.4.2 (-), on 07/09/115 at 08:30:09 */ /*FOR_C Options SET: ftn=u io=c no=p op=aimnv s=dbov str=l x=f - prototypes */ #include #include "fcrt.h" #include "sdsdot.h" #include float /*FUNCTION*/ sdsdot( long n, float sb, float sx[], long incx, float sy[], long incy) { long int _d_l, _d_m, _do0, _do1, i, kx, ky, ns; float sdsdot_v; double dsdot; /* OFFSET Vectors w/subscript range: 1 to dimension */ float *const Sx = &sx[0] - 1; float *const Sy = &sy[0] - 1; /* end of OFFSET VECTORS */ /* Copyright (c) 1996 California Institute of Technology, Pasadena, CA. * ALL RIGHTS RESERVED. * Based on Government Sponsored Research NAS7-03001. *>> 1996-03-30 SDSDOT Krogh SNGL => REAL. *>> 1994-11-11 SDSDOT Krogh Declared all vars. *>> 1985-08-02 SDSDOT Lawson Initial code. * * RETURNS S.P. RESULT WITH DOT PRODUCT ACCUMULATED IN D.P. * SDSDOT = SB + SUM FOR I = 0 TO N-1 OF SX(LX+I*INCX)*SY(LY+I*INCY), * WHERE LX = 1 IF INCX .GE. 0, ELSE LX = (-INCX)*N, AND LY IS * DEFINED IN A SIMILAR WAY USING INCY. * */ dsdot = (double)( sb ); if (n <= 0) goto L_30; if (incx == incy && incx > 0) goto L_40; kx = 1; ky = 1; if (incx < 0) kx = 1 + (1 - n)*incx; if (incy < 0) ky = 1 + (1 - n)*incy; for (i = 1; i <= n; i++) { dsdot += (double)( Sx[kx] )*(double)( Sy[ky] ); kx += incx; ky += incy; } L_30: sdsdot_v = (float)( dsdot ); return( sdsdot_v ); L_40: ; ns = n*incx; for (i = 1, _do0=DOCNT(i,ns,_do1 = incx); _do0 > 0; i += _do1, _do0--) { dsdot += (double)( Sx[i] )*(double)( Sy[i] ); } sdsdot_v = (float)( dsdot ); return( sdsdot_v ); } /* end of function */