Пытаюсь из библиотеки boost использовать float128. Подключаю так:
#include <boost/multiprecision/float128.hpp>
namespace mp = boost::multiprecision;
mp::float128 N = 0;
Выдает ошибку: #error: "Sorry compiler is neither GCC, not Intel, don't know how to configure this header." В чем ошибка?Или подскажите какой тип данных из этой библиотеки можно использовать для работы с большим числом с плавающей точкой.
Update
Как взаимодействовать теперь целый тип из boost c float? Получается так: Подключаю библиотеку:
#include <boost/multiprecision/cpp_bin_float.hpp>
namespace mp = boost::multiprecision;
mp::cpp_bin_float_quad N = 1010.5;
mp::cpp_int a=5;
Теперь когда я это число пытаюсь поделить на целое большое число из этой библиотеки:
N/=5;
выдает ошибку:отсутствует оператор "/=", соответствующий этим операндам. Как можно одновременно использовать два этих типа?
Как говорит документация Boost'а:
The float128 number type is a very thin wrapper around GCC's float128 or Intel's _Quad data types and provides an real-number type that is a drop-in replacement for the native C++ floating-point types, but with a 113 bit mantissa, and compatible with FORTRAN's 128-bit QUAD real.
Т.е. это всего лишь обёртка на типом float128 из gcc. Использовать его с другими компиляторами не получится. О чём и говорится в ошибке.
Реализация в хедерах двоичной плавающей арифметики с произвольной точностью от boost'а называется cpp_bin_float. По факту это единственный FP-backend за пределами GNU мира. Относительно медленный, зато без зависимостей.
Аналогом непосредственно float128 является тип cpp_bin_float_quad.
#include <boost/multiprecision/cpp_bin_float.hpp>
using namespace boost::multiprecision;
cpp_bin_float_quad N = 0;
Update
Для того чтобы использовать разные типы из библиотек произвольной точности boost'а в одном выражении их необходимо явно приводить к одному одним из способов, например с помощью шаблона convert_to<>():
#include <iostream>
#include <boost/multiprecision/cpp_bin_float.hpp>
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
int main(void) {
cpp_bin_float_quad fpN = 1;
cpp_int iN = 5;
cpp_bin_float_quad fp2;
fpN /= iN.convert_to<cpp_bin_float_quad>();
std::cout << fpN;
return 0;
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники