-1

我真的无法理解这段代码为同一个公式给出了 2 个结果的事实:

#include <iostream>
#include <cmath>

int main() {
  // std::cout.setf(std::ios::fixed, std::ios::floatfield);
  std::cout.precision(20);
  float a = (exp(M_PI) - M_PI);
  std::cout << (exp(M_PI) - M_PI) << "\n";
  std::cout << a << "\n";
  return (0);
}

我真的不认为 IEEE 754 浮点表示在这里发挥了重要作用......

4

2 回答 2

3

第一个表达式(即(exp(M_PI) - M_PI))是 a double,第二个表达式(即a)是 a float。甚至都没有20 位小数的精度,但 . 的float精度比double.

于 2013-08-06T08:22:01.370 回答
2

因为M_PI是 type double,所以改成adouble你会得到同样的结果:

#include <iostream>
#include <cmath>

int main() {
  // std::cout.setf(std::ios::fixed, std::ios::floatfield);
  std::cout.precision(20);
  double a = (exp(M_PI) - M_PI);
  std::cout << (exp(M_PI) - M_PI) << "\n";
  std::cout << a << "\n";
  return (0);
}
于 2013-08-06T08:22:10.027 回答