【C言語】2022年版
浮動小数点で
float型はやめなさい
float型とdouble型の違い

double 浮動小数点 float

■float型対double型

●2003年初版のCプログラミング診断室で紹介されている
「float型はやめなさい」をgcc11版で試してみた。
●2022年現在でも「float型はやめなさい」だった。
処理時間でも精度でもdoubleの圧勝。
●なお浮動小数点は処理系依存の巣窟なのでご自分の環境で
試してみる事をおすすめする。


■実験用プログラム

#include    <stdio.h>
#define MAX       10000000
#define EPSILON	 0.01
void floatloop(int  max) {
	float r = 0.0;
	for (int i = 0; i < max ; ++i)
		r += EPSILON ;
	printf("f=%.20f\n",r);
}
void doubleloop(int max) {
	double r = 0.0;
	for (int i = 0; i < max ; ++i)
		r += EPSILON ;
	printf("d=%.20f\n",r);
}
int main(int argc, char *argv[])
{
	if (argc != 2)  
        return  1;
	printf("EPSILON*MAX=\n %.20f\n",EPSILON*MAX);
	switch (*argv[1]) {
	case 'f':   floatloop(MAX);    	break;
	case 'd':   doubleloop(MAX);   	break;
	}
}

■実験用スクリプト

#!/bin/bash     -x
gcc fvsd.c -O2
time    ./a.out     float
time    ./a.out     double

■実験結果

+ gcc fvsd.c -O2
+ ./a.out float
EPSILON*MAX=
 100000.00000000000000000000
f=95680.94531250000000000000
real    0m0.044s
user    0m0.031s
sys     0m0.000s
+ ./a.out double
EPSILON*MAX=
 100000.00000000000000000000
d=99999.99998630968912038952
real    0m0.025s
user    0m0.016s
sys     0m0.016s

処理速度  44s 対 25s 
⇒double の勝ち
精度  95680.9略 対 99999.9略
⇒doubleの勝ち

■まとめ

特殊な事情が無い限り処理速度でも精度でも
double型を使うのが無難。