使用具有三角函数的增强多精度

时间:2015-05-26 22:29:48

标签: c++ boost multiprecision

考虑以下代码,该代码创建一个多精度浮点数' a '通过使用提升。

如何使用boost库调用三角函数? 例如,我希望计算 sin(a)

#include <iostream>
#include "boost/multiprecision/cpp_bin_float.hpp"

using namespace std;
using namespace boost::multiprecision;

typedef number<backends::cpp_bin_float<24, backends::digit_base_2, void, boost::int16_t, -126, 127>, et_off> float32;

int main (void) {
  float32 a("0.5");

  return 0;
}

2 个答案:

答案 0 :(得分:2)

看起来库中存在限制。当精度降低得太低时,sin实现不再编译。

正在以double精度完成一些中间计算。分配到结果类型将是有损的,因此无法编译。

您选择的actually correspondscpp_bin_float_single的类型。那不编译。

一旦选择cpp_bin_float_double(精确53位二进制数字)或更高,您就可以了。

我认为这个限制在某些方面可能被视为一个错误。您可以将它报告给库开发人员,他们将能够判断相关代码是否可以在那里使用单精度浮点数而不会损害sin近似的收敛。

答案 1 :(得分:0)

#include <boost/multiprecision/cpp_bin_float.hpp>
#include <iostream>
using namespace std;
using namespace boost::multiprecision;
int main() {
    cpp_bin_float_100 a = 1;
    cout << setprecision(50) << endl;
    cout << sin(a) << endl;
    return 0;
}

我已经用Wolfram Mathematica验证了数字,它们是正确的:

enter image description here