[Bug libstdc++/126731] New: `std::format("{}", std::float16_t)` does not agree with `std::to_chars`

121539739 at qq dot com via Gcc-bugs <[email protected]>
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126731

            Bug ID: 126731
           Summary: `std::format("{}", std::float16_t)` does not agree
                    with `std::to_chars`
           Product: gcc
           Version: 17.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: 121539739 at qq dot com
  Target Milestone: ---

For a floating-point argument with no presentation type and no precision,
[format.string.std] specifies the output as:

> equivalent to `to_chars(first, last, value)`

so `std::format("{}", v)` and `std::to_chars(first, last, v)` have to produce
the same characters. For `std::float16_t` and `std::bfloat16_t` they do not.

```cpp
#include <cassert>
#include <charconv>
#include <format>
#include <iterator>
#include <stdfloat>
#include <string>

int main() {
    std::float16_t h = 0.1f16;

    char buf[32];
    auto [ptr, ec] = std::to_chars(buf, std::end(buf), h);
    assert(ec == std::errc{}); // ok

    assert(std::format("{}", h) == std::string(buf, ptr));
    //     "0.099975586"           "0.1"                   fail
}
```

detailed: https://godbolt.org/z/WeYd3o5fh
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.