gpt4 book ai didi

c++ - 使用来自 boost::multiprecision 的 cpp_bin_float float 学运算出错

转载 作者:太空狗 更新时间:2023-10-29 21:34:22 26 4
gpt4 key购买 nike

我尝试了以下方法:

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

using float256 = boost::multiprecision::number<boost::multiprecision::backends::cpp_bin_float<192,
boost::multiprecision::backends::digit_base_2, void, long long int>, boost::multiprecision::et_off>;

void Test()
{
double a = exp(-0.5);
double b = boost::multiprecision::exp(float256(-0.5)).convert_to<double>();
cout << a << endl << b << endl;
}

不幸的是,这不起作用。 a 得到 0.606531b 得到 1

我正在运行:boost 1.58、Linux、gcc 5.4.0。

知道我做错了什么吗?

最佳答案

这看起来像是 boost 中的错误。当指数模板参数是 64 位整数类型时,exp 的结果四舍五入为整数。当使用 int 代替 long long int 时,不会发生这种情况。

编辑:我已将错误追踪到 floorceil 函数的错误实现。两种情况下的违规行是:

if((arg.exponent() > (int)cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>::max_exponent) || (shift <= 0))
// --- <=== !!!!

include/boost/multiprecision/cpp_bin_float.hpp 中。

关于c++ - 使用来自 boost::multiprecision 的 cpp_bin_float float 学运算出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46798104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com