2017年09月13日
《その26》 浮動小数点型(p.149演習4-5,演習4-6,演習4-7)
新版明解C++入門編 p.149 演習4-5
float型の変数とdouble型の変数にキーボードから数値を読み込んで、その値を表示するプログラムを作成せよ。いろいろな値を入力して、動作を検証すること。
焦りました (〃゚д゚;A
「float型の変数とdouble型の変数にキーボードから数値を読み込んで、その値を表示するプログラムを作れ」
ということなので、次のようなプログラムを作ったのですが・・・
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
float a;
double b;
do {
cout << "float a の入力( 999の入力で終了 ) "; cin >> a;
if (a == 999) break;
cout << "double b の入力 "; cin >> b;
cout << "a … " << a << '\n';
cout << "b … " << b << '\n';
} while (1);
}
float型とdouble型は、値が表示されるとき どんな違いがあるんだろう と期待しながら、
桁数の多い値を入力してみたところ・・・
なんと!Σ【*゚д゚*】
float型もdouble型も 同じ結果。しかも6桁しか表示されていません。
float型なら まだ許せるけど、double型が6桁 ヽ(´・ェ・ヽ)
で、調べてみました。
そうしたら、
出力のデフォルト桁数は、float型もdouble型も6桁 なんだそうです。
p.120 Table3-7 に、浮動小数点数の出力n桁指定には操作子setprecision(n) を使う と書いてある
ので、プログラムを書き直しました。
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
float a;
double b;
do {
cout << "float a の入力( 999の入力で終了 ) "; cin >> a;
if (a == 999) break;
cout << "double b の入力 "; cin >> b;
cout << setprecision(20) << "a … " << a << '\n';
cout << "b … " << b << '\n';
cout << scientific;
cout << "a … " << a << '\n';
cout << "b … " << b << "\n";
} while (1);
}
出力結果を見ると、確かに float型より double型のほうが精度がいいですね。
《補足》
p.151 の List4C-3 に、
cout << "桁 数:" << numeric_limits
という行があります。
これで、double型の最大精度がわかるみたいです!
#include <limits>
#include <iostream>
using namespace std;
int main()
{
cout << "桁数(float) :" << numeric_limits<float>::digits10 << "桁\n";
cout << "桁数(double):" << numeric_limits<double>::digits10 << "桁\n";
}
新版明解C++入門編 p.149 演習4-6
3種類の浮動小数点型の大きさをsizeof演算子によって表示するプログラムを作成せよ。
// p149_演習4-6
#include <iostream>
using namespace std;
int main()
{
float a = 123.456F;
double b = 123.456;
long double c = 123.456L;
cout << "floa型の大きさ : " << sizeof(float) << '\n';
cout << "double型の大きさ : " << sizeof(double) << '\n';
cout << "long double型の大きさ : " << sizeof(long double) << "\n\n";
cout << "float a の大きさ : " << sizeof(a) << '\n';
cout << "double b の大きさ : " << sizeof(b) << '\n';
cout << "long double c の大きさ : " << sizeof(c) << '\n';
}
新版明解C++入門編 p.149 演習4-7
浮動小数点型の情報をtypeid演算子によって表示するプログラムを作成せよ。
// p149_演習4-7
#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
float p = 1.23F;
double q = 1.23;
long double r = 1.23L;
cout << "変数pの型:" << typeid(p).name() << '\n';
cout << "変数qの型:" << typeid(q).name() << '\n';
cout << "変数rの型:" << typeid(r).name() << '\n';
cout << "浮動小数点型リテラル 123.45F の型:" << typeid(123.45F).name() << '\n';
cout << "浮動小数点型リテラル 123.45 の型:" << typeid(123.45).name() << '\n';
cout << "浮動小数点型リテラル 123.45L の型:" << typeid(123.45L).name() << '\n';
}
--
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6697518
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック