Boost multiprecision失败是因为complex的实现试图在_Isinf或_Isnan等内部函数中强制转

Boost multiprecision fails because the implementation of complex tries to cast to double in internal functions like _Isinf or _Isnan

本文关键字:Isnan Isinf 内部函数 是因为 失败 multiprecision complex 实现 Boost      更新时间:2023-10-16

我需要一个类似bsd的许可C(++)多精度库,支持复数,所以我尝试了boost.

以下代码失败:

#include <boost/multiprecision/cpp_dec_float.hpp>
#include <complex>
using namespace boost::multiprecision;    
std::complex<cpp_dec_float_50>(1.0, 2.0) / std::complex<cpp_dec_float_50>(1.0, 2.0)

在Visual Studio 2012中有一个错误C2440,因为complex的实现试图在_Isinf或_Isnan等内部函数中强制转换为double。

这是我的错误吗?我该如何解决这个问题?有没有更好的图书馆?

From c++ 116.4/2:

为任何其他类型实例化模板复合体的效果

所以你不能可靠地将std::complex与其他类型一起使用,但也许boost有一个complex类型与cpp_dec_float_50一起工作。

GCC 4.7将允许您在std::complex<>中使用升压多精度浮点数