#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
double get_time()
{
struct timeval t;
struct timezone tzp;
gettimeofday(&t, &tzp);
return t.tv_sec + t.tv_usec*1e-6;
}
int main() {
double worst_time = 0.0;
double best_time = 1e6;
volatile double x0 = -M_PI/2.0;
volatile double foo = atan(x0); // SLOW CALL HERE
volatile double sum = 0.0; // volatile to avoid having tan() call optimized away
for (double x = x0; x < M_PI/3.0; x += 0.1) {
volatile double y = x;
const double start = get_time();
const double value = atan(y);
const double end = get_time();
sum += value;
const double delta = end - start;
if (delta > worst_time) {
worst_time = delta;
}
if (delta < best_time) {
best_time = delta;
}
printf("* %f (value: %f)\n", delta, y);
}
printf("%f / %f\n", worst_time, best_time);
printf("%f\n", foo);
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjbWF0aD4KCiNpbmNsdWRlIDxzeXMvdGltZS5oPgojaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KCmRvdWJsZSBnZXRfdGltZSgpCnsKICAgIHN0cnVjdCB0aW1ldmFsIHQ7CiAgICBzdHJ1Y3QgdGltZXpvbmUgdHpwOwogICAgZ2V0dGltZW9mZGF5KCZ0LCAmdHpwKTsKICAgIHJldHVybiB0LnR2X3NlYyArIHQudHZfdXNlYyoxZS02Owp9CgppbnQgbWFpbigpIHsKICAgIGRvdWJsZSB3b3JzdF90aW1lID0gMC4wOwogICAgZG91YmxlIGJlc3RfdGltZSA9IDFlNjsKCiAgICB2b2xhdGlsZSBkb3VibGUgeDAgPSAtTV9QSS8yLjA7CiAgICB2b2xhdGlsZSBkb3VibGUgZm9vID0gYXRhbih4MCk7IC8vIFNMT1cgQ0FMTCBIRVJFCiAgICB2b2xhdGlsZSBkb3VibGUgc3VtID0gMC4wOyAvLyB2b2xhdGlsZSB0byBhdm9pZCBoYXZpbmcgdGFuKCkgY2FsbCBvcHRpbWl6ZWQgYXdheQogICAgZm9yIChkb3VibGUgeCA9IHgwOyB4IDwgTV9QSS8zLjA7IHggKz0gMC4xKSB7CiAgICAgICAgdm9sYXRpbGUgZG91YmxlIHkgPSB4OwogICAgICAgIGNvbnN0IGRvdWJsZSBzdGFydCA9IGdldF90aW1lKCk7CiAgICAgICAgY29uc3QgZG91YmxlIHZhbHVlID0gYXRhbih5KTsKICAgICAgICBjb25zdCBkb3VibGUgZW5kID0gZ2V0X3RpbWUoKTsKICAgICAgICBzdW0gKz0gdmFsdWU7CgogICAgICAgIGNvbnN0IGRvdWJsZSBkZWx0YSA9IGVuZCAtIHN0YXJ0OwogICAgICAgIGlmIChkZWx0YSA+IHdvcnN0X3RpbWUpIHsKICAgICAgICAgICAgd29yc3RfdGltZSA9IGRlbHRhOwogICAgICAgIH0KICAgICAgICBpZiAoZGVsdGEgPCBiZXN0X3RpbWUpIHsKICAgICAgICAgICAgYmVzdF90aW1lID0gZGVsdGE7CiAgICAgICAgfQogICAgICAgIHByaW50ZigiKiAlZiAodmFsdWU6ICVmKVxuIiwgZGVsdGEsIHkpOwogICAgfQoKICAgIHByaW50ZigiJWYgLyAlZlxuIiwgd29yc3RfdGltZSwgYmVzdF90aW1lKTsKCiAgICBwcmludGYoIiVmXG4iLCBmb28pOwp9Cg==