I'm positively shocked. In C++, there's no easy way to write a template function with one parameter that will output that parameter to a stream, with full precision.

If you write:

```
std::cout << t;
```

then you'll be using the default stream precision, which is 6. And 't' can be
`double`

with 10 digits after the dot. If you write:

```
std::cout << setprecision(10000) << t;
```

you'll suddenly get too many digits. For outputting "1.1", you'll get:
even though real precision of double is 15-16 digits.1.100000000000000088817841970012523233890533447265625

If you write:

```
std::cout << setprecision(fancy_formula_involving(numeric_limits<T>::digits)
<< t;
```

the code won't compile if T is "char[N]". And if numeric_limits is not
specialized for a given T, results can also be strange.Oops!

## No comments:

Post a Comment