https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66346

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Ruslan from comment #0)
> #include <cmath>
> int main()
> {
>     volatile long double two=2.L;
>     long double vol=log10(two);
>     long double con=log10(2.L);

These do not calculate the result as long double, you are calling ::log10 from
the C library, which takes a double not a long double.

If you call log10l or std::log10 then you get the long double overload, and
should get:

computed constant: 0.3010299956639811952
computed volatile: 0.3010299956639811952
reference value  : 0.3010299956639811952

Also, note that including <cmath> then calling log10 unqualified is not
portable, if you want to call it unqualified you need to include <math.h>, or
if you include <cmath> you should be calling std::log10.

Reply via email to