アフィリエイト広告を利用しています

広告

posted by fanblog

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型は、値が表示されるとき どんな違いがあるんだろう と期待しながら、
桁数の多い値を入力してみたところ・・・

b04_05-1.png

なんと!Σ【*゚д゚*】
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);
}

b04_05-4.png

出力結果を見ると、確かに float型より double型のほうが精度がいいですね。


《補足》

p.151 の List4C-3 に、
   cout << "桁 数:" << numeric_limits::digits10 << "桁\n";
という行があります。
これで、double型の最大精度がわかるみたいです!

#include <limits>
#include <iostream>
using namespace std;

int main()
{
cout << "桁数(float) :" << numeric_limits<float>::digits10 << "桁\n";
cout << "桁数(double):" << numeric_limits<double>::digits10 << "桁\n";
}

b04_05-2.png




新版明解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';
}

b04_06.png




新版明解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';
}

b04_07.png

新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/8/30 21:02時点)









--
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/6697518
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。