Hexfloat 机械手和精度
Hexfloat manipulator and precision
为什么使用 hexfloat
操纵器的输出会忽略 ostream
上的任何精度?
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main(){
cout << setw(17) << left << "default format: " << setw(20) << right << 100 * sqrt(2.0) << " " << cout.precision() << '\n'
<< setw(17) << left << "scientific: " << setw(20) << right << scientific << 100 * sqrt(2.0) << " " << cout.precision() << '\n'
<< setw(17) << left << "fixed decimal: " << fixed << setw(20) << right << 100 * sqrt(2.0) << " " << cout.precision() << '\n'
<< setw(17) << left << "hexadecimal: " << hexfloat << setw(20) << right << uppercase << 100 * sqrt(2.0) << nouppercase << " " << cout.precision() << '\n'
<< setw(17) << left << "use defaults: " << defaultfloat << setw(20) << right << 100 * sqrt(2.0) << " " << cout.precision() << "\n\n";
}
尽管默认精度为 6,但在以十六进制格式 (coliru) (gcc 5.2.0) 输出双精度值时,这似乎被忽略了:
default format: 141.421 6
scientific: 1.414214e+02 6
fixed decimal: 141.421356 6
hexadecimal: 0X1.1AD7BC01366B8P+7 6
use defaults: 141.421 6
使用十六进制格式能保证小数精度为6吗?
std::hexfloat
格式旨在转储浮点值的精确表示。字符串表示不是供人类使用,而是主要用于再次恢复完全相同的表示。因此,根据任何流设置以任何方式截断格式是没有意义的。
为什么使用 hexfloat
操纵器的输出会忽略 ostream
上的任何精度?
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main(){
cout << setw(17) << left << "default format: " << setw(20) << right << 100 * sqrt(2.0) << " " << cout.precision() << '\n'
<< setw(17) << left << "scientific: " << setw(20) << right << scientific << 100 * sqrt(2.0) << " " << cout.precision() << '\n'
<< setw(17) << left << "fixed decimal: " << fixed << setw(20) << right << 100 * sqrt(2.0) << " " << cout.precision() << '\n'
<< setw(17) << left << "hexadecimal: " << hexfloat << setw(20) << right << uppercase << 100 * sqrt(2.0) << nouppercase << " " << cout.precision() << '\n'
<< setw(17) << left << "use defaults: " << defaultfloat << setw(20) << right << 100 * sqrt(2.0) << " " << cout.precision() << "\n\n";
}
尽管默认精度为 6,但在以十六进制格式 (coliru) (gcc 5.2.0) 输出双精度值时,这似乎被忽略了:
default format: 141.421 6
scientific: 1.414214e+02 6
fixed decimal: 141.421356 6
hexadecimal: 0X1.1AD7BC01366B8P+7 6
use defaults: 141.421 6
使用十六进制格式能保证小数精度为6吗?
std::hexfloat
格式旨在转储浮点值的精确表示。字符串表示不是供人类使用,而是主要用于再次恢复完全相同的表示。因此,根据任何流设置以任何方式截断格式是没有意义的。