
C言語基礎|浮動小数点定数
小数の書き方ひとつで、型も精度も変わる。浮動小数点定数を“正しく書ける”ようになろう!
3.14 はただの数字じゃなくて「型つきの定数」
C言語で 3.14 や 57.3 のように小数をそのまま書くと、それは 浮動小数点定数(floating-point constant)になります。
ここで大事なのは、浮動小数点定数には
- 見た目(書き方)
- 指数(Eやeの部分)
- 接尾語(F や L)
といった要素があり、それによって 型(float / double / long double)が決まることです。
つまり、同じ 57.3 でも
57.3 / 57.3F / 57.3L は “別物” として扱われるんですね。

浮動小数点定数の構造
ご提示の「構文図(文章化)」を、実務で使える形に整理します。
浮動小数点定数を構成する部品
| 部品 | 例 | 意味 |
|---|---|---|
| 整数部 | 57 | 小数点より左 |
| 小数点 | . | 小数点 |
| 小数部 | 3 | 小数点より右 |
| 指数部 | E4 / e-5 | 10のべき乗でスケールする |
| 浮動小数点接尾語 | F / L | 型を指定する |
表の説明
浮動小数点定数は「整数部+小数点+小数部」に、必要なら「指数部」や「接尾語」が付くイメージです。
指数部は “×10n” の形を短く書くために使います。
型は接尾語で決まる(付けないと double)
接尾語と型の対応
| 書き方 | 型 | 例 |
|---|---|---|
| 接尾語なし | double | 57.3 |
| F または f | float | 57.3F |
| L または l | long double | 57.3L |
表の説明
- 何も付けないと double になります(これがデフォルト)。
- float にしたいときは F、long double にしたいときは L。
- 小文字の l は 1 と見分けがつきにくいので、L 推奨です。
指数表記(E / e)は「10のべき乗」
指数部が付くと、数学の 1.23 × 10^4 の形をそのまま書けます。
指数表記の意味
1.23E4 = 1.23 × 104
89.3E-5 = 89.3 × 10-5
図の説明
E の後ろは「10の何乗か」です。マイナスなら小さくなります。
省略できる部分・できない部分
浮動小数点定数は、整数部や小数部を省略できることがあります。
省略パターンの例
| 書き方 | 意味 | 型 |
|---|---|---|
| .5 | 0.5 | double |
| 12. | 12.0 | double |
| .5F | 0.5 | float |
| 1L | 1.0 | long double |
表の説明
- .5 は「整数部が省略された」例(0.5)。
12. は「小数部が省略された」例(12.0)。 - 接尾語を付けると型も変わります。
- ただし「全部省略」はできません。小数点と小数部まで消すなら、整数部は必須になります(例:1L)。
サンプル:定数の“型”と“値”をまとめて確認
浮動小数点定数の書き方(接尾語・指数・省略)で型と値がどう見えるかを確認するプログラムです。
プロジェクト名:chap7-25-1 ソースファイル名:chap7-25-1.c
// 浮動小数点定数の書き方と型を確認する
#include <stdio.h>
int main(void)
{
double a = 57.3; // 接尾語なし → double
float b = 57.3F; // F → float
long double c = 57.3L; // L → long double
double d = 1.23E4; // 指数表記
double e = .5; // 整数部省略
double f = 12.; // 小数部省略
printf("浮動小数点定数は、書き方で型が変わります。\n");
printf("\n【接尾語で型を指定】\n");
printf("57.3 は double です -> %.10f\n", a);
printf("57.3F は float です -> %.10f\n", b);
printf("57.3L は long double です -> %.10Lf\n", c);
printf("\n【指数表記と省略表記】\n");
printf("1.23E4 は 12300.0 の意味 -> %.10f\n", d);
printf(".5 は 0.5 の意味 -> %.10f\n", e);
printf("12. は 12.0 の意味 -> %.10f\n", f);
return 0;
}このプログラムで分かること
- 浮動小数点定数は 接尾語がなければ double
- F を付けると float、L を付けると long double
- E / e の指数表記は 10のべき乗
- .5 や 12. のように一部省略もできる。
登場する命令の書式と役割
printf 関数
書式
- printf(書式文字列, 引数1, 引数2, ...);
何をする命令?
画面に文字列や数値を表示します。
今回よく出る変換指定子
| 指定子 | 対象 | 説明 |
|---|---|---|
| %f | double(floatは渡すとdoubleに拡張される) | 小数表示 |
| %Lf | long double | long double を小数表示 |
| %.10f | double | 小数点以下を10桁で表示 |
| %.10Lf | long double | 小数点以下を10桁で表示 |
表の説明
- Cの可変長引数(printf)では、float は自動的に double に拡張されて渡されます。
だから float を表示する場合も、基本は %f でOKです。 - long double だけは別扱いなので、%Lf を使います。
<math.h> と sqrt 関数(文書内の項目としてしっかり整理)
本文には <math.h> と sqrt も登場するので、ここも丁寧に押さえます。
sqrt 関数
ヘッダ
- #include <math.h>
形式
- double sqrt(double x);
何をする命令?
x の平方根(√x)を計算して返します。
返却値
- 計算した平方根を返します。
sqrt / sqrtf / sqrtl の使い分け
| 関数 | 引数の型 | 戻り値の型 | 使う場面 |
|---|---|---|---|
| sqrt | double | double | 基本はこれ |
| sqrtf | float | float | float で統一したいとき |
| sqrtl | long double | long double | long double を活かしたいとき |
表の説明
型に合わせた関数を選ぶと、余計な変換が減って意図が明確になります。
ただし「基本は double」で進めるのが一番ラクです。
演習問題
ここでは「類似」になるように、入力・sizeof・sqrt をそれぞれ扱う構成にします。
演習7-7:3種類の型で読み込んで表示
float / double / long double の3つの変数に数値を読み込み、それぞれを表示するプログラムを作成せよ。表示は小数点以下を多めに出して違いを観察せよ。
解答例
プロジェクト名:chap7-25-2 ソースファイル名:chap7-25-2.c
#include <stdio.h>
int main(void)
{
float a;
double b;
long double c;
printf("float 用の数値を入力してください: ");
scanf("%f", &a);
printf("double 用の数値を入力してください: ");
scanf("%lf", &b);
printf("long double 用の数値を入力してください: ");
scanf("%Lf", &c);
printf("\n入力値の確認です。\n");
printf("float = %.10f\n", a);
printf("double = %.17f\n", b);
printf("long double = %.21Lf\n", c);
return 0;
}解説(ここがポイント)
- scanf の指定子は型で違います
・float は %f
・double は %lf
・long double は %Lf - 表示は float/double/long double で桁数を変えると「精度差」が見えやすいです
演習7-8:sizeof で型の大きさを表示
float / double / long double の大きさを sizeof で求めて表示せよ。
解答例
プロジェクト名:chap7-25-3 ソースファイル名:chap7-25-3.c
#include <stdio.h>
int main(void)
{
printf("float の大きさ = %zu バイト\n", sizeof(float));
printf("double の大きさ = %zu バイト\n", sizeof(double));
printf("long double の大きさ = %zu バイト\n", sizeof(long double));
return 0;
}解説
- sizeof(型名) は「その型が何バイトか」を返します
- 結果は環境依存です(処理系によって long double が 16 の場合もあります)
演習7-9:面積から一辺を求める(sqrt使用)
実数値の面積を読み込み、その面積を持つ正方形の一辺の長さを求めて表示せよ。
解答例
プロジェクト名:chap7-25-4 ソースファイル名:chap7-25-4.c
#include <math.h>
#include <stdio.h>
int main(void)
{
double area;
printf("正方形の面積を入力してください: ");
scanf("%lf", &area);
if (area < 0.0) {
printf("面積は0以上で入力してください。\n");
return 0;
}
double side = sqrt(area);
printf("一辺の長さは %f です。\n", side);
return 0;
}解説
- side = sqrt(area) で、一辺を計算できます(side × side = area)
- 負の面積は現実的におかしいので、簡単に入力チェックしておくと安心です。
