Atcoderの実数を出力する問題で精度が足りず中々ACできなかった。
オプションなし
そのままcoutで実数を出力してみる
a.cpp
#include<iostream>
using namespace std;
int main(){
double pi = 3.141592653589793;
cout << pi << endl; //3.14159
}
本来double型は16桁保持できるはずだが、6桁しか出力されていない。
真の値との相対誤差が$10^{-6}$以下の場合、丸め処理の関係でギリギリWAがでてしまう。
オプションあり
fixed
とsetprecision
を使うと
b.cpp
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
long double pi = 3.141592653589793;
cout << fixed << setprecision(15) << pi << endl; //3.141592653589793
}
iomanip
をインクルードする必要があることに注意。
fixed
とsetprecision
の説明はc++ 浮動小数点数 表示方法を見ていただいた方が分かりやすい。
一番楽な方法
C言語のprintf
関数を使うのが一番簡単。
c.cpp
#include<iostream>
int main(){
long double pi = 3.141592653589793;
printf("%Lf\n", pi); //3.141593
}
cout
よりも1桁多く出力されるので、丸め処理でWAが出ることはない。