Cプログラミング入門

第12回Chapter 4 計算してみよう(4)

実数はfloat/doubleで

int型では、1.2とか-3.5とかのような小数の値を扱うことができません。小数の値を扱うには、int型の代わりに浮動小数点型を用います。浮動小数点型には、次のようにfloatdoubleの2つの型があります。

float単精度浮動小数点型
double倍精度浮動小数点型

floatとdoubleとは、扱える値の精度や使用するメモリのバイト数が違うだけで、プログラム上はどちらもほぼ同様に扱うことができます。

たとえば、double型の変数dを宣言するには、

  double d;

と書きます。

浮動小数点型の変数の値をprintf()で表示するには、書式指定文字列として、

  %f

を使います。double型の変数dの値をprintf()で表示するには、

  printf("%f\n", d);

と書きます。%fという書式指定の場合、実際に表示されるのは小数点以下6桁までです。表示する値の小数点以下の桁数を変更したい場合は、%f%fの間に . と桁数を表す数字を入れます。たとえば、

  printf("%.12f\n", d);

と書くと、小数点以下12桁までが表示されます。

浮動小数点型の計算を行うプログラムの例(pi.c)をリスト4.3に示します。この例では、三角関数のtan()(タンジェント)の逆関数のatan()(逆タンジェント)を使って、円周率(π)の値を求めています。atan(1.0)はπ/4の値となるため、これを4倍すればπの値になります。

リスト4.3 円周率計算プログラム pi.c
#include <stdio.h>
#include <math.h>

int
main()
{
  double d;

  d = atan(1.0) * 4;
  printf("%.10f\n", d);

  return 0;
}

pi.cでは、atan()関数を使用するため、新しくmath.hというヘッダファイルをインクルードしています。

なお、atan()の引数の「1.0」は、浮動小数点型の定数値とする必要があるため、「1」ではなく「1.0」と書く必要があります。「1」と書いてしまうと整数型の定数となってしまい、atan()関数が正常に動作しなくなるので注意してください。

pi.cをコンパイルするには、これまでと違ってコマンドラインの右側に -lm というオプションを付ける必要があります(図4.3)⁠-lm」は浮動小数点型ライブラリ(libm)とのリンクを指定するためのオプションです。pi.cの中で使用したatan()という関数は、このlibmの中に存在するのです。

図4.3 pi.cのコンパイルと実行例
$ gcc -O2 -o pi pi.c -lm
$ ./pi
3.1415926536
$

なお、⁠-lm」オプションはライブラリのリンク順の関係で、ソースファイルのpi.cよりも右側に付けなければならないので注意してください。

おすすめ記事

記事・ニュース一覧