557 BOOST_CHECK_CLOSE(boost::math::expm1(-input_value), -boost::math::expm1(input_value)/static_cast<T>(std::exp(input_value)), 2*factor); |
557 BOOST_CHECK_CLOSE(boost::math::expm1(-input_value), -boost::math::expm1(input_value)/static_cast<T>(std::exp(input_value)), 2*factor); |
558 } |
558 } |
559 // |
559 // |
560 // C99 Appendix F special cases: |
560 // C99 Appendix F special cases: |
561 static const T zero = 0; |
561 static const T zero = 0; |
562 static const T m_one = -1; |
562 |
563 BOOST_CHECK_EQUAL(boost::math::log1p(zero), zero); |
563 BOOST_CHECK_EQUAL(boost::math::log1p(zero), zero); |
564 BOOST_CHECK_EQUAL(boost::math::log1p(-zero), zero); |
564 BOOST_CHECK_EQUAL(boost::math::log1p(-zero), zero); |
565 BOOST_CHECK_EQUAL(boost::math::expm1(zero), zero); |
565 BOOST_CHECK_EQUAL(boost::math::expm1(zero), zero); |
566 if(std::numeric_limits<T>::has_infinity) |
566 if(std::numeric_limits<T>::has_infinity) |
567 { |
567 { |
568 #ifndef __SYMBIAN32__ |
568 #ifndef __SYMBIAN32__ |
|
569 static const T m_one = -1; |
569 BOOST_CHECK_EQUAL(boost::math::log1p(m_one), -std::numeric_limits<T>::infinity()); |
570 BOOST_CHECK_EQUAL(boost::math::log1p(m_one), -std::numeric_limits<T>::infinity()); |
570 BOOST_CHECK_EQUAL(boost::math::expm1(-std::numeric_limits<T>::infinity()), m_one); |
571 BOOST_CHECK_EQUAL(boost::math::expm1(-std::numeric_limits<T>::infinity()), m_one); |
571 #endif |
572 #endif |
572 BOOST_CHECK_EQUAL(boost::math::expm1(std::numeric_limits<T>::infinity()), std::numeric_limits<T>::infinity()); |
573 BOOST_CHECK_EQUAL(boost::math::expm1(std::numeric_limits<T>::infinity()), std::numeric_limits<T>::infinity()); |
573 } |
574 } |