Size: a a a

IT KPI C/C++ ХВ (не UB)

2020 November 13

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
медленно, не?
источник

VT

Vladislav Tolstikov in IT KPI C/C++ ХВ (не UB)
думаю нет, по крайней мере я не вижу способа быстрее сделать
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
uLongInt& move_arr(int i)
   {
       int s = number.size();
       if (i > 0)
       {
           for (int k = 0; k < i; k++)
               number.emplace_back();
           memmove(&(number[i]), &(number[0]), s);
           for (int k = 0; k < i; k++)
               number[k] = 0;
       }
       else if (i < 0)
       {
           memmove(&(number[0]), &(number[i]), s - i);
           for (int k = 0; k < i; k++)
               number.pop_back();
       }
       return *this;
   }
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
вот что я делаю не так
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
number = vector<uint64_t>
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
оно должно сдвинуть вправо или влево этот вектор
но в итоге фигня
источник

VT

Vladislav Tolstikov in IT KPI C/C++ ХВ (не UB)
источник

VT

Vladislav Tolstikov in IT KPI C/C++ ХВ (не UB)
вот я думаю такая реализация достаточно быстро n элементов в начало добавляет
источник

VT

Vladislav Tolstikov in IT KPI C/C++ ХВ (не UB)
можно бенчмарки позапускать))
источник

VT

Vladislav Tolstikov in IT KPI C/C++ ХВ (не UB)
Tony Lutsenko
uLongInt& move_arr(int i)
   {
       int s = number.size();
       if (i > 0)
       {
           for (int k = 0; k < i; k++)
               number.emplace_back();
           memmove(&(number[i]), &(number[0]), s);
           for (int k = 0; k < i; k++)
               number[k] = 0;
       }
       else if (i < 0)
       {
           memmove(&(number[0]), &(number[i]), s - i);
           for (int k = 0; k < i; k++)
               number.pop_back();
       }
       return *this;
   }
возможно, надо писать s * sizeof(int) ?
источник

VT

Vladislav Tolstikov in IT KPI C/C++ ХВ (не UB)
Vladislav Tolstikov
возможно, надо писать s * sizeof(int) ?
точнее sizeof(uint64_t)
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
охжежнафиг
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
точно
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
спас
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
благодарю
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
Ещё вопрос. Есть у меня такая реализация умножения большого числа:
// множится число А на число В разрядностью dB
создаётся массив промежуточных значений results_get[dB];
для i=0..dB:
{
результаты умножения числа на один разряд сдвигаются на i разрядов и заносятся в элемент массива results_get[i]
}

Это корректно работает для последовательного for, но как только я пытаюсь сделать его многопоточным, то он ругается на assertion error во время выполнения (большое число основано на vector<uint64_t>)

Из-за чего может проявляться ошибка при попытке взять его в потоки? Внешние переменные захватываю через [&], но вроде бы не меняю внутри лямбды.
источник

VT

Vladislav Tolstikov in IT KPI C/C++ ХВ (не UB)
Кинь код
источник

VT

Vladislav Tolstikov in IT KPI C/C++ ХВ (не UB)
но вообще ты в курсе про data race, и что общие участки куда ты пишешь нужно защищать мьютексом ?
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
Vladislav Tolstikov
но вообще ты в курсе про data race, и что общие участки куда ты пишешь нужно защищать мьютексом ?
Да, в курсе, поэтому я вроде бы не пишу в одни участки
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
Я пишу в разные элементы массива
источник