Вывести __float128 без использования quadmath_snprintf

В моем вопросе об анализе точности float/double в 32 десятичных цифрах, в одном ответе было сказано взглянуть на __float128.

Я его использовал и компилятор смог его найти, но распечатать не могу, так как компилятор не может найти заголовок quadmath.h.

Итак, мои вопросы:

  1. __float128 является стандартным, верно?
  2. Как распечатать?
  3. Разве quadmath.h не стандартно?

Эти ответы не помогли:

  1. Используйте extern C
  2. Точность в C++
  3. Печать

ссылка также не помогла .

Обратите внимание, что я не хочу использовать какую-либо нестандартную библиотеку.

[РЕДАКТИРОВАТЬ]

Было бы также полезно, если бы на этот вопрос был ответ, даже если ответ был бы отрицательным.


person gsamaras    schedule 14.05.2014    source источник
comment
Как указывают начальные символы подчеркивания: не используйте его   -  person    schedule 14.05.2014
comment
Вы проверили ссылку, которую я дал на анализ? Ответ говорит, что это будет вариант. Нет?   -  person gsamaras    schedule 14.05.2014


Ответы (3)


Нет, не стандартно - ни шрифт, ни заголовок. Вот почему тип имеет двойное подчеркивание (зарезервированное имя). Судя по всему, quadmath.h предоставляет метод quadmath_snprintf. В C++ вы, конечно, использовали бы <<.

person MSalters    schedule 14.05.2014
comment
Нет, ты не можешь. __float128 вызовет синтаксическую ошибку при использовании с <<. Отредактируйте ответ, и я буду рад принять его, спасибо. Или, если вы знаете, как заставить его работать с <<, не стесняйтесь учить меня (нас). - person gsamaras; 14.05.2014
comment
@ G.Samaras: я написал бы вместо can, потому что это гипотетически - если бы quadmath была библиотекой C ++, она предлагала бы <<. - person MSalters; 14.05.2014
comment
ИМХО, ваш синтаксис вводит в заблуждение. Однако комментарий проясняет это. У вас, кажется, есть опыт, редактировать или нет. Принять и +1. - person gsamaras; 14.05.2014
comment
Справедливости ради, в Интернете легко быть слишком тонким. Фиксированный. - person MSalters; 14.05.2014

Работайте в GNU-Fortran! Это позволяет запускать одну и ту же программу с разной точностью: одинарной (32 бита), двойной (64 бита), расширенной (80 бит) и четырехъядерной (128 бит). Вам не нужно делать никаких изменений в программе, вы просто пишете «real» для всех чисел с плавающей запятой. Размер плавающих точек задается опциями компилятора -freal-4-real-8, -freal-4-real-10 и -freal-4-real-16.

person Oleg    schedule 10.02.2018

Использование библиотеки boost было для меня лучшим ответом:

#include <boost/multiprecision/float128.hpp>
#include <boost/math/special_functions/gamma.hpp>

using namespace boost::multiprecision;  

float128 su1= 0.33333333333333333q;
cout << "su1=" << su1 << endl;

Не забудьте связать эту библиотеку:

-lquadmath
person Chris Pollitt    schedule 25.09.2020
comment
А для тех, кто настаивает на идеальной точности, попробуйте эту библиотеку BCD: github.com/edwig/bcd. Специально для MS Windows, но я взломал свою личную копию, чтобы удалить зависимости Windows. - person Chris Pollitt; 25.09.2020