fork download
  1. #include <iostream>
  2. #include <cstdint>
  3. #include <cmath>
  4.  
  5. // 定义 IEEE 754 单精度浮点数结构体
  6. struct IEEE754Single {
  7. // 根据 IEEE 754 标准的定义,单精度浮点数包括 1 位符号位,8 位指数位和 23 位尾数位
  8. uint32_t sign : 1; // 符号位
  9. uint32_t exponent : 8; // 指数位
  10. uint32_t fraction : 23; // 尾数位
  11. };
  12.  
  13. // 定义计算 IEEE 754 单精度浮点数的函数
  14. float calculateIEEE754(uint32_t sign, uint32_t exponent, uint32_t fraction) {
  15. // 使用 IEEE 754 的公式计算单精度浮点数
  16. float result = pow(-1, sign) * (1 + fraction / pow(2, 23)) * pow(2, exponent - 127);
  17. return result;
  18. }
  19.  
  20. int main() {
  21. // 定义要相加的数值
  22. int num1 = 137;
  23. int num2 = 315;
  24. int num3 = 299;
  25. int num4 = 340;
  26.  
  27. // 计算总和并除以 4
  28. float sum = (num1 + num2 + num3 + num4) / 4.0f;
  29.  
  30. // 将结果转换为 IEEE 754 单精度浮点数表示
  31. IEEE754Single ieee_result;
  32. ieee_result.sign = sum < 0; // 符号位
  33. int exponent = static_cast<int>(log2(fabs(sum))) + 127; // 计算指数位
  34. ieee_result.exponent = exponent; // 指数位
  35. ieee_result.fraction = static_cast<uint32_t>((fabs(sum) - pow(2, exponent - 127)) * pow(2, 23)); // 尾数位
  36.  
  37. // 输出结果
  38. std::cout << "IEEE 754 单精度浮点数表示:" << std::endl;
  39. std::cout << "Sign: " << ieee_result.sign << std::endl;
  40. std::cout << "Exponent: " << ieee_result.exponent << std::endl;
  41. std::cout << "Fraction: " << ieee_result.fraction << std::endl;
  42.  
  43. // 输出十进制结果
  44. std::cout << "十进制结果:" << sum << std::endl;
  45.  
  46. return 0;
  47. }
  48.  
Success #stdin #stdout 0.01s 5300KB
stdin
Standard input is empty
stdout
IEEE 754 单精度浮点数表示:
Sign: 0
Exponent: 135
Fraction: 6291456
十进制结果:272.75