-
-
Save ACUVE/f8c98491846c130921c70961e404f078 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <functional> | |
#include <limits> | |
#include <cstdint> | |
#include <random> | |
#include <chrono> | |
void inc_uint64_1( std::uint64_t &val ) noexcept | |
{ | |
if( ++val == 0ull ) | |
{ | |
val = std::numeric_limits< std::uint64_t >::max(); | |
} | |
} | |
void inc_uint64_2( std::uint64_t &val ) noexcept | |
{ | |
++val; | |
val |= -(val == 0ull); | |
} | |
int main() | |
{ | |
std::random_device rnd; | |
std::uint64_t const v = std::uniform_int_distribution< std::uint64_t >( 0xFFFFFFFFF0000000ull, 0xFFFFFFFFFFFFFFFFull )( rnd ); | |
std::uint64_t const loopnum = std::uniform_int_distribution< std::uint64_t >( 0x10000000ull, 0xFFFFFFFFull )( rnd ); | |
{ | |
std::uint64_t val = v; | |
std::cout << val << std::endl; | |
auto start = std::chrono::high_resolution_clock::now(); | |
for( std::uint64_t i = 0; i < loopnum; ++i ) | |
{ | |
inc_uint64_1( val ); | |
} | |
auto end = std::chrono::high_resolution_clock::now(); | |
std::cout << val << std::endl; | |
std::cout << std::chrono::duration_cast< std::chrono::duration< double > >( end - start ).count() << std::endl; | |
} | |
{ | |
std::uint64_t val = v; | |
std::cout << val << std::endl; | |
auto start = std::chrono::high_resolution_clock::now(); | |
for( std::uint64_t i = 0; i < loopnum; ++i ) | |
{ | |
inc_uint64_2( val ); | |
} | |
auto end = std::chrono::high_resolution_clock::now(); | |
std::cout << val << std::endl; | |
std::cout << std::chrono::duration_cast< std::chrono::duration< double > >( end - start ).count() << std::endl; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment