Я хочу улучшить скорость моей текущей проблемы с добавлением двоичных файлов. То, что он делает, это создать 2 вектора с размером K и первым добавить 1. Возможно, он не может быть быстрее, но если это возможно, сообщите мне.Быстрое двоичное добавление C++
Edit: Модифицированный для изменения константный вектора & а, Const вектор & б
#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <vector>
using namespace std;
vector<int> BinaryAddition(const vector<int>& a, const vector<int>& b, int tam){
vector<int> c(tam);
int ac = 0;
for(int i=tam-1; i>-1; i--){
c[i] = ((a[i]^b[i])^ac); //a xor b xor c
ac = ((a[i] & b[i]) | (a[i] &ac)) | (b[i] & ac);
}
return c;
}
/* retorna "a - b" en segundos */
double performancecounter_diff(LARGE_INTEGER *a, LARGE_INTEGER *b)
{
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
return (double)(a->QuadPart - b->QuadPart)/(double)freq.QuadPart;
}
int main(int argc, char *argv[])
{
LARGE_INTEGER t_ini, t_fin;
double secs;
QueryPerformanceCounter(&t_ini);
int k=15;
vector<int> uno1 (k,0);
vector<int> pro (k,0);
vector<int> pro1(k,0);
uno1[k-1] = 1;
pro1 = BinaryAddition(pro, uno1, k);
QueryPerformanceCounter(&t_fin);
secs = performancecounter_diff(&t_fin, &t_ini);
printf("%.16g milliseconds\n", secs * 1000.0);
return 0;
}
Любой ответ, который делает это доступным для чтения снова без его замедления, получит мое преимущество. Оптимизаторы больше не такие глупые ... –
Интересно, когда простой «оператор +» вышел из моды. – rubenvb
не уверен, что делает ваше добавление, но если вы пытаетесь распространить бит переполнения добавления, ассемблер может вам подойдет лучше всего. CLC; // очищать флаг переноса один раз; АЦП a [i], b [i], c [i]; // Добавить с флагом переноса. 1 арифметическая инструкция вместо того, чтобы я думаю, 7 или более. –