Прошу высказаться о возможностях ускорения кода, путем грамотного его написанья для указанных ниже кусков. Т.е. есть ли здесь какие-то приемы, позволяющие получить максимально быструю программу?
void dot_product(const double* x, const double* y, double *scalar){
*scalar = *x*(*y)+*(x+1)*(*(y+1))+*(x+2)*(*(y+2));
}
void cross_product(const double* x, const double* y, double *vector){
*vector = *(x+1)*(*(y+2)) - *(x+2)*(*(y+1));
*(vector+1) = - ( *x*(*(y+2)) - *(x+2)*(*y) );
*(vector+2) = *x*(*(y+1)) - *(x+1)*(*y) ;
}
void module(const double *vect, double *mod){
*mod = sqrt(pow(*vect,2.)+pow(*(vect+1),2.)+pow(*(vect+2),2.));
}
void dist_segm_point(const double *x, const double *a, const double *b, double *res){
double dist_ab, proj, r_ab[3], r_ax[3], r_bx[3], tmp_vect[3];
*r_ab = *b - *a;
*(r_ab+1) = *(b+1) - *(a+1);
*(r_ab+2) = *(b+2) - *(a+2);
*r_ax = *x - *a;
*(r_ax+1) = *(x+1) - *(a+1);
*(r_ax+2) = *(x+2) - *(a+2);
*r_bx = *x - *b;
*(r_bx+1) = *(x+1) - *(b+1);
*(r_bx+2) = *(x+2) - *(b+2);
module(r_ab,&dist_ab);
dot_product(r_ax,r_ab,&proj);
proj /= dist_ab;
if( proj<0 ){
module(r_ax,res);
} else if ( proj > dist_ab ){
module(r_bx,res);
} else {
cross_product(r_ab,r_ax,tmp_vect);
module(tmp_vect,res);
*res /= dist_ab;
}
}
// ...
// эти и другие функции нужны для процедуры заполнения матрицы
// и вызываются только в ней:
void matrix_maker( const int n_row, const double* vect_row, const int n_col, const double* vect_col, ... , double* mtx)
{
int i,j;
double xi1,yi1,zi1, ... ;
double xj1,yj1,zj1, ...;
const double* ptr_j;
for(i=0; i<n_row; ++i) {
xi1 = *(vect_row++);
yi1 = *(vect_row++);
...
ptr_j = vect_col;
for(j=0; j<n_col-1; ++j){
xj1 = *(ptr_j++);
yj1 = *(ptr_j++);
...
*(mtx++) = ... ;
..
25.07.11 17:53: Перенесено модератором из 'C/C++' — Odi$$ey