このサイトは更新終了し, こちらに移行しています。

C言語入門: 実数変数

筑波大学農林工学系 奈佐原(西田)顕郎

ホーム


少数を含む計算には, 実数型の変数を使う必要がある。実数型には,

という2つの型がある。実数型変数は, 浮動小数点といって, 有効数字の部分と位取りの部分をわけて記録するため, 広大な範囲の数を扱うことが出来る。

整数型にせよ実数型にせよ, 情報量の多い型(longやdouble)を使えば, 値の範囲の制約が緩いとか, 精度が高い, などの面で有利なプログラミングができる。しかし一方で, メモリーを余分に消費し, スピードも落ちるという不利も生じる。

例えば, 1から9までの逆数の和(1/1 + 1/2 + 1/3 + ... + 1/9)を計算するプログラムは, 以下のようになる(左端の行番号は入力不要。右端の//で始まるコメントも入力不要):

  1. /* float_test.c */
  2. /* 2008/07/15 K. Nasahara */
  3. /* 1/1 + 1/2 + 1/3 + ... + 1/9 */
  4. # include <stdio.h>
  5. main()
  6. {
  7. int i;
  8. float s=0;
  9. for (i=1; i<=9; i++)
  10. s=s+1.0/i; // 1.0にしないと, 整数演算になってしまい, 1/2や1/3はゼロになってしまう。
  11. printf("%f\n", s); // 実数型のフォーマットは%fである。
  12. }
11行目が計算部分だが, ここで1.0/iのかわりに1/iとするとうまくいかない。それは, iが整数型変数なので, 1/iは整数どうしの割算となってしまい, 整数の範囲内で演算が行われるからである。つまり, iが2以上ならすべて, 1/iはゼロと計算されてしまう。それを避けるためには, 1を1.0と表現するなどして, 演算対象の一部を実数型にしてやる。そうすれば, 演算は実数の範囲で行われることになる。


課題-1 ひとつの整数nをキーボードから読み込んで, 1からnまでの数の2乗の逆数の総和を計算するプログラムを作れ。nが十分に大きければ, この和は1.64493...(円周率の二乗/6)になるはずである。


(ブラウザの「戻る」ボタンで戻ってください)