上級 › 0.1 + 0.2 == 0.3 が偽になる理由 › パターン3
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 c = 0.3 - 0.2; 6 if (____________________) { ^ 7 printf("equal\n"); 8 } else { 9 printf("not equal\n"); 10 } 11 return 0; 12 }
出力: not equal期待: equal
空欄を埋めてコンパイル・実行を通す
型をfloatからdoubleに変えても解決しません。2進数で0.1を正確に表現できないという根本的な制約は変わらないためです。
次の問題