#include <iostream>
#include <chrono>
#include <time.h>
#include <cmath>
using namespace std;
using namespace std::chrono;
template<typename lambda>
double timed_template(lambda &&fnc) {
high_resolution_clock::time_point t1 = high_resolution_clock::now();
//auto start = chrono::steady_clock::now();
fnc(10, 1000000000, 7);
high_resolution_clock::time_point t2 = high_resolution_clock::now();
auto duration = duration_cast<nanoseconds>(t2 - t1).count();
//auto end = chrono::steady_clock::now();
//auto duration = chrono::duration <double, nano>(end - start).count();
return duration;
}
int main()
{
printf("modulo fct: %f ns\n",
timed_template([](int X, int Y, int D) ->int {
if ((Y - X) % D == 0)
return (Y - X) / D;
else
return ((Y - X) / D) + 1;
})
);
printf("ceil and double: %f ns\n",
timed_template([](int X, int Y, int D) ->int {
double diff = Y - X;
long hop = (long)ceil(diff / D);
return hop;
})
);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2hyb25vPgojaW5jbHVkZSA8dGltZS5oPgojaW5jbHVkZSA8Y21hdGg+CgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIHN0ZDo6Y2hyb25vOwoKdGVtcGxhdGU8dHlwZW5hbWUgbGFtYmRhPgpkb3VibGUgdGltZWRfdGVtcGxhdGUobGFtYmRhICYmZm5jKSB7CgloaWdoX3Jlc29sdXRpb25fY2xvY2s6OnRpbWVfcG9pbnQgdDEgPSBoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwoJLy9hdXRvIHN0YXJ0ID0gY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwoJZm5jKDEwLCAxMDAwMDAwMDAwLCA3KTsKCWhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6dGltZV9wb2ludCB0MiA9IGhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCk7CgoJYXV0byBkdXJhdGlvbiA9IGR1cmF0aW9uX2Nhc3Q8bmFub3NlY29uZHM+KHQyIC0gdDEpLmNvdW50KCk7CgkvL2F1dG8gZW5kID0gY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwoJLy9hdXRvIGR1cmF0aW9uID0gY2hyb25vOjpkdXJhdGlvbiA8ZG91YmxlLCBuYW5vPihlbmQgLSBzdGFydCkuY291bnQoKTsKCXJldHVybiBkdXJhdGlvbjsKfQoKaW50IG1haW4oKQp7CgoJcHJpbnRmKCJtb2R1bG8gZmN0OiAgICAgICVmIG5zXG4iLAoJCXRpbWVkX3RlbXBsYXRlKFtdKGludCBYLCBpbnQgWSwgaW50IEQpIC0+aW50IHsKCQlpZiAoKFkgLSBYKSAlIEQgPT0gMCkKCQkJcmV0dXJuIChZIC0gWCkgLyBEOwoJCWVsc2UKCQkJcmV0dXJuICgoWSAtIFgpIC8gRCkgKyAxOwoJfSkKCQkpOwoJCQoJcHJpbnRmKCJjZWlsIGFuZCBkb3VibGU6ICVmIG5zXG4iLAoJCXRpbWVkX3RlbXBsYXRlKFtdKGludCBYLCBpbnQgWSwgaW50IEQpIC0+aW50IHsKCQlkb3VibGUgZGlmZiA9IFkgLSBYOwoJCWxvbmcgaG9wID0gKGxvbmcpY2VpbChkaWZmIC8gRCk7CgkJcmV0dXJuIGhvcDsKCX0pCgkJKTsKCglyZXR1cm4gMDsKfQ==