public class 任意のクラス名 { public static void main(String args[]) { int i; float f = 0; for (i = 0; i < 111; i++) { f += 0.2; } if (f == 22.2) { System.out.println("そうなります"); } else { System.out.println("そうなりません"); //出力は0.0000012です↓↓ System.out.println(f - 22.2); } } }
なぜこのプログラムを実行すると22.2にはならないのでしょうか?
できればメモリ・CPUのレジスタの観点から説明頂けると幸いです。(ちなみにCPUは64ビットです)
0.2は二進数で循環小数であり(0.00110011・・・)floatは4バイトですので4バイトの箇所で
切り落とされてしまい、そのまま計算されるということでしょうか?
でもだとすると System.out.println(f - 22.2); はマイナスになるはず