考虑以下代码,该代码创建一个多精度浮点数' 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;
}
答案 0 :(得分:2)
看起来库中存在限制。当精度降低得太低时,sin
实现不再编译。
正在以double
精度完成一些中间计算。分配到结果类型将是有损的,因此无法编译。
您选择的actually corresponds到cpp_bin_float_single
的类型。那不编译。
一旦选择cpp_bin_float_double
(精确53位二进制数字)或更高,您就可以了。
我认为这个限制在某些方面可能被视为一个错误。您可以将它报告给库开发人员,他们将能够判断相关代码是否可以在那里使用单精度浮点数而不会损害sin
近似的收敛。
答案 1 :(得分:0)