3.4 浮動小数点数の入出力と四則演算

C 言語で整数以外の実数を扱うには、 浮動小数点数 (floating point numbers) という型を用いる。

prog04.c

/* prog04.c --- 実数の入出力と四則演算 */

#include <stdio.h>

int main(void)
{
  double a, b;

  printf(" 二つの実数を入力して下さい: ");
  scanf("%lf%lf", &a, &b);

  printf(" 入力された実数は %f, %f です。\n", a, b);

  printf(" 和=%f, 差=%f, 積=%f, 商=%f\n", a + b, a - b, a * b, a / b);

  return 0;
}

書式指定ミニマム
  • printf() で double データを小数形式で 出力するには %f という書式を使う。
    printf("a=%f\n", a);
    printf("b=%f, c=%f\n", b, c);
  • scanf() で、 double 型の変数に入力する場合の書式は %lf (他にもあるがこれ一つで十分) を使う (l はエル L の小文字)。
    scanf("%lf", &a);
    scanf("%lf%lf", &b, &c);
    入力と出力で書式が %lf, %f と食い違うのは、 歴史的経緯でしかたない。
  • その他に指数形式で出力する %e, 小数形式と指数形式のうちで「コンパクト」な方を (そのときの式の値に応じて) 選ぶ %g がある。
  • 表示の桁数 ($ n$), 小数点以下の数字の桁数 ($ m$) を 指定するには \fbox{\texttt{\%$n$.$m$f}} とする。
    printf("%20.15f\n", a); (幅 20桁、小数点以下 15 桁、小数形式で表示する)
    例えば
      double x=1.2345678901234567;
      printf("12345678901234567890\n");
      printf("%8.4f\n", x);
    
    とすると
    Image printf_format_ex
    となる。

int と double の使い分け方
int で表すことの出来る値は double でも表すことが出来る場合が多いが、 配列の添字など double は使えない場合もあり、きちんと使い分けるべきである。
(1)
整数でない半端な値が出て来る可能性があれば当然 double
(2)
配列の添字は (絶対) int
(3)
集合の要素数、番号、繰り返しの回数など、 本来整数値しか取り得ない場合は (普通は) int
時々 int では表現不可能だが、 double では表現できるような値を扱うために double を使う、 ということはある。 -- しかし、 最近では long long int 型が安心して使えるようになったので 3、 この用法は時代遅れかもしれない。



桂田 祐史