Я следовал этот ответ и использовал Boost.Multiprecision использовать с высокой точностью числа с плавающей запятой (Примеры).
main.cpp
#include <iostream>
#include <boost/multiprecision/mpfr.hpp> // Defines the Backend type that wraps MPFR
int main(int argc, char** argv)
{
namespace mp = boost::multiprecision; // Reduce the typing a bit later...
typedef mp::number<mp::mpfr_float_backend<300> > my_float;
my_float a, b, c; // These variables have 300 decimal digits precision
return 0;
}
Однако у меня есть серьезная проблема для компиляции этого кода, поскольку я получаю следующую ошибку:
/usr/include/boost/multiprecision/mpfr.hpp:15:18:
fatal error: mpfr.h: No such file or directory
Даже установка libgmp3-DEV а также gmplib не работал.
Что случилось?
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.9)
project (main)
# Libraries
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.54.0 COMPONENTS filesystem regex system thread date_time wave)
if(NOT Boost_FOUND)
message( FATAL_ERROR "Boost 1.54.0 not found." )
endif()
include_directories(SYSTEM ${Boost_INCLUDE_DIR})
# Flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wfatal-errors -std=c++11")include_directories(${Boost_INCLUDE_DIRS})
# pre executable commandsadd_executable(main
main.cpp
)# Link
target_link_libraries(main ${Boost_LIBRARIES})
target_link_libraries(main ${CMAKE_THREAD_LIBS_INIT})
Если вы хотите использовать MPFR Бэкэнд, вы должны установить его отдельно, убедиться, что он собран, и убедиться, что его заголовки находятся в пути INCLUDE вашего компилятора, а его двоичные файлы (библиотеки) находятся в командной строке вашего компоновщика.
(MPFR не является GMP.)
Других решений пока нет …