Re: mach_absolute_time() vs. sleep() [solved]
site_archiver@lists.apple.com Delivered-To: Darwin-dev@lists.apple.com -(double)machElapsedTime:(uint64_t) start endTime: (uint64_t) endTime { uint64_t diff = endTime - start; static double conversion = 0.0; if (conversion == 0.0) { mach_timebase_info_data_t info; kern_return_t err = mach_timebase_info(&info); if (err == 0) conversion = info.denom / 1e9 * info.numer; } return diff * conversion; } On Apr 30, 2008, at 5:52 PM, Kristopher Matthews wrote: It was my fault. It turned out to be a pretty idiotic problem: should be "return diff / conversion;" Go go copying samples. For completeness: -(double)machElapsedTime:(uint64_t) start endTime: (uint64_t) endTime { uint64_t diff = endTime - start; static double conversion = 0.0; if (conversion == 0.0) { mach_timebase_info_data_t info; kern_return_t err = mach_timebase_info(&info); if (err == 0) conversion = 1e9 * info.numer / info.denom; } return diff / conversion; } On Apr 30, 2008, at 4:09 PM, Terry Lambert wrote: Can you assure me that this is not for a homework assignment? -- Terry On Apr 30, 2008, at 3:30 PM, Terry Lambert wrote: It should be: double mach_elapsed_time(uint64_t start, uint64_t endTime) { _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-dev/kmmx%40mac.com _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-dev/site_archiver%40lists.appl... This email sent to site_archiver@lists.apple.com As "Ahruman" on freenode pointed out, it's faster to swap the original divide and use a multiply at the end: (PS. That code is actually from http://macresearch.org/tutorial_performance_and_time ) return conversion * (double) diff; Actually, it doesn't; the margin is just small enough that you don't notice it. On Apr 30, 2008, at 1:34 PM, Kristopher Matthews wrote: Care to elaborate? This code works fine in all circumstances where sleep() is not called. On Apr 30, 2008, at 4:13 AM, Kristopher Matthews wrote: If you see my followup message, I wrote the sample code for this email incorrectly. My apologies. :) You are doing a couple of really simple things wrong, but the worst is being wrong about operator precedence order in C. This email sent to kmmx@mac.com smime.p7s
participants (1)
-
Kristopher Matthews