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