c++输出精度设置

去对面公司笔试,要求输出16位小数,忘记怎么设置输出精度了,那个题就0%了,心塞。

代码:

#include <iostream>
using namespace std;
int main() {
    int b_arr[]={1,2,3,4};
    cout<<b_arr<<endl;;//仅仅打印数组的起始地址,只有字符数组才能这样输出。
    string a_arr[]={"afsf","asdfad"};
    cout<<a_arr<<endl;
    char str2[4] = {'b','o','x'};//不加上4,会输出box烫烫烫特 后面带着其它的,因为没有加上/0代表结束
    cout<<str2<<endl;

    float a=3.1311111111111111111111111111111111111111111111111111111111111111;
    double b=3.13111111111111111111111111111111111111111111111111111111111111111;
    long double c=3.13111111111111111111111111111111111111111111111111111111111111111;
    cout<<setprecision(50)<<a<<endl;//cout默认输出6位精度,用s那个函数自定义精度,但是输出结果中,float只有前面7位正确,double只有15位正确。
    cout<<a<<endl;//不会改变回来
    cout<<b<<endl;
    cout<<c<<endl;
    cout<<"sizeof(shortint)="<<sizeof(short int)<<endl;
    cout<<"sizeof(int)="<<sizeof(int)<<endl;
    cout<<"sizeof(longint)="<<sizeof(long int)<<endl;
    int a_jinzhi=-123;
    cout<<hex<<a_jinzhi<<endl;
    cout<<a_jinzhi<<endl;//不会改变回来,依然是十六进制。
    cout<<10;
    return 0;
}

输出:

0x7ffd9a740d70
0x7ffd9a740db0
box
3.13111114501953125
3.13111114501953125
3.1311111111111111782179250440094619989395141601562
3.1311111111111111782179250440094619989395141601562
sizeof(shortint)=2
sizeof(int)=4
sizeof(longint)=8
ffffff85
ffffff85
a