LINUX.ORG.RU

История изменений

Исправление praseodim, (текущая версия) :

glibc printf может и не поддерживать. В мане нету например. А даже если будет поддерживать - то несовместимо с другими libc. Напиши свой (печатаешь цифру слева от точки, вычитаешь её, умножаешь на 10 и так по циклу).

Порылся, погуглил. Есть вокруг gcc библиотека quadmath, там есть функция quadmath_snprintf https://gcc.gnu.org/onlinedocs/libquadmath/quadmath_005fsnprintf.html

В общем, добавляется что-то вроде

#include <quadmath.h>

...

char buf[128]; 
int n = quadmath_snprintf (buf, sizeof buf, "%+-#*.20Qe", 46, eps__float128);
if ((size_t) n < sizeof buf)  
    printf ("%s\n", buf);

Компилировать с - lquadmath - напечатало +9.62964972193617926528e-35

Несколько напрягает, что вроде просто для вычислений она не обязательна, почти лишняя сущность получается.

Может у кого лучшее решение есть? Кроме колхозинга собственной функции.

Исправление praseodim, :

glibc printf может и не поддерживать. В мане нету например. А даже если будет поддерживать - то несовместимо с другими libc. Напиши свой (печатаешь цифру слева от точки, вычитаешь её, умножаешь на 10 и так по циклу).

Порылся, погуглил. Есть вокруг gcc библиотека quadmath, там есть функция quadmath_snprintf https://gcc.gnu.org/onlinedocs/libquadmath/quadmath_005fsnprintf.html

В общем, добавляется что-то вроде

#include <quadmath.h>

...

char buf[128]; 
int n = quadmath_snprintf (buf, sizeof buf, "%+-#*.20Qe", 46, eps__float128);
if ((size_t) n < sizeof buf)  
    printf ("%s\n", buf);

Компилировать с -mquadmath - напечатало +9.62964972193617926528e-35

Несколько напрягает, что вроде просто для вычислений она не обязательна, почти лишняя сущность получается.

Может у кого лучшее решение есть? Кроме колхозинга собственной функции.

Исходная версия praseodim, :

glibc printf может и не поддерживать. В мане нету например. А даже если будет поддерживать - то несовместимо с другими libc. Напиши свой (печатаешь цифру слева от точки, вычитаешь её, умножаешь на 10 и так по циклу).

Порылся, погуглил. Есть вокруг gcc библиотека quadmath, там есть функция quadmath_snprintf https://gcc.gnu.org/onlinedocs/libquadmath/quadmath_005fsnprintf.html

В общем, добавляется что-то вроде

#include <quadmath.h>

...

char buf[128]; 
int n = quadmath_snprintf (buf, sizeof buf, "%+-#*.20Qe", 46, eps__float128);
if ((size_t) n < sizeof buf)  
    printf ("%s\n", buf);

Компилировать с -mquadmath - напечатало +9.62964972193617926528e-35