📦 変数・型・演算子
if (0.1 + 0.2 == 0.3) が成立しません。printf("%.17f\n", 0.1 + 0.2) すると 0.30000000000000004。-Wfloat-equal を付けると warning: comparing floating-point with '==' or '!=' is unsafe。
0.1 や 0.2 は2進小数では正確に表せず、ごく小さな誤差を含みます。誤差を含んだ計算結果が、別の書き方で得た値とビット単位まで一致するとは限りません。
差の絶対値で比べます: if (fabs(a - b) < 1e-9)(math.h、リンクは -lm)。扱う値の桁が広いときは相対誤差で比べます。金額のように厳密さが必要なものは、そもそも整数(円単位)で持つのが最も確実です。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。