Интервал повышения C ++ и asinh

У меня есть вопрос, который связан с вопросом (и ответами), доступным здесь:
Интервал повышения C ++ и стоимость

Решение, представленное в связанном выше, работает для меня для большинства тригонометрических функций, включая гиперболический. Однако, если я попытаюсь использовать инверсии этого гиперболического раза один раз, давайте возьмем 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.

0

Решение

Там может быть ошибка, связанная с 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]
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector