这更像是一个好奇的问题,但有谁知道在C ++中如何处理负精度值?例如:
double pi = 3.14159265;
cout.precision(-10);
cout.setf(ios::fixed, ios::floatfield);
cout << pi << endl;
我已经尝试过并使用GCC,似乎忽略了精确值,但我很好奇是否有关于这种情况会发生什么的官方路线。
答案 0 :(得分:3)
奇怪(错误的是,恕我直言)C ++标准指定一个带符号的类型(streamsize)作为精度参数,因此它不会被转换为大数。但是,标准没有说明负数可能意味着什么。
答案 1 :(得分:1)
我无法在C++03或C++0x (N3092)的草稿中找到此行为的任何规范。但是,C89标准说
7.19.6.1 fprintf功能
采用负精度参数,就好像省略了精度一样。
我希望C ++ std :: ostream行为与C I / O printf一致。 fprintf和相关功能。
使用Visual C ++ 10.0和GCC 4.4.1进行快速测试表明它是这种方式,负精度意味着精度被省略。并且,省略精度意味着表125
中 27.5.4.1 basic_ios构造函数中指定的 6 位置的默认值