Пытаюсь из библиотеки 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;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
С помощью async запускаю в main поток, в котором крутится бесконечный циклКак завершить этот поток?
Проблема в том чтобы после выполнения исключения Owerwriting программа продолжила работу и копировала файл,у меня она просто выдает исключение...
Когда я пытаюсь создать/открыть проект Visual C++, я получаю такое сообщение: