daily pastebin goal
25%
SHARE
TWEET

Untitled

a guest Jun 13th, 2018 50 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. union ufloat //unia dzięki której można zamienić f na wartość całkowitoliczbową(bity zostają te same)
  5. {
  6.     float f;
  7.     int u;
  8. };
  9. bool* zamiana_na_ieee754(float f)
  10. {
  11.     bool *tab;
  12.     tab=new bool[32];
  13.     unsigned b,i=32;
  14.     ufloat a;                       //utworzenie instancji unii
  15.     a.f=f;                          //przypisanie pola zmiennoprzecinkowego do unii
  16.     b=a.u;                          // odczytanie pola całkowitoliczbowego do zmiennej b
  17.     while(i!=0)
  18.     {
  19.         i--;
  20.         if(b&1)             //jeżeli ostatnia wartość w b jest 1
  21.             tab[i]=1;       //dodaj 1 do tablicy
  22.         else                //jeżeli nie
  23.             tab[i]=0;       //dodaj 0 do tablicy
  24.         b>>=1;              //przesun liczbę b o jeden bit w prawo
  25.     }
  26.     return tab;
  27. }
  28. float zamiana_na_dec(bool* tab)
  29. {
  30.     int i=0;
  31.     unsigned b=0;
  32.     while(i<31)
  33.     {
  34.         b += tab[i];        //do b dodaj tab[i]
  35.         b<<=1;              //przesun b o 1 bit w lewo
  36.         i++;
  37.     }
  38.     ufloat a;
  39.     a.u=b;
  40.     return a.f;
  41. }
  42. bool* dodawanie(bool* a, bool*b)
  43. {
  44.     int znaka = a[0] ? -1 : 1;      //jeżeli a[0] jest 1 ustaw zn na -1 w przeciwnym razie ustaw zn na 1
  45.     int znakb = b[0] ? -1 : 1;      //jeżeli b[0] jest 1 ustaw zn na -1 w przeciwnym razie ustaw zn na 1
  46.     int cechaa = -127, cechab = -127;   //eksponenty
  47.     float mantysaa = 1, mantysab = 1;       //mantysy
  48.     int p = 128;                //p i q to liczby do obliczenia eksponent i mantys
  49.     float q = 0.5;
  50.     for (int i = 1; i<9; i++)   //obiczanie eksponent
  51.     {
  52.         cechaa += p * a[i];
  53.         cechab += p * b[i];
  54.         p = p / 2;
  55.     }
  56.     for (int i = 9; i<32; i++)  //obliczanie mantys
  57.     {
  58.         mantysaa += a[i] * q;
  59.         mantysab += b[i] * q;
  60.         q = q / 2;
  61.     }
  62.     float wynik = (znaka*mantysaa + znakb * mantysab*pow(2, cechab - cechaa))*pow(2, cechaa);   //obliczanie wyniku wg wzoru
  63.     return zamiana_na_ieee754(wynik);
  64. }
  65. bool* odejmowanie(bool* a, bool*b)
  66. {                               //za - znak a   zb - znak b     ea - cecha a    eb - cecha b    ma - mantysa a  mb - mantysa b
  67.     int znaka = a[0] ? -1 : 1;      //jeżeli a[0] jest 1 ustaw zn na -1 w przeciwnym razie ustaw zn na 1
  68.     int znakb = b[0] ? -1 : 1;      //jeżeli b[0] jest 1 ustaw zn na -1 w przeciwnym razie ustaw zn na 1
  69.     int cechaa = -127, cechab = -127;   //eksponenty
  70.     float mantysaa = 1, mantysab = 1;       //mantysy
  71.     int p = 128;                //p i q to liczby do obliczenia eksponent i mantys
  72.     float q = 0.5;
  73.     for (int i = 1; i<9; i++)   //obiczanie eksponent
  74.     {
  75.         cechaa += p * a[i];
  76.         cechab += p * b[i];
  77.         p = p / 2;
  78.     }
  79.     for (int i = 9; i<32; i++)  //obliczanie mantys
  80.     {
  81.         mantysaa += a[i] * q;
  82.         mantysab += b[i] * q;
  83.         q = q / 2;
  84.     }
  85.     float wynik = (znaka*mantysaa - znakb * mantysab*pow(2, cechab - cechaa))*pow(2, cechaa);   //obliczanie wyniku wg wzoru
  86.     return zamiana_na_ieee754(wynik);
  87. }
  88. bool* mnozenie(bool* a, bool*b)
  89. {
  90.     int znaka = a[0] ? -1 : 1;
  91.     int znakb = b[0] ? -1 : 1;
  92.     int cechaa = -127, cechab = -127;
  93.     float mantysaa = 1, mantysab = 1;
  94.     int p = 128;
  95.     float q = 0.5;
  96.     for (int i = 1; i<9; i++)
  97.     {
  98.         cechaa += p * a[i];
  99.         cechab += p * b[i];
  100.         p = p / 2;
  101.     }
  102.     for (int i = 9; i<32; i++)
  103.     {
  104.         mantysaa += a[i] * q;
  105.         mantysab += b[i] * q;
  106.         q = q / 2;
  107.     }
  108.     float wynik = znaka * znakb*mantysaa*mantysab*pow(2, cechaa + cechab);
  109.     return zamiana_na_ieee754(wynik);
  110. }
  111.  
  112. bool* dzielenie(bool* a, bool*b)
  113. {
  114.     int znaka = a[0] ? -1 : 1;
  115.     int znakb = b[0] ? -1 : 1;
  116.     int cechaa = -127, cechab = -127;
  117.     int suma=0, sumab=0;
  118.     float mantysaa = 1, mantysab = 1;
  119.     int p = 128;
  120.     float q = 0.5;
  121.     for (int i = 1; i<9; i++)
  122.     {
  123.         suma += a[i];
  124.         sumab += b[i];
  125.         cechaa += p * a[i];
  126.         cechab += p * b[i];
  127.         p = p / 2;
  128.     }
  129.     for (int i = 9; i<32; i++)
  130.     {
  131.         suma += a[i];
  132.         sumab += b[i];
  133.         mantysaa += a[i] * q;
  134.         mantysab += b[i] * q;
  135.         q = q / 2;
  136.     }
  137.     float wynik = znaka * znakb*(mantysaa / mantysab)*pow(2, cechaa - cechab);
  138.     return zamiana_na_ieee754(wynik);
  139. }
  140. void wypisz_ieee(bool* tab)
  141. {
  142.     for (int i = 0; i<32; i++)
  143.         cout << tab[i];
  144. }
  145. int main()
  146. {
  147. int litera;
  148. do
  149.     {
  150.         std::cout << "Podaj litere a aby zakonczyc petle" << std::endl;
  151.         std::cin >> litera;
  152.         std::cout << "Podales litere" << litera << std::endl;
  153.     } while( litera != "a" );
  154.  std::cout << "Koniec" << std::endl;
  155. }
  156.     {
  157.     float liczba;
  158.     bool *x, *y,*z; //wskaźniki na tablice alokowane w zamianie na iee754
  159.     float liczba1, liczba2;
  160.     cout << "Podaj liczbe x: ";
  161.     cin >> liczba1;
  162.     cout << "Podaj liczbe y: ";
  163.     cin >> liczba2;
  164.     cout << "\n";
  165.  
  166.     x = zamiana_na_ieee754(liczba1);
  167.     cout << "Liczba x w IEEE754 to: ";
  168.     wypisz_ieee(x);
  169.     cout << "\nZnak - "<<x[0]<<"\n"<<"Cecha - ";
  170.     for (int i = 1; i < 9; i++)
  171.         cout << x[i];
  172.     cout << "\nMantysa - ";
  173.     for (int i = 9; i < 32; i++)
  174.         cout << x[i];
  175.     cout << "\n";
  176.  
  177.     y = zamiana_na_ieee754(liczba2);
  178.     cout << "\nLiczba y w IEEE754 to: ";
  179.     wypisz_ieee(y);
  180.     cout << "\nZnak - " << y[0] << "\n" << "Cecha - ";
  181.     for (int i = 1; i < 9; i++)
  182.         cout << y[i];
  183.     cout << "\nMantysa - ";
  184.     for (int i = 9; i < 32; i++)
  185.         cout << y[i];
  186.     cout << "\n\n";
  187.  
  188.     z = dodawanie(x, y);
  189.     cout << "x + y = ";
  190.     wypisz_ieee(z);
  191.     cout<< " | " <<zamiana_na_dec(z)<<  endl;
  192.     z = odejmowanie(x, y);
  193.     cout << "x - y = ";
  194.     wypisz_ieee(z);
  195.     cout << " | " << zamiana_na_dec(z) << endl;
  196.     z = mnozenie(x, y);
  197.     cout << "x * y = ";
  198.     wypisz_ieee(z);
  199.     cout << " | " << zamiana_na_dec(z) << endl;
  200.     z = dzielenie(x, y);
  201.     cout << "x / y = ";
  202.     wypisz_ieee(z);
  203.     cout << " | " << zamiana_na_dec(z) << endl;
  204.     delete[] x, y, z;                           // zwalnianie pamięci
  205.     cin >> liczba;                              // zatrzymanie konsoli
  206. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top