Проблема, с которой вы столкнулись, не имеет ничего общего с использованием setprecision
или потоков.
80-битный двойной (long double
) недостаточно велик для хранения числа, которое выпытаясь хранить с точностью, которую вы хотите.80-битные двойные числа имеют мантиссу из 64 битов, что означает, что точность чисел, которые она может представлять, равна 64-битному целому числу, которое само ограничено 19 [десятичными] цифрами значения.Значение, которое вы пытаетесь сохранить, составляет (5.9486_57476_78615_88251_0631
) 24 десятичных знака значения, что означает, что оно просто слишком точное, чтобы быть точно представленным вашей программой.
Если вы хотите сохранить это значение в вашей программе,вам нужно сохранить его в строковом представлении или найти библиотеку произвольной точности для представления / манипулирования этими числами.Я рекомендую использовать библиотеку boost.multiprecision , хотя это зависит от вашей организации / задачи, разрешающей использование библиотек C ++ Boost.