2015-03-25 16 views
14

Dlaczego funkcja y[i] < x[i] zajmuje dwa razy więcej czasu, gdy tablica x ma zawsze wartość wyższą niż y (dla ex 1<x<2 i 0<y<1). Ponadto podczas porównywania 0.5<x<1.5 i 0<y<1 czas wykonania wynosi około 1,5 x w przypadku, gdy 0<x<1 i 0<y<1. Zakłada to, że zarówno x, jak i y są długimi tablicami.Złożoność operatorów porównania

Dodaję kod, aby spróbować zrozumieć, o co mi chodzi. można zrównoważyć tablicy X przez zwiększanie i zmniejszanie zmiennej „offset (spróbuj zrównoważyć = 1 offset = 0); Kod zapisze czas wykonania pętli w wersji beta plików

kod

jest:

.
#include <iostream> 
#include <array> 
#include <time.h> 
#include <math.h> 
using namespace std; 
#define MAX(x,y) ((x) > (y) ? (x) : (y)) 

int main() 
{ 
ofstream myfile_Beta; 
myfile_Beta.open ("Beta.txt"); 
clock_t begin_time = clock(); 
clock_t total_time; 
srand (time(NULL)); 

double offset =0.0; 

int m=0; 
for(int k=0;k<10000;k++) 
    { 
    m=1; 
    double M[75720],x[75720],y[75720]; 

    for (int i=0;i<75720;i++) 
    { 

     x[i]=+(rand()%1024)/1024.0* 1.0 + offset ; 
     y[i]=+(rand()%1024)/1024.0* 1.0 + 0.00; 
    } 
    begin_time = clock(); 
    for (int j=0;j<75720;j++) 
    { 
     M[j]=MAX(x[j],y[j]); 
    } 
    total_time =clock() - begin_time; 
    myfile_Beta <<float(total_time )<<" "<<endl; 
} 
myfile_Beta.close(); 
} 
+4

nie należy definiować własne 'MAX' użyj [' std :: max'] (http://en.cppreference.com/w/cpp/algorithm/ max) – Mgetz

+1

Dwukrotne wywołanie 'rand()' sprawia, że ​​twoje "przesunięcie" wygląda śmiesznie. – user3528438

+0

@Mgetz std :: max zużywa jeszcze więcej czasu. – user304584

Odpowiedz

0

Jednym z wyjaśnień jest to, że jest mniej skoki jeśli dotyczy to pierwszy warunek,

drugie wyjaśnienie odnośnie oddział orzekania, w zasadzie, gdzie mógłby „przypuszczenie”, w „<” wynik i zastosować następny kod niezależnie od Wynik i muck go na porażkę, więc gdy masz taki sam stan się stało stosunkowo dużo, kompilator może odgadnąć go poprawnie częściej. Możesz przeczytać więcej na ten temat tutaj: http://en.wikipedia.org/wiki/Branch_predication

+0

orzeczenie, nie "a" – user3528438

Powiązane problemy