Это не проблема с поплавком. Вы не можете точно представить 0,8, но не беспокойтесь - просто выведите значения с желаемой точностью:
#include <iomanip> // for fixed and setprecision
#include <iostream> // for cout
#include <cstdio> // for printf
for (auto it = v.cbegin(), end = v.cend(); it != end; ++it)
{
std::cout << std::fixed << std::setprecision(3) << *it << std::endl;
}
В качестве альтернативы вы можете использовать std::printf("%.3f\n", *it)
.
Если вы действительно хотите хранить точные значения в вашей структуре данных, вы не можете использовать обычные значения с плавающей точкой. Вы можете либо использовать какую-то интерпретацию целых чисел с фиксированной точкой (например, измерять все в единицах 1/1000), либо использовать десятичные числа с плавающей запятой (редко), либо вы можете хранить рациональные числа (коэффициенты целые числа). Если вы делаете только сложение и вычитание, естественным путем будет фиксированная точка.