-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)) は adoubleで、2 番目の式 (つまりa) は afloatです。どちらも10進数で 20 桁の精度はありませんが、 のfloat精度はdouble.

于 2013-08-06T08:22:01.370 に答える
2

M_PIタイプがであるためdouble、 に変更aするdoubleと、同じ結果が得られます。

#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 に答える