5

我需要一个支持复数的类似 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。

这是我的错误吗?我怎样才能解决这个问题?有更好的图书馆吗?

4

2 回答 2

3

从 C++11 26.4/2 开始:

为浮点、双精度或长双精度以外的任何类型实例化模板复合体的效果是未指定的。

所以你不能可靠地std::complex与其他类型一起使用,但也许 boost 有一种complex可以与cpp_dec_float_50.

于 2013-05-31T17:12:29.350 回答
1

GCC 4.7 将允许您使用 boost 多精度浮点数和std::complex<>.

于 2013-07-29T19:32:19.153 回答