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 ); }