fork download
  1. #include<iostream>
  2. #include<bitset>
  3. #include<cmath>
  4. #include<climits>
  5.  
  6. using namespace std;
  7. class Number
  8. {
  9. bool sign_;
  10. int exponent_;
  11. float mantissa_;
  12.  
  13. public:
  14. Number (char,int,float);
  15. Number (float);
  16. void ConvertFromFloat(const float&);
  17. float ConvertFromNumber() const;
  18. Number operator+=(const Number& toAdd) const
  19. {
  20. return Number(ConvertFromNumber()+toAdd.ConvertFromNumber());
  21. }
  22. Number operator-=(const Number& toAdd)
  23. {
  24. return Number(ConvertFromNumber()-toAdd.ConvertFromNumber());
  25. }
  26. friend ostream &operator<<(ostream &os,const Number &toShow);
  27. };
  28.  
  29.  
  30. Number operator+(const Number &toAdd1,const Number &toAdd2)
  31. {
  32. return Number(toAdd1.ConvertFromNumber()+toAdd2.ConvertFromNumber());
  33. }
  34.  
  35. Number operator-(const Number &toAdd1,const Number &toAdd2)
  36. {
  37. return Number(toAdd1.ConvertFromNumber()-toAdd2.ConvertFromNumber());
  38. }
  39.  
  40. ostream &operator<<(ostream &os,const Number &toShow)
  41. {
  42. os << toShow.ConvertFromNumber();
  43. return os;
  44. }
  45.  
  46.  
  47. float Number::ConvertFromNumber() const
  48. {
  49. int negative=1;
  50. if (sign_==false)
  51. {
  52. negative=0;
  53. }
  54.  
  55. return pow(-1,negative)*pow(2,exponent_-127)*mantissa_;
  56. }
  57.  
  58. void Number::ConvertFromFloat(const float& ieee)
  59. {
  60. union
  61. {
  62. float input;
  63. int output;
  64. } data;
  65. data.input=ieee;
  66.  
  67. std::bitset<sizeof(float) * CHAR_BIT> number(data.output);
  68. for (int i=0;i<32;i++)
  69. {
  70. if (i==0)
  71. {
  72. if (number[31-i]==1)
  73. {
  74. sign_=true;
  75. }
  76. }
  77. else if (i>0 && i<9)
  78. {
  79. if (number[31-i]==1)
  80. {
  81. exponent_+=pow(2,8-i);
  82. }
  83. }
  84. else
  85. {
  86. if (number[31-i]==1)
  87. {
  88. mantissa_+=pow(2,8-i);
  89. }
  90. }
  91. }
  92. }
  93.  
  94. Number::Number (char sign,int exponent,float mantissa)
  95. : sign_(sign), exponent_(exponent), mantissa_(mantissa)
  96. {
  97. if (sign=='-')
  98. {
  99. sign_=true;
  100. }
  101. if (sign=='+')
  102. {
  103. sign_=false;
  104. }
  105. }
  106.  
  107. Number::Number (float ieee)
  108. : mantissa_(1), exponent_(0)
  109. {
  110. ConvertFromFloat(ieee);
  111. }
  112.  
  113.  
  114.  
  115.  
  116. using namespace std;
  117.  
  118. int main()
  119. {
  120. char sign;
  121. int exponent;
  122. float mantissa;
  123. cin >> sign >> exponent >> mantissa;
  124. Number num1(sign,exponent,mantissa);
  125. cin >> sign >> exponent >> mantissa;
  126. Number num2(sign,exponent,mantissa);
  127. num1 += num2;
  128. }
  129.  
Success #stdin #stdout 0s 4400KB
stdin
Standard input is empty
stdout
Standard output is empty