Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- class IEE754
- {
- public:
- IEE754(bool si, int pow, float mant);
- IEE754(float number);
- int get_power();
- float calculate_iee754();
- int potega(int power);
- void operator_convert(float number);
- void operator+= (IEE754 a1)
- {
- float x = calculate_iee754()+a1.calculate_iee754();
- // Przerobić na IEEE754.
- this->operator_convert(x);
- }
- void operator-= (IEE754 a1)
- {
- float x = calculate_iee754()-a1.calculate_iee754();
- this->operator_convert(x);
- }
- private:
- bool sign;
- int power;
- float mantysa;
- };
- void IEE754::operator_convert(float number)
- {
- if (number > 0)
- sign = 0;
- else
- {
- sign = 1;
- number = -number;
- }
- int a = 0, temp_int = number;
- while (temp_int >= 2)
- {
- temp_int /= 2;
- a++;
- }
- power = a;
- temp_int = potega(power);
- mantysa = number / temp_int;
- }
- IEE754 operator+ (IEE754 a1, IEE754 a2)
- {
- return IEE754(a1.calculate_iee754() + a2.calculate_iee754());
- }
- IEE754 operator- (IEE754 a1, IEE754 a2)
- {
- return IEE754(a1.calculate_iee754() - a2.calculate_iee754());
- }
- ostream & operator<< (ostream & stream, IEE754 a)
- {
- return stream << a.calculate_iee754();
- }
- IEE754::IEE754(float number)
- {
- if (number > 0)
- sign = 0;
- else
- {
- sign = 1;
- number = -number;
- }
- int a = 0, temp_int = number;
- while (temp_int >= 2)
- {
- temp_int /= 2;
- a++;
- }
- power = a;
- temp_int = potega(power);
- mantysa = number / temp_int;
- }
- IEE754::IEE754(bool si, int pow, float mant) :
- sign(si), power(pow), mantysa(mant)
- {
- }
- float IEE754::calculate_iee754()
- {
- int a;
- if(sign==0)
- a=1;
- else
- a=-1;
- float x;
- x=a*potega(power)*this->mantysa;
- return x;
- }
- int IEE754::get_power()
- {
- return power;
- }
- int IEE754::potega(int power)
- {
- if (power == 0) return 1;
- else
- return power = 2 * potega(power-1);
- }
- void read_float(float &number)
- {
- bool load = true;
- while (load)
- {
- cin >> number;
- if (cin.fail())
- {
- cin.clear();
- cin.ignore(1000000, '\n');
- }
- else
- {
- load = false;
- }
- }
- }
- void read_number(string &x, bool &sign, int &power, float &mantysa)
- {
- bool load = true;
- while (load)
- {
- cin >> x;
- if (x.length() == 1)
- {
- if (x[0] == '-')
- {
- sign = true;
- load = false;
- }
- else if (x[0] == '+')
- {
- sign = false;
- load = false;
- }
- }
- }
- bool load1 = true;
- while (load1)
- {
- cin >> power;
- if (cin.fail())
- {
- cin.clear();
- cin.ignore(1000000, '\n');
- }
- else
- {
- power-=127;
- load1 = false;
- }
- }
- bool load2 = true;
- while (load2)
- {
- cin >> mantysa;
- if (cin.fail())
- {
- cin.clear();
- cin.ignore(1000000, '\n');
- }
- else
- {
- load2 = false;
- }
- }
- }
- int main()
- {
- string x;
- bool sign;
- int power;
- float mantysa;
- read_number(x, sign, power, mantysa);
- IEE754 x0(sign, power, mantysa);
- read_number(x, sign, power, mantysa);
- IEE754 x1(sign, power, mantysa);
- float number;
- read_float(number);
- IEE754 x2(number);
- read_float(number);
- IEE754 x3(number);
- x0 += x1;
- x3 -= x2;
- IEE754 x4(0);
- x4 = x1 + x3;
- IEE754 x5(0);
- x5 = x4 - x2;
- cout << x0 << " ";
- cout << x1 << " ";
- cout << x2 << " ";
- cout << x3 << " ";
- cout << x4 << " ";
- cout << x5 << " ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement