gpt4 book ai didi

C++ boost 间隔和 asinh

转载 作者:行者123 更新时间:2023-11-28 04:54:16 25 4
gpt4 key购买 nike

我有一个问题与此处提供的问题(和答案)相关: C++ Boost Interval and cos

上面链接中提供的解决方案适用于大多数三角函数,包括一次双曲函数。但是,如果我尝试使用一次这个双曲线的反函数,让我们以 asinh() 为例,我会得到以下编译器错误:

error C2784: "boost::numeric::interval<T,Policies>
boost::numeric::asinh(const boost::numeric::interval<T,Policies> &)":
could not deduce template argument for "const
boost::numeric::interval<T,Policies> &" from "const double"

产生错误的代码是

#include "stdafx.h"
#include <boost/numeric/interval.hpp>
#include <boost/numeric/interval/rounded_arith.hpp>

using namespace std;
using namespace boost::numeric::interval_lib;
using namespace boost::numeric;

typedef interval<double, policies<save_state<rounded_transc_std<double> >,
checking_base<double> > > Interval;

int _tmain(int argc, _TCHAR* argv[])
{
Interval test = asinh(Interval(1, 1.1));

return 0;
}

我正在使用 boost 1_65_1 库。如何让双曲函数的反函数运行?

当然,一种解决方法是使用身份

Interval test = log(Interval(1, 1.1) + sqrt(pow(Interval(1, 1.1),2)+1.));

这工作得很好并且产生了正确的结果。但是,必须可以直接使用已实现的 asinh 函数。

最佳答案

可能存在与 MSVC 相关的错误,因为它适用于使用 GCC 或 clang 的我:

#include <boost/numeric/interval.hpp>
#include <boost/numeric/interval/io.hpp>
#include <boost/numeric/interval/rounded_arith.hpp>
#include <iostream>

namespace bn = boost::numeric;
namespace bni = bn::interval_lib;

typedef bn::interval<double, bni::policies<bni::save_state<bni::rounded_transc_std<double> >,
bni::checking_base<double> > > Interval;

int main()
{
Interval test = asinh(Interval(1, 1.1));
std::cout << test;
}

打印

[0.881374,0.950347]

关于C++ boost 间隔和 asinh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47529041/

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