Здравствуйте Pavel XP, Вы писали:
PX>
PX>PX>double *aa = new double [DIMSIZE];
PX> double *bb = new double [DIMSIZE];
PX> Вариант 1.
PX> double p=0;
PX> for(int k=0;k<DIMSIZE;k++) p += aa[k]*bb[k];
PX> Вариант 2.
PX> p = inner_product(aa, aa+DIMSIZE, bb, 0);
PX>
PX> Вариант2 выполняется в 3 раза медленнее на BCB и в 5 раз на VC.
PX> Это почему так. Может я что не так понял.
Потому что эти два варианта делают разные вещи. В качестве последнего параметра 'inner_product' ты указал '0'. '0' — это константа целого типа. Поэтому 'inner_product' ведет вычисления в рамках целого типа и на каждой итерации тратит время на то, чтобы сконвертировать очередное произведение из типа 'double' в тип 'int'.
Вызывай 'inner_product' так:
p = inner_product(aa, aa+DIMSIZE, bb, 0.0);
И все будет работать одинаково.