#ifdef _MSC_VER #define _SECURE_SCL 0 #define _CRT_SECURE_NO_DEPRECATE 1 #define WIN32_LEAN_AND_MEAN #define VC_EXTRALEAN #define NOMINMAX #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "cycle.h" static const size_t N = 100000; static const size_t R = 7; void PrintStats(std::vector timings) { double fastest = std::numeric_limits::max(); std::cout << std::fixed << std::setprecision(2); std::cout << "["; for (size_t i = 1 ; i(timings.size()-1); sum = 0.0; for (size_t i = 1 ; i= '0' && *p <= '9') { r = (r*10.0) + (*p - '0'); ++p; } if (*p == '.') { double f = 0.0; int n = 0; ++p; while (*p >= '0' && *p <= '9') { f = (f*10.0) + (*p - '0'); ++p; ++n; } r += f / std::pow(10.0, n); } if (neg) { r = -r; } return r; } int main() { std::vector nums; nums.reserve(N); for (size_t i=0 ; i(i); y += '.'; y += boost::lexical_cast(i); nums.push_back(y); } { double tsum = 0.0; std::vector timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r(nums[i]); tsum += x; } ticks end = getticks(); double timed = elapsed(end, start); timings.push_back(timed); } std::cout << "lexical_cast: "; PrintStats(timings); std::cout << std::endl; std::cout << tsum << std::endl; } { using boost::spirit::qi::double_; using boost::spirit::qi::parse; double tsum = 0.0; std::vector timings; timings.reserve(R); for (size_t r=0 ; r timings; timings.reserve(R); for (size_t r=0 ; r> x; tsum += x; } ticks end = getticks(); double timed = elapsed(end, start); timings.push_back(timed); } std::cout << "stringstream: "; PrintStats(timings); std::cout << std::endl; std::cout << tsum << std::endl; } { double tsum = 0.0; std::vector timings; timings.reserve(R); for (size_t r=0 ; r> x; tsum += x; } ticks end = getticks(); double timed = elapsed(end, start); timings.push_back(timed); } std::cout << "stringstream reused: "; PrintStats(timings); std::cout << std::endl; std::cout << tsum << std::endl; } }