Chris@49: // Copyright (C) 2008-2010 NICTA (www.nicta.com.au) Chris@49: // Copyright (C) 2008-2012 Conrad Sanderson Chris@49: // Chris@49: // This Source Code Form is subject to the terms of the Mozilla Public Chris@49: // License, v. 2.0. If a copy of the MPL was not distributed with this Chris@49: // file, You can obtain one at http://mozilla.org/MPL/2.0/. Chris@49: Chris@49: Chris@49: //! \addtogroup fn_trunc_log Chris@49: //! @{ Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: static Chris@49: typename arma_real_only::result Chris@49: trunc_log(const eT x) Chris@49: { Chris@49: if(std::numeric_limits::is_iec559) Chris@49: { Chris@49: if(x == std::numeric_limits::infinity()) Chris@49: { Chris@49: return Math::log_max(); Chris@49: } Chris@49: else Chris@49: { Chris@49: return (x <= eT(0)) ? Math::log_min() : std::log(x); Chris@49: } Chris@49: } Chris@49: else Chris@49: { Chris@49: return std::log(x); Chris@49: } Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: static Chris@49: typename arma_integral_only::result Chris@49: trunc_log(const eT x) Chris@49: { Chris@49: return eT( trunc_log( double(x) ) ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: static Chris@49: std::complex Chris@49: trunc_log(const std::complex& x) Chris@49: { Chris@49: return std::complex( trunc_log( std::abs(x) ), std::arg(x) ); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: arma_inline Chris@49: const eOp Chris@49: trunc_log(const Base& A) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: return eOp(A.get_ref()); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: arma_inline Chris@49: const eOpCube Chris@49: trunc_log(const BaseCube& A) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: return eOpCube(A.get_ref()); Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: //! @}