Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so dont bother with any of their useless mail servers here and just use oauth login instead. Thank the nice Russians for causing that. :)

Paste

Pasted as C++ by porgarmingduod ( 15 years ago )
#include <cstdint>
#include <cstdlib>
#include <iostream>
#include <boost/chrono.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_int_distribution.hpp>

#include "stdint.h"
#include <stdlib.h>

boost::random::mt19937 rng;
boost::random::uniform_int_distribution<> ranchar(0, 255);

double normal(uint64_t runs) {
  uint64_t result = 0;
  rng.seed(0);
  
  boost::chrono::high_resolution_clock::time_point start = 
    boost::chrono::high_resolution_clock::now();
  for (; runs; runs--) {
    int a = ranchar(rng);
    int b = ranchar(rng);
    int c = ranchar(rng);
    int d = ranchar(rng);
    if (a < 16 or b < 32 or c < 64 or d < 128) result += a;
    if (d > 16 or c > 32 or b > 64 or a > 128) result += b;
    if (a < 96 or b < 53 or c < 199 or d < 177) result += c;
    if (d > 66 or c > 35 or b > 99 or a > 77) result += d;
  }
  
  boost::chrono::duration<double> sec = 
    boost::chrono::high_resolution_clock::now() - start;
  return sec.count();
}
double special(uint64_t runs) {
  uint64_t result = 0;
  rng.seed(0);
  
  boost::chrono::high_resolution_clock::time_point start = boost::chrono::high_resolution_clock::now();
  for (; runs; runs--) {
    int a = ranchar(rng);
    int b = ranchar(rng);
    int c = ranchar(rng);
    int d = ranchar(rng);
    if (a < 16 | b < 32 | c < 64 | d < 128) result += a;
    if (d > 16 | c > 32 | b > 64 | a > 128) result += b;
    if (a < 96 | b < 53 | c < 199 | d < 177) result += c;
    if (d > 66 | c > 35 | b > 99 | a > 77) result += d;
  }
  
  boost::chrono::duration<double> sec = boost::chrono::high_resolution_clock::now() - start;
  return sec.count();
}

double collapsed(uint64_t runs) {
  uint64_t result = 0;
  rng.seed(0);
  
  boost::chrono::high_resolution_clock::time_point start = boost::chrono::high_resolution_clock::now();
  
  for (; runs; runs--) {
    int a = ranchar(rng);
    int b = ranchar(rng);
    int c = ranchar(rng);
    int d = ranchar(rng);
    result += a * (a < 16 | b < 32 | c < 64 | d < 128);
    result += b * (d > 16 | c > 32 | b > 64 | a > 128);
    result += c * (a < 96 | b < 53 | c < 199 | d < 177);
    result += d * (d > 66 | c > 35 | b > 99 | a > 77);
  }
  boost::chrono::duration<double> sec = boost::chrono::high_resolution_clock::now() - start;
  return sec.count();
}

int main() {
  double best_normal = 999999.0;
  double best_collapsed = 999999.0;
  double best_special = 999999.0;
  for (int x = 0; x < 25; x++) {
    double result = normal(5000000);
    std::cout << "normal " << result << std::endl;
    if (result < best_normal) best_normal = result;
    result = collapsed(5000000);
    std::cout << "collapsed " << result << std::endl;
    if (result < best_collapsed) best_collapsed = result;
    result = special(5000000);
    std::cout << "special if " << result << std::endl;
    if (result < best_special) best_special = result;
  }
  std::cout << "Normal if best: " << best_normal << ", Special if best: " << best_special << ", Collapsed if best: " << best_collapsed << std::endl;
}

 

Revise this Paste

Children: 39298
Your Name: Code Language: