Вы не получаете худшую точность.
То, что происходит, - то, что, когда вы печатаете число, библиотека потока усекает отображаемое значение.Используйте std :: setprecision для получения определенной точности.
double x = 1.0/3;
long double y = 1.0/6;
// Prints out the precision
std::cout << "Limit: " << std::numeric_limits<double>::digits10 << "\n";
std::cout << "Limit: " << std::numeric_limits<long double>::digits10 << "\n";
// prints the numbers with max precision.
std::cout << std::setprecision(std::numeric_limits<double>::digits10) << x << "\n";
std::cout << std::setprecision(std::numeric_limits<long double>::digits10) << y << "\n";