Тема: Це цікаво!
double a = 2;
a += 0.4;
a += 0.4;
a += 0.4;
if(a == 3.2)
cout << "yeaah!";
через особливості внутрішнього представлення даних в пам'яті комп'ютера дана умова не виконується!
хоча, якщо провести математичні операції в нашій рідній 10-вій системі числення
а = 2 + 0.4 + 0.4 + 0.4 = 3.2
проблема полягає в тому що число 0.4(10) = 0.6666666(16) - а саме так воно представиться в пам'яті комп'ютера
робимо зворотнє перетворення до десяткової системи числення
0.66666(16) = 0.39999(10)
і бачимо що 0.4 != 0.39999, тому треба очікувати некоректного результату
2 + 0.39999+ 0.39999 + 0.39999 = 3.1999999(наближено)
3.2 != 3.199999
отакі-то справи)
досить багато дробових чисел при переведенні до 16 системи дають не зовсім правильний результат
Буду радий почути цікаві ідеї щодо усунення цієї проблеми