我正在尝试解决 timus reverse root (1001) 问题并面临以下问题

I am trying to solve timus reverse root (1001) problem and facing the following problem

#include <iostream> 
#include <cmath>

double buf[128 * 1024];
int main()
{
    int i = 0;
    unsigned long long n; // 64-bit unsigned integer
    while (std::cin>>n) {
        buf[i ++] = double(sqrt(n)); // store in buffer
    }
    i--;
    while(i>=0){
        printf("%lf\n",buf[i]); // When i am using this it works fine.
        //std::cout<<buf[i]<<std::endl; // When i am using this line instead of printf function it shows wrong answer. why?
        i--;
}


    return 0;
}

我是用G++编译的。 当我尝试使用 printf 函数打印输出时,它被 接受。 但是当我使用 cout 函数然后它给出 错误的答案 。为什么会这样? 当我在 GCC7.1 中编译时,此代码显示编译错误。这是什么原因呢? 问题 Link:https://acm.timus.ru/problem.aspx?space=1&num=1001

<< 运算符与 std::cout 一起使用默认舍入到 6 有效数字 并对大浮点数使用科学记数法。要禁用科学记数法,请包含 <iomanip> header 并使用 std::cout << std::fixed << buf[i];。使用 std::fixed 也会将舍入设置为小数点后 6 位 .