2017年09月15日
《その28》 操作子 setprecision
p.158 に、つぎのような記述があります。
『setprecision操作子は、《精度》を指定します。なお、ここでの《精度》は、出力記法などによって解釈が異なります。固定小数点記法による出力における《精度》は、小数部の桁数とみなされます。』
このことについて、いちおう確認してみました。
◆ 浮動小数点数を 固定小数点記法で出力
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
float a = 12.3456789012345;
double b = 12.3456789012345;
cout << fixed << setprecision(10) << "a … " << a << '\n';
cout << "b … " << b << '\n';
}
fixed操作子 + setprecision(10)操作子 の指示で、確かに小数部桁数は 10になっています。
◆ 浮動小数点数を 指数付き記法で出力
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
float a = 12.3456789012345;
double b = 12.3456789012345;
cout << scientific << setprecision(10) << "a … " << a << '\n';
cout << "b … " << b << '\n';
}
scientific操作子 + setprecision(10)操作子 で指示した場合も、小数部桁数は 10になっています。
◆ 浮動小数点数を setprecision操作子を使わずに 固定小数点記法で出力
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
float a = 12.3456789012345;
double b = 12.3456789012345;
cout << fixed/* << setprecision(10)*/ << "a … " << a << '\n';
cout << "b … " << b << '\n';
}
setprecision(10)操作子を使わず fixed操作子のみの出力では、小数部桁数が 6になります。
◆ 浮動小数点数を fixed操作子も scientific操作子も使わず setprecision操作子だけを使って出力
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
float a = 12.3456789012345;
double b = 12.3456789012345;
cout/* << fixed*/ << setprecision(10) << "a … " << a << '\n';
cout << "b … " << b << '\n';
}
setprecision操作子のみの場合は、出力結果をみると 小数部桁数が安定していません。
--
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6704779
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック