Advertisement
Guest User

Jeck_coursework

a guest
Nov 19th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.27 KB | None | 0 0
  1. // Kyrsach.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include<iostream>
  6. #include<iomanip>
  7. #include<cstdlib>
  8. #include <ctime>
  9. #include <thread>
  10. #include <chrono>
  11.  
  12. using namespace std;
  13. template <typename T>
  14.  
  15. float float_type(T a, T b,T cmp)
  16. {
  17.     auto start = std::chrono::high_resolution_clock::now();
  18.     auto stop = start;
  19.  
  20.     _asm {
  21.         xor eax, eax
  22.         xor ebx, ebx
  23.         xor ecx, ecx
  24.         xor edx, edx
  25.         finit
  26.         fld a
  27.         fsub b
  28.         fstp cmp
  29.     }
  30.     stop = std::chrono::high_resolution_clock::now();
  31.     std::cout << "Cmp=" << cmp << std::endl;
  32.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(subtraction)\n";
  33.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(subtraction)\n";
  34.     start = std::chrono::high_resolution_clock::now();
  35.  
  36.     _asm {
  37.         xor eax, eax
  38.         xor ebx, ebx
  39.         xor ecx, ecx
  40.         xor edx, edx
  41.         finit
  42.         fld a
  43.         fadd b
  44.         fstp cmp
  45.     }
  46.     stop = std::chrono::high_resolution_clock::now();
  47.     std::cout << "Cmp=" << cmp << std::endl;
  48.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(addition)\n";
  49.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(addition)\n";
  50.     start = std::chrono::high_resolution_clock::now();
  51.  
  52.     _asm {
  53.         xor eax, eax
  54.         xor ebx, ebx
  55.         xor ecx, ecx
  56.         xor edx, edx
  57.         finit
  58.         fld a
  59.         fmul b
  60.         fstp cmp
  61.     }
  62.     stop = std::chrono::high_resolution_clock::now();
  63.     std::cout << "Cmp=" << cmp << std::endl;
  64.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(multiplication)\n";
  65.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(multiplication)\n";
  66.     start = std::chrono::high_resolution_clock::now();
  67.  
  68.     _asm {
  69.         xor eax, eax
  70.         xor ebx, ebx
  71.         xor ecx, ecx
  72.         xor edx, edx
  73.         finit
  74.         fld a
  75.         fdiv b
  76.         fstp cmp
  77.     }
  78.     stop = std::chrono::high_resolution_clock::now();
  79.     std::cout << "Cmp=" << cmp << std::endl;
  80.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(division)\n";
  81.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(division)\n";
  82.     start = std::chrono::high_resolution_clock::now();
  83.  
  84.  
  85.     return EXIT_SUCCESS;
  86. }
  87.  
  88. template <typename T>
  89. int int_type(T a, T b, T cmp)
  90. {
  91.  
  92.     auto start = std::chrono::high_resolution_clock::now();
  93.     auto stop = start;
  94.     __asm{
  95.         xor eax, eax
  96.         xor ebx, ebx
  97.         xor ecx, ecx
  98.         xor edx, edx
  99.         finit
  100.         fild a
  101.         fisub b
  102.         fistp cmp
  103.     }
  104.     stop = std::chrono::high_resolution_clock::now();
  105.     std::cout << "Cmp=" << cmp << std::endl;
  106.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(subtraction)\n";
  107.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(subtraction)\n";
  108.     start = std::chrono::high_resolution_clock::now();
  109.  
  110.     __asm {
  111.         xor eax, eax
  112.         xor ebx, ebx
  113.         xor ecx, ecx
  114.         xor edx, edx
  115.         finit
  116.         fild a
  117.         fiadd b
  118.         fistp cmp
  119.     }
  120.     stop = std::chrono::high_resolution_clock::now();
  121.     std::cout << "Cmp=" << cmp << std::endl;
  122.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(addition)\n";
  123.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(addition)\n";
  124.     start = std::chrono::high_resolution_clock::now();
  125.  
  126.     __asm {
  127.         xor eax, eax
  128.         xor ebx, ebx
  129.         xor ecx, ecx
  130.         xor edx, edx
  131.         finit
  132.         fild a
  133.         fimul b
  134.         fistp cmp
  135.     }
  136.     stop = std::chrono::high_resolution_clock::now();
  137.     std::cout << "Cmp=" << cmp << std::endl;
  138.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(multiplication)\n";
  139.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(multiplication)\n";
  140.     start = std::chrono::high_resolution_clock::now();
  141.  
  142.     __asm {
  143.         xor eax, eax
  144.         xor ebx, ebx
  145.         xor ecx, ecx
  146.         xor edx, edx
  147.         finit
  148.         fild a
  149.         fidiv b
  150.         fistp cmp
  151.     }
  152.     stop = std::chrono::high_resolution_clock::now();
  153.     std::cout << "Cmp=" << cmp << std::endl;
  154.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(division)\n";
  155.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(division)\n";
  156.  
  157.     return EXIT_SUCCESS;
  158.  
  159. }
  160.  
  161. template <typename T>
  162. double double_float(double a, T b, double cmp)
  163. {
  164.     auto start = std::chrono::high_resolution_clock::now();
  165.     auto stop = start;
  166.  
  167.     _asm {
  168.         xor eax, eax
  169.         xor ebx, ebx
  170.         xor ecx, ecx
  171.         xor edx, edx
  172.         finit
  173.         fld a
  174.         fsub b
  175.         fstp cmp
  176.     }
  177.     stop = std::chrono::high_resolution_clock::now();
  178.     std::cout << "Cmp=" << cmp << std::endl;
  179.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(subtraction)\n";
  180.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(subtraction)\n";
  181.     start = std::chrono::high_resolution_clock::now();
  182.  
  183.     _asm {
  184.         xor eax, eax
  185.         xor ebx, ebx
  186.         xor ecx, ecx
  187.         xor edx, edx
  188.         finit
  189.         fld a
  190.         fadd b
  191.         fstp cmp
  192.     }
  193.     stop = std::chrono::high_resolution_clock::now();
  194.     std::cout << "Cmp=" << cmp << std::endl;
  195.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(addition)\n";
  196.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(addition)\n";
  197.     start = std::chrono::high_resolution_clock::now();
  198.  
  199.     _asm {
  200.         xor eax, eax
  201.         xor ebx, ebx
  202.         xor ecx, ecx
  203.         xor edx, edx
  204.         finit
  205.         fld a
  206.         fmul b
  207.         fstp cmp
  208.     }
  209.     stop = std::chrono::high_resolution_clock::now();
  210.     std::cout << "Cmp=" << cmp << std::endl;
  211.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(multiplication)\n";
  212.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(multiplication)\n";
  213.     start = std::chrono::high_resolution_clock::now();
  214.  
  215.     _asm {
  216.         xor eax, eax
  217.         xor ebx, ebx
  218.         xor ecx, ecx
  219.         xor edx, edx
  220.         finit
  221.         fld a
  222.         fdiv b
  223.         fstp cmp
  224.     }
  225.     stop = std::chrono::high_resolution_clock::now();
  226.     std::cout << "Cmp=" << cmp << std::endl;
  227.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(division)\n";
  228.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(division)\n";
  229.     start = std::chrono::high_resolution_clock::now();
  230.  
  231.  
  232.     return EXIT_SUCCESS;
  233. }
  234.  
  235. template <typename T>
  236. long float long_float(long float a, T b, long float cmp)
  237. {
  238.     auto start = std::chrono::high_resolution_clock::now();
  239.     auto stop = start;
  240.  
  241.     _asm {
  242.         xor eax, eax
  243.         xor ebx, ebx
  244.         xor ecx, ecx
  245.         xor edx, edx
  246.         finit
  247.         fld a
  248.         fsub b
  249.         fstp cmp
  250.     }
  251.     stop = std::chrono::high_resolution_clock::now();
  252.     std::cout << "Cmp=" << cmp << std::endl;
  253.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(subtraction)\n";
  254.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(subtraction)\n";
  255.     start = std::chrono::high_resolution_clock::now();
  256.  
  257.     _asm {
  258.         xor eax, eax
  259.         xor ebx, ebx
  260.         xor ecx, ecx
  261.         xor edx, edx
  262.         finit
  263.         fld a
  264.         fadd b
  265.         fstp cmp
  266.     }
  267.     stop = std::chrono::high_resolution_clock::now();
  268.     std::cout << "Cmp=" << cmp << std::endl;
  269.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(addition)\n";
  270.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(addition)\n";
  271.     start = std::chrono::high_resolution_clock::now();
  272.  
  273.     _asm {
  274.         xor eax, eax
  275.         xor ebx, ebx
  276.         xor ecx, ecx
  277.         xor edx, edx
  278.         finit
  279.         fld a
  280.         fmul b
  281.         fstp cmp
  282.     }
  283.     stop = std::chrono::high_resolution_clock::now();
  284.     std::cout << "Cmp=" << cmp << std::endl;
  285.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(multiplication)\n";
  286.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(multiplication)\n";
  287.     start = std::chrono::high_resolution_clock::now();
  288.  
  289.     _asm {
  290.         xor eax, eax
  291.         xor ebx, ebx
  292.         xor ecx, ecx
  293.         xor edx, edx
  294.         finit
  295.         fld a
  296.         fdiv b
  297.         fstp cmp
  298.     }
  299.     stop = std::chrono::high_resolution_clock::now();
  300.     std::cout << "Cmp=" << cmp << std::endl;
  301.     std::cout << "\nTime: " << std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count() << " nanoseconds(division)\n";
  302.     std::cout << "\nTime of one math operation: " << std::chrono::duration_cast<std::chrono::nanoseconds>((stop - start) / numb_of_operation).count() << " nanoseconds(division)\n";
  303.     start = std::chrono::high_resolution_clock::now();
  304.  
  305.  
  306.     return EXIT_SUCCESS;
  307. }
  308.  
  309.  
  310. auto start = std::chrono::high_resolution_clock::now();
  311. auto stop = start;
  312. int cmp, res, numb_of_operation = 8; float cmp_;
  313. double cmp__;
  314. long float fcmp;
  315.  
  316.  
  317. /*int multiplication (int, int, int);
  318. int division (int, int, int);
  319. int subtraction (int, int, int);
  320. int addition (int, int, int);
  321. float addition_f (float, float,float,float);
  322. float subtraction_f(float, float, float, float);*/
  323.  
  324.  
  325. int main()
  326. {
  327.     int a=0, b=0, ch=10;
  328.     float a_=0, b_=0;
  329.     double a__=0;
  330.     long float fa = 0;
  331.     while (ch != 0)
  332.     {
  333.         std::cout << "Choose 1) Working with floating type" << std::endl << std::setw(31) << right <<
  334.             "2) Working with integer " << std::endl << std::setw(36) << right <<
  335.             "3) Working with double-float " << std::endl << std::setw(34) << right <<
  336.             "4) Working with long-float " << std::endl << std::setw(15) << right <<
  337.             "0) EXIT " << std::endl;
  338.         std::cin >> ch;
  339.  
  340.         switch (ch)
  341.         {
  342.         case 1:
  343.         {
  344.             std::cout << "Enter A,B" << std::endl;
  345.             std::cin >> a_ >> b_;
  346.             float_type(a_, b_, cmp_);
  347.             break;
  348.         }
  349.         case 2:
  350.         {
  351.             std::cout << "Enter A,B" << std::endl;
  352.             std::cin >> a >> b;
  353.             cmp = 0;
  354.             int_type(a, b, cmp);
  355.             break;
  356.         }
  357.         case 3:
  358.         {
  359.             std::cout << "Enter A,B" << std::endl;
  360.             std::cin >> a__ >> b_;
  361.             cmp = 0;
  362.             double_float(a__, b_, cmp__);
  363.             break; }
  364.         case 4:
  365.         {
  366.             std::cout << "Enter A,B" << std::endl;
  367.             std::cin >> fa >> b_;
  368.             cmp = 0;
  369.             long_float(fa, b_, fcmp);
  370.             break;
  371.         }
  372.         }
  373.     }
  374.  
  375.     /*multiplication(a,b,cmp);
  376.     division(a, b, cmp);
  377.     subtraction(a, b, cmp);
  378.     addition(a, b, cmp);
  379.     addition_f(d,f,h,cmp_);*/
  380.     return 0;
  381. }
  382.  
  383. /*
  384. int multiplication(int a, int b, int cmp)
  385. {
  386.     init = clock();
  387.     __asm {
  388.         mov ebx, a
  389.         mov eax, b
  390.         mul ebx
  391.         mov cmp, eax
  392.     }
  393.     final = clock(); //- init;
  394.     std::cout << "Cmp=" << cmp << std::endl<<"Time="<< ((double)final-init) / ((double)CLOCKS_PER_SEC)<<endl;
  395.     return EXIT_SUCCESS;
  396. }
  397. int division(int a, int b, int cmp) {
  398.     __asm {
  399.         mov ebx, a
  400.         mov eax, b
  401.         cwd
  402.         div ebx
  403.         mov cmp, eax
  404.     }
  405.     std::cout << "Cmp=" << cmp << std::endl;
  406.     return EXIT_SUCCESS;
  407. }
  408. int subtraction(int a, int b, int cmp) {
  409.     __asm {
  410.         mov ebx, a
  411.         mov eax, b
  412.         sub eax,ebx
  413.         mov cmp, eax
  414.     }
  415.     std::cout << "Cmp=" << cmp << std::endl;
  416.     return EXIT_SUCCESS;
  417. }
  418.  
  419. int addition(int a, int b, int cmp) {
  420.     __asm {
  421.         mov ebx, a
  422.         mov eax, b
  423.         add eax,ebx
  424.         mov cmp, eax
  425.     }
  426.     std::cout << "Cmp=" << cmp << std::endl;
  427.     return EXIT_SUCCESS;
  428. }
  429. float addition_f(float a, float b, float c, float cmp) {
  430.     __asm {
  431.         xor eax, eax
  432.         xor ebx, ebx
  433.         xor ecx, ecx
  434.         xor edx, edx
  435.         finit
  436.         fld a
  437.         fadd b
  438.         fstp cmp
  439.     }
  440.     std::cout << "Cmp=" << cmp << std::endl;
  441.     __asm {
  442.         xor eax, eax
  443.         xor ebx, ebx
  444.         xor ecx, ecx
  445.         xor edx, edx
  446.         finit
  447.         fld a
  448.         fadd c
  449.         fstp cmp
  450.     }
  451.     std::cout << "Cmp=" << cmp << std::endl;
  452.     return EXIT_SUCCESS;
  453. }
  454.  
  455. float subtraction_f(float a, float b, float c, float cmp) {
  456.     __asm {
  457.         xor eax, eax
  458.         xor ebx, ebx
  459.         xor ecx, ecx
  460.         xor edx, edx
  461.         finit
  462.         fld a
  463.         fsub b
  464.         fstp cmp
  465.     }
  466.     std::cout << "Cmp=" << cmp << std::endl;
  467.     __asm {
  468.         xor eax, eax
  469.         xor ebx, ebx
  470.         xor ecx, ecx
  471.         xor edx, edx
  472.         finit
  473.         fld c
  474.         fsub a
  475.         fstp cmp
  476.     }
  477.     std::cout << "Cmp=" << cmp << std::endl;
  478.     return EXIT_SUCCESS;
  479. }
  480. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement