#include "../performance/clock.h" #include #include //#include rand using namespace std; double const D2I_CONVERSION_FACTOR = 1.5 * 4503599627370496.0; inline int d2i(double val) { union { int i[2]; double d; } dlong; dlong.d = val + D2I_CONVERSION_FACTOR; return dlong.i[0]; } int main() { vector data; int const nbData = 100; int const nbIter = 10000000; boost::mt19937 generatorEngine; boost::uniform_real generator(std::numeric_limits::min()+10, std::numeric_limits::max()-10); // boost::uniform_real generator(0, std::numeric_limits::max()-10); cout << generator.min() << " -> " << generator.max() << endl; for(int i = 0 ; i basicConversion(nbData); std::vector convolutedConversion(nbData); std::vector::iterator itInt; std::vector::iterator itDouble; std::vector::iterator const endIt = data.end(); Clock clk; clk.reset(); for (int i=0 ; i 0) ? -0.5 : 0.5)); ++itInt; ++itDouble; } } double convolutedTime = clk.run(); cout << "Convoluted: " << convolutedTime << endl; itDouble = data.begin(); itInt = basicConversion.begin(); std::vector::iterator itInt2 = convolutedConversion.begin(); int nbError = 0; while (itInt != basicConversion.end()) { if (*itInt != *itInt2) { cout << "Error: " << *itDouble << " -> " << *itInt << " ; " << *itInt2 << endl; nbError++; } ++itInt; ++itDouble; ++itInt2; } cout << "Rapport :\nTaux d'erreur : " << double(nbError)/double(nbData) << "\nConvoluted/Basic : " << convolutedTime/basicTime << "\nBasic/Convoluted : " << basicTime/convolutedTime << endl; }