Skip to content

Instantly share code, notes, and snippets.

@ACUVE

ACUVE/main.cpp Secret

Created July 28, 2016 07:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ACUVE/f8c98491846c130921c70961e404f078 to your computer and use it in GitHub Desktop.
Save ACUVE/f8c98491846c130921c70961e404f078 to your computer and use it in GitHub Desktop.
#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