/*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 <math.h>
#include "fcrt.h"
#include "sdsdot.h"
#include <stdlib.h>
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 */