libstdc++: Avoid problematic use of log10 in std::format [PR110860]
commit2d2b05f0691799f03062bf5c436462f14cad3e7c
authorPaul Dreik <gccpatches@pauldreik.se>
Mon, 14 Aug 2023 14:42:33 +0000 (14 15:42 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Mon, 14 Aug 2023 17:10:28 +0000 (14 18:10 +0100)
tree856b1ac16da30f801ee2e9511339ebca003fbced
parent882af290c137dfab5d99b88e6dbecc5e75d85a0b
libstdc++: Avoid problematic use of log10 in std::format [PR110860]

If abs(__v) is smaller than one, the result will be of the
form 0.xxxxx. It is only if the magnitude is large that more digits
are needed before the decimal dot.

This uses frexp instead of log10 which should be less expensive
and have sufficient precision for the desired purpose.

It removes the problematic cases where log10 will be negative or not
fit in an int.

Signed-off-by: Paul Dreik <gccpatches@pauldreik.se>
libstdc++-v3/ChangeLog:

PR libstdc++/110860
* include/std/format (__formatter_fp::format): Use frexp instead
of log10.
libstdc++-v3/include/std/format