Проблему хранения дробных чисел в памяти компьютера в двоичном виде я уже знаю, т.е. почему
не выполняется равенство 0.1 + 0.2 == 0.3 мне понятно.
Но мне не понятно почему равенство 0.2f + 0.3f == 0.5f верное.
Набросал такой код:
cout << setprecision(64)
<< "0.3 = " << 0.3 << "\n"
<< "0.2 = " << 0.2 << "\n"
<< "0.2 + 0.3 = " << 0.2 + 0.3 << "\n"
<< "0.3f = " << 0.3f << "\n"
<< "0.2f = " << 0.2f << "\n"
<< "0.2f + 0.3f = " << 0.2f + 0.3f << "\n";
У меня выводится следующее:
0.3 = 0.299999999999999988897769753748434595763683319091796875
0.2 = 0.200000000000000011102230246251565404236316680908203125
0.2 + 0.3 = 0.5
0.3f = 0.300000011920928955078125
0.2f = 0.20000000298023223876953125
0.2f + 0.3f = 0.5
Т.е. почему 0.3 + 0.2, у которых тип double, еще понятно, если сложить их значения действительно будет 0.5.
Но почему 0.2f + 0.3f тоже выводится как 0.5, а не как 0.50000001490116119384765625?