Я испытываю неизвестное замедление при добавлении двойников к очень большому динамическому c вектору двойников в C ++.
Как видно ниже, похоже, что замедление происходит именно из-за добавления двойника, который был вычислен из длинной суммы функций cos и sin.
Когда только A_temp1 добавляется к динамическому c вектор, замедления нет:
for(int i=0;i<=imax;i++){
// neither of these cause slowdown on their own
A_temp1 = pi;
A_temp2 = [long-winded sum of sin and cos operations];
// no slowdown if only A_temp1 is added
A_dyn_vec[i] = A_temp1;
}
Однако при добавлении A_temp2 к вектору наблюдается значительное замедление:
for(int i=0;i<=imax;i++){
// neither of these cause slowdown on their own
A_temp1 = pi;
A_temp2 = [long-winded sum of sin and cos operations];
// significant slowdown
A_dyn_vec[i] = A_temp1 + A_temp2;
}
Также, когда оба объединяются в при одном значении A_temp наблюдается такое же значительное замедление:
for(int i=0;i<=imax;i++){
// neither of these cause slowdown on their own
A_temp = pi + [long-winded sum of sin and cos operations];
// significant slowdown
A_dyn_vec[i] = A_temp;
}
В общем, по какой-то причине добавление A_temp1 не вызывает замедления, а A_temp2 вызывает, хотя оба они дублируются.
A_temp2 определенно произошел от функции, содержащей длинную сумму функций cos и sin. Возможно, проблема возникает из-за того, как этот номер хранится, но я не могу точно понять, почему.
Я был бы очень признателен, если бы у кого-нибудь была информация о том, почему в этой ситуации происходит замедление и как этого избежать.
Спасибо!