Hey!
I'm fairly new to programming in general and forums (never been a member before!). I tried finding something on this topic, but failed to find anything.
So.. I've written the following code and was wondering if the clock funciton, along with CLOCKS_PER_SEC is indeed accurate to 10 decimal places. I find that a little hard to believe. Are there any other functions in C++ that allow you to write code with respect to time?
Thanks for your time.Code:#include<ctime> #include<iostream> using namespace std; int main(void){ //Reads in one random double in the range [0,1> to //"kort" every 1/fs seconds. Writes the time elapsed //for evert 1000th sample. Returns the total time elapsed //since the operation began. Expected return value is //equal to n. int n = 3; int fs = 44100; double* kort = new double[fs*n]; //Get initial value of clock ticks since "main" started double start = clock(); //Note: "i++" missing from "for" statement for(int i=0; i<fs*n;){ //Get the number of times the clock has been incremented //since the initial value was set double interval = clock() - start; //Checks if the clock har been incremented enough times //to be sure that 1/fs seconds have gone by if(interval/CLOCKS_PER_SEC >= (double)(i+1)/fs){ //Generate random double in range [0,1> kort[i] = (double)rand()/(double)(RAND_MAX+1); //Cannot write for every sample, due to the latency //introduced by "cout" operation if(i%1000==0) cout<< interval/CLOCKS_PER_SEC << endl; //Increment i to continue the loop i++; } //i remains the same if if-satement returns false //because kort[i] has not been initialized with //a valid value yet. This is because the next sample //will not have been passed to the program if if-statement //returns false. } //Gets total amount of times clock has been incremented since //the beginning of the program. double timeElapsed2 = clock()-start; //Converts number of clock incrementations to seconds timeElapsed2 = timeElapsed2/CLOCKS_PER_SEC; //Returns number of seconds the operation has taken cout<< "Operation took " << timeElapsed2 << " seconds to complete.\n"; if(abs(timeElapsed2-(double)n) < 1e-9) cout<< "Expectations have been met.\n"; else cout<< "Expectations have not been met. Optimize code further.\n"; return 0; }


Reply With Quote

Bookmarks