上級 › 0.1 + 0.2 == 0.3 が偽になる理由 › パターン1
0.1 + 0.2 == 0.3 が偽になる理由
doubleやfloatは2進数で値を表現するため、0.1や0.2のような小数を正確には表現できません。
1 #include <stdio.h> 2 #include <math.h> 3 4 int main(void) { 5 double a = 0.1 + 0.2; 6 if (____________________) { ^ 7 printf("equal\n"); 8 } else { 9 printf("not equal\n"); 10 } 11 return 0; 12 }
出力: not equal期待: equal
空欄を埋めてコンパイル・実行を通す
0.1と0.2は2進数で正確に表現できないため、0.1 + 0.2はぴったり0.3にはなりません。==での比較はほぼ確実に失敗します。差の絶対値が十分小さいかどうか(許容誤差)で判定します。
次の問題