-
May 26th, 2010, 03:22 PM
#1
Precision of clock()
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?
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;
}
Thanks for your time.
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|