OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [gcc-x64/] [or1knd-elf/] [or1knd-elf/] [include/] [c++/] [4.8.0/] [tr1/] [poly_hermite.tcc] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
// Special functions -*- C++ -*-
2
 
3
// Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
4
// Free Software Foundation, Inc.
5
//
6
// This file is part of the GNU ISO C++ Library.  This library is free
7
// software; you can redistribute it and/or modify it under the
8
// terms of the GNU General Public License as published by the
9
// Free Software Foundation; either version 3, or (at your option)
10
// any later version.
11
//
12
// This library is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
// GNU General Public License for more details.
16
//
17
// Under Section 7 of GPL version 3, you are granted additional
18
// permissions described in the GCC Runtime Library Exception, version
19
// 3.1, as published by the Free Software Foundation.
20
 
21
// You should have received a copy of the GNU General Public License and
22
// a copy of the GCC Runtime Library Exception along with this program;
23
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24
// .
25
 
26
/** @file tr1/poly_hermite.tcc
27
 *  This is an internal header file, included by other library headers.
28
 *  Do not attempt to use it directly. @headername{tr1/cmath}
29
 */
30
 
31
//
32
// ISO C++ 14882 TR1: 5.2  Special functions
33
//
34
 
35
// Written by Edward Smith-Rowland based on:
36
//   (1) Handbook of Mathematical Functions,
37
//       Ed. Milton Abramowitz and Irene A. Stegun,
38
//       Dover Publications, Section 22 pp. 773-802
39
 
40
#ifndef _GLIBCXX_TR1_POLY_HERMITE_TCC
41
#define _GLIBCXX_TR1_POLY_HERMITE_TCC 1
42
 
43
namespace std _GLIBCXX_VISIBILITY(default)
44
{
45
namespace tr1
46
{
47
  // [5.2] Special functions
48
 
49
  // Implementation-space details.
50
  namespace __detail
51
  {
52
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
53
 
54
    /**
55
     *   @brief This routine returns the Hermite polynomial
56
     *          of order n: \f$ H_n(x) \f$ by recursion on n.
57
     *
58
     *   The Hermite polynomial is defined by:
59
     *   @f[
60
     *     H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n} e^{-x^2}
61
     *   @f]
62
     *
63
     *   @param __n The order of the Hermite polynomial.
64
     *   @param __x The argument of the Hermite polynomial.
65
     *   @return The value of the Hermite polynomial of order n
66
     *           and argument x.
67
     */
68
    template
69
    _Tp
70
    __poly_hermite_recursion(const unsigned int __n, const _Tp __x)
71
    {
72
      //  Compute H_0.
73
      _Tp __H_0 = 1;
74
      if (__n == 0)
75
        return __H_0;
76
 
77
      //  Compute H_1.
78
      _Tp __H_1 = 2 * __x;
79
      if (__n == 1)
80
        return __H_1;
81
 
82
      //  Compute H_n.
83
      _Tp __H_n, __H_nm1, __H_nm2;
84
      unsigned int __i;
85
      for  (__H_nm2 = __H_0, __H_nm1 = __H_1, __i = 2; __i <= __n; ++__i)
86
        {
87
          __H_n = 2 * (__x * __H_nm1 - (__i - 1) * __H_nm2);
88
          __H_nm2 = __H_nm1;
89
          __H_nm1 = __H_n;
90
        }
91
 
92
      return __H_n;
93
    }
94
 
95
 
96
    /**
97
     *   @brief This routine returns the Hermite polynomial
98
     *          of order n: \f$ H_n(x) \f$.
99
     *
100
     *   The Hermite polynomial is defined by:
101
     *   @f[
102
     *     H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n} e^{-x^2}
103
     *   @f]
104
     *
105
     *   @param __n The order of the Hermite polynomial.
106
     *   @param __x The argument of the Hermite polynomial.
107
     *   @return The value of the Hermite polynomial of order n
108
     *           and argument x.
109
     */
110
    template
111
    inline _Tp
112
    __poly_hermite(const unsigned int __n, const _Tp __x)
113
    {
114
      if (__isnan(__x))
115
        return std::numeric_limits<_Tp>::quiet_NaN();
116
      else
117
        return __poly_hermite_recursion(__n, __x);
118
    }
119
 
120
  _GLIBCXX_END_NAMESPACE_VERSION
121
  } // namespace std::tr1::__detail
122
}
123
}
124
 
125
#endif // _GLIBCXX_TR1_POLY_HERMITE_TCC

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.