上級 › 0.1 + 0.2 == 0.3 が偽になる理由 › パターン2
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 b = 1.1 - 1.0; 6 if (____________________) { ^ 7 printf("equal\n"); 8 } else { 9 printf("not equal\n"); 10 } 11 return 0; 12 }
出力: not equal期待: equal
空欄を埋めてコンパイル・実行を通す
引き算の結果も同じ問題を抱えます。1.1 - 1.0は数学的には0.1ですが、浮動小数点の内部表現では誤差を含みます。
次の問題