рекомендации по ускорению
От: reseacher2011  
Дата: 25.07.11 12:15
Оценка: -1 :)
Прошу высказаться о возможностях ускорения кода, путем грамотного его написанья для указанных ниже кусков. Т.е. есть ли здесь какие-то приемы, позволяющие получить максимально быструю программу?

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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.