⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wmlpolynomialroots.cpp

📁 Wild Math Library数值计算库
💻 CPP
字号:
// Magic Software, Inc.
// http://www.magic-software.com
// http://www.wild-magic.com
// Copyright (c) 2004.  All Rights Reserved
//
// The Wild Magic Library (WML) source code is supplied under the terms of
// the license agreement http://www.magic-software.com/License/WildMagic.pdf
// and may not be copied or disclosed except in accordance with the terms of
// that agreement.

#include "WmlPolynomialRoots.h"
#include "WmlMath.h"
namespace Wml
{
#include "WmlPolynomialRootsDeg1.inl"
#include "WmlPolynomialRootsDeg2.inl"
#include "WmlPolynomialRootsDeg3.inl"
#include "WmlPolynomialRootsDeg4.inl"
#include "WmlPolynomialRootsDegN.inl"
}
using namespace Wml;

//----------------------------------------------------------------------------
template <class Real>
PolynomialRoots<Real>::PolynomialRoots (Real fEpsilon)
{
    assert( fEpsilon >= (Real)0.0 );
    m_fEpsilon = fEpsilon;
    m_iMaxIterations = 128;
    m_iCount = 0;
    m_iMaxRoot = 4;  // default support for degree <= 4
    m_afRoot = new Real[m_iMaxRoot];
}
//----------------------------------------------------------------------------
template <class Real>
PolynomialRoots<Real>::~PolynomialRoots ()
{
    delete[] m_afRoot;
}
//----------------------------------------------------------------------------
template <class Real>
int PolynomialRoots<Real>::GetCount () const
{
    return m_iCount;
}
//----------------------------------------------------------------------------
template <class Real>
const Real* PolynomialRoots<Real>::GetRoots () const
{
    return m_afRoot;
}
//----------------------------------------------------------------------------
template <class Real>
Real PolynomialRoots<Real>::GetRoot (int i) const
{
    assert( 0 <= i && i < m_iCount );
    if ( 0 <= i && i < m_iCount )
        return m_afRoot[i];

    return Math<Real>::MAX_REAL;
}
//----------------------------------------------------------------------------
template <class Real>
Real& PolynomialRoots<Real>::Epsilon ()
{
    return m_fEpsilon;
}
//----------------------------------------------------------------------------
template <class Real>
Real PolynomialRoots<Real>::Epsilon () const
{
    return m_fEpsilon;
}
//----------------------------------------------------------------------------
template <class Real>
int& PolynomialRoots<Real>::MaxIterations ()
{
    return m_iMaxIterations;
}
//----------------------------------------------------------------------------
template <class Real>
int PolynomialRoots<Real>::MaxIterations () const
{
    return m_iMaxIterations;
}
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
// explicit instantiation
//----------------------------------------------------------------------------
namespace Wml
{
#ifdef WML_INSTANTIATE_BEFORE
template<> const float PolynomialRoots<float>::THIRD = 1.0f/3.0f;
template<> const float PolynomialRoots<float>::TWENTYSEVENTH = 1.0f/27.0f;
template<> const float PolynomialRoots<float>::SQRT3 =
    Math<float>::Sqrt(3.0f);
template<> const float PolynomialRoots<float>::INVLOG2 =
    1.0f/Math<float>::Log(2.0f);
template<> const float PolynomialRoots<float>::LOG10 =
    Math<float>::Log(10.0f);
template class WML_ITEM PolynomialRoots<float>;

template<> const double PolynomialRoots<double>::THIRD = 1.0/3.0;
template<> const double PolynomialRoots<double>::TWENTYSEVENTH = 1.0/27.0;
template<> const double PolynomialRoots<double>::SQRT3 =
    Math<double>::Sqrt(3.0);
template<> const double PolynomialRoots<double>::INVLOG2 =
    1.0/Math<double>::Log(2.0);
template<> const double PolynomialRoots<double>::LOG10 =
    Math<double>::Log(10.0);
template class WML_ITEM PolynomialRoots<double>;

#else
template class WML_ITEM PolynomialRoots<float>;
template<> const float PolynomialRoots<float>::THIRD = 1.0f/3.0f;
template<> const float PolynomialRoots<float>::TWENTYSEVENTH = 1.0f/27.0f;
template<> const float PolynomialRoots<float>::SQRT3 =
    Math<float>::Sqrt(3.0f);
template<> const float PolynomialRoots<float>::INVLOG2 =
    1.0f/Math<float>::Log(2.0f);
template<> const float PolynomialRoots<float>::LOG10 =
    Math<float>::Log(10.0f);

template class WML_ITEM PolynomialRoots<double>;
template<> const double PolynomialRoots<double>::THIRD = 1.0/3.0;
template<> const double PolynomialRoots<double>::TWENTYSEVENTH = 1.0/27.0;
template<> const double PolynomialRoots<double>::SQRT3 =
    Math<double>::Sqrt(3.0);
template<> const double PolynomialRoots<double>::INVLOG2 =
    1.0/Math<double>::Log(2.0);
template<> const double PolynomialRoots<double>::LOG10 =
    Math<double>::Log(10.0);
#endif
}
//----------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -