floatの整数部分と小数部分及び精度

C

プログラム

//C言語
#include<stdio.h>

int main(void)
{
	float a = 12.345;
	printf("小数の表現:%f\n", a);

	float b = 123456.781234;
	printf("長いケタ:%f\n", b);

	float c = 12.3;
	float d = 4.5;

	printf("微妙な誤差:%f+%f=%f\n", c, d, c + d);

	float e = 10000000.0;
	float f = 1.234567;
	printf("情報落ち:%f+%f=%f\n", e, f, e + f);

return 0;
}

出力結果:

小数の表現:12.345000
長いケタ:123456.781250
微妙な誤差:12.300000+4.500000=16.799999
情報落ち:10000000.000000+1.234567=10000001.000000

float 型の精度(有効桁数)は2進数にして 24 (=23+1) 桁であり,10進数では約 7 桁となる.
ただし、printfの内部処理は6ケタまで精度を持たせている。

float型

float型は4バイト=32ビットのサイズを持ち,そのビットを次のように,符号,指数,仮数を表すために用いる.

float型の内部表現

指数部-127 が指数の値となる.仮数部は仮数の小数点以下を表している.すなわち,仮数は仮数部の先頭に 1. を付加したものになる.

float の表す値 = (-1)符号部 × 2指数部-127 × 1.仮数部

float 型の精度(有効桁数)は2進数にして 24 (=23+1) 桁であり,10進数では約 7 桁となる.
指数部も有限であるため, float で表すことのできる実数の絶対値は次のような範囲に限られる.

1.175494 10-38 < float の絶対値 < 3.402823 10+38

この下限値と上限値とは,ヘッダファイル float.h で FLT_MIN および FLT_MAX という名前でマクロ定義されている.

//C言語
#include <stdio.h>
#include <float.h>

int main()
{
	printf("FLT_MIN = %e,  FLT_MAX =%e\n", FLT_MIN, FLT_MAX);

	return 0;
}

出力結果:

FLT_MIN = 1.175494e-38,  FLT_MAX =3.402823e+38

コメント

タイトルとURLをコピーしました