Liczby zmiennoprzecinkowe mają swoją dokładność, która nie jest taka, jaką byś się spodziewał licząc dziesiętnie. One są zapisywane binarnie, więc nie każda liczba dziesiętna się przekłada na binarną i są wprowadzane zaokrąglenia. Dlatego nie wolno porównywać liczb zmiennoprzecinkowych poprzez znak == albo !=. W tym przypadku zmień na <10 i jak przekroczysz 10 (w tym także o troszkę), to wyłapie.
Żeby zobaczyć jak naprawdę zmienia ci się zmienna, daj taki zapis:
cout << setprecision(20) << zmienna << endl;
a wcześniej
#include <iomanip>