Listing 2

float ScalarProduct( float* a1, float* a2, int n )
{
  float ans = 0.0;
  register int i;

  if( n >= 8 )
  {
    for( i = 0; i < ( n >> 3 ); ++i, a1 += 8, a2 += 8 )
      ans += a1[0] * a2[0] + a1[1] * a2[1] +
             a1[2] * a2[2] + a1[3] * a2[3] +
             a1[4] * a2[4] + a1[5] * a2[5] +
             a1[6] * a2[6] + a1[7] * a2[7];
    n -= i << 3;
  }
  for( i = 0; i < n; ++i )
    ans += a1[i] * a2[i];
  return( ans );
}