Big initial commit of the Polynomial and associated functions from TR1.

[SVN r3522]
This commit is contained in:
John Maddock 2006-12-12 17:25:29 +00:00
parent 892747d04e
commit c6f65d5ad3
63 changed files with 71099 additions and 129 deletions

View File

@ -17,14 +17,16 @@ boostbook standalone
<xsl:param>toc.max.depth=4
<xsl:param>generate.section.toc.level=10
# this is needed for FOP-0.9 and later:
<xsl:param>fop1.extensions=0
<xsl:param>fop1.extensions=1
# this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
<xsl:param>fop.extensions=1
<xsl:param>fop.extensions=0
<xsl:param>body.start.indent=0pt
<xsl:param>page.margin.inner=0.5in
<xsl:param>page.margin.outer=0.5in
<xsl:param>admon.graphics=1
<xsl:param>symbol.font.family=DejaVuSans,Symbol,ZapfDingbats
# set this one for PDF generation only:
#<xsl:param>admon.graphics.extension=".svg"
;
@ -43,5 +45,8 @@ boostbook standalone

124
doc/equations/hermite.xml Normal file
View File

@ -0,0 +1,124 @@
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<!-- MathML created with MathCast Equation Editor version 0.83 -->
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtext>hermite</mtext>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msub>
<mi>H</mi>
<mi>n</mi>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msup>
<mfenced>
<mrow>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mi>n</mi>
</msup>
<msup>
<mi>e</mi>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
</msup>
<mfrac>
<mrow>
<msup>
<mi>d</mi>
<mn>2</mn>
</msup>
</mrow>
<mrow>
<mi>d</mi>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
</mrow>
</mfrac>
<msup>
<mi>e</mi>
<mrow>
<mo>&minus;</mo>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
</mrow>
</msup>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>H</mi>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mn>2</mn>
<mi>x</mi>
<msub>
<mi>H</mi>
<mi>n</mi>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mo>&minus;</mo>
<mn>2</mn>
<mi>n</mi>
<msub>
<mi>H</mi>
<mrow>
<mi>n</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
</math>
</body>
</html>

BIN
doc/equations/hermite_0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 B

BIN
doc/equations/hermite_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 B

291
doc/equations/laguerre.xml Normal file
View File

@ -0,0 +1,291 @@
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<!-- MathML created with MathCast Equation Editor version 0.83 -->
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtext>laguerre</mtext>
<mfenced>
<mrow>
<mi>n</mi>
<mo>,</mo>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msub>
<mi>L</mi>
<mi>n</mi>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mfrac>
<mrow>
<msup>
<mi>e</mi>
<mi>x</mi>
</msup>
</mrow>
<mrow>
<mi>n</mi>
<mo>!</mo>
</mrow>
</mfrac>
<mfrac>
<mrow>
<msup>
<mi>d</mi>
<mi>n</mi>
</msup>
</mrow>
<mrow>
<mi>d</mi>
<msup>
<mi>x</mi>
<mi>n</mi>
</msup>
</mrow>
</mfrac>
<mfenced>
<mrow>
<msup>
<mi>x</mi>
<mi>n</mi>
</msup>
<msup>
<mi>e</mi>
<mrow>
<mo>&minus;</mo>
<mi>x</mi>
</mrow>
</msup>
</mrow>
</mfenced>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtext>laguerre</mtext>
<mfenced>
<mrow>
<mi>n</mi>
<mo>,</mo>
<mi>m</mi>
<mo>,</mo>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msubsup>
<mi>L</mi>
<mrow>
<mi>n</mi>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msup>
<mfenced>
<mrow>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mi>m</mi>
</msup>
<mfrac>
<mrow>
<msup>
<mi>d</mi>
<mi>m</mi>
</msup>
</mrow>
<mrow>
<mi>d</mi>
<msup>
<mi>x</mi>
<mi>m</mi>
</msup>
</mrow>
</mfrac>
<msub>
<mi>L</mi>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mi>m</mi>
</mrow>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>L</mi>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mfrac>
<mrow>
<mfenced>
<mrow>
<mn>2</mn>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
<mo>&minus;</mo>
<mi>x</mi>
</mrow>
</mfenced>
<msub>
<mi>L</mi>
<mi>n</mi>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mo>&minus;</mo>
<mi>n</mi>
<msub>
<mi>L</mi>
<mrow>
<mi>n</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
<mfenced>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfenced>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msubsup>
<mi>L</mi>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mfrac>
<mrow>
<mi>m</mi>
<mo>+</mo>
<mn>2</mn>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
<mo>&minus;</mo>
<mi>x</mi>
</mrow>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfrac>
<msubsup>
<mi>L</mi>
<mrow>
<mi>n</mi>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mo>&minus;</mo>
<mfrac>
<mrow>
<mi>m</mi>
<mo>+</mo>
<mi>n</mi>
</mrow>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfrac>
<msubsup>
<mi>L</mi>
<mrow>
<mi>n</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
</math>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 683 B

518
doc/equations/legendre.xml Normal file
View File

@ -0,0 +1,518 @@
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<!-- MathML created with MathCast Equation Editor version 0.83 -->
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtext>legendre_p</mtext>
<mfenced>
<mrow>
<mi>l</mi>
<mo>,</mo>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msub>
<mi>P</mi>
<mi>l</mi>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mfrac>
<mn>1</mn>
<mrow>
<msup>
<mn>2</mn>
<mi>l</mi>
</msup>
<mi>l</mi>
<mo>!</mo>
</mrow>
</mfrac>
<mfrac>
<mrow>
<msup>
<mi>d</mi>
<mi>l</mi>
</msup>
</mrow>
<mrow>
<mi>d</mi>
<msup>
<mi>x</mi>
<mi>l</mi>
</msup>
</mrow>
</mfrac>
<msup>
<mfenced>
<mrow>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mi>l</mi>
</msup>
<mspace width="1em"/>
<mo>;</mo>
<mspace width="1em"/>
<mo>|</mo>
<mi>x</mi>
<mo>|</mo>
<mo>&le;</mo>
<mn>1</mn>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtext>legendre_p</mtext>
<mfenced>
<mrow>
<mi>l</mi>
<mo>,</mo>
<mi>m</mi>
<mo>,</mo>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msubsup>
<mi>P</mi>
<mrow>
<mi>l</mi>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msup>
<mfenced>
<mrow>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mi>m</mi>
</msup>
<msup>
<mfenced>
<mrow>
<mn>1</mn>
<mo>&minus;</mo>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
</mrow>
</mfenced>
<mrow>
<mfrac>
<mi>m</mi>
<mn>2</mn>
</mfrac>
</mrow>
</msup>
<mfrac>
<mrow>
<msup>
<mi>d</mi>
<mi>m</mi>
</msup>
<msub>
<mi>P</mi>
<mi>l</mi>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
<mrow>
<mi>d</mi>
<msup>
<mi>x</mi>
<mi>m</mi>
</msup>
</mrow>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtable>
<mtr>
<mtd>
<mtext>legendre_q</mtext>
<mfenced>
<mrow>
<mn>0,</mn>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msub>
<mi>Q</mi>
<mn>0</mn>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mfrac>
<mn>1</mn>
<mn>2</mn>
</mfrac>
<mi>ln</mi>
<mfenced>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
<mo>&minus;</mo>
<mi>x</mi>
</mrow>
</mfrac>
</mrow>
</mfenced>
</mtd>
</mtr>
<mtr>
<mtd>
<mtext>legendre_q</mtext>
<mfenced>
<mrow>
<mn>1,</mn>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msub>
<mi>Q</mi>
<mn>1</mn>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mfrac>
<mi>x</mi>
<mn>2</mn>
</mfrac>
<mi>ln</mi>
<mfenced>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
<mo>&minus;</mo>
<mi>x</mi>
</mrow>
</mfrac>
</mrow>
</mfenced>
<mo>&minus;</mo>
<mn>1</mn>
</mtd>
</mtr>
</mtable>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mtable>
<mtr>
<mtd>
<msubsup>
<mi>P</mi>
<mrow>
<mi>l</mi>
</mrow>
<mrow>
<mo>&minus;</mo>
<mi>m</mi>
</mrow>
</msubsup>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msup>
<mfenced>
<mrow>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mi>m</mi>
</msup>
<mfrac>
<mrow>
<mfenced>
<mrow>
<mi>l</mi>
<mo>&minus;</mo>
<mi>m</mi>
</mrow>
</mfenced>
<mo>!</mo>
</mrow>
<mrow>
<mfenced>
<mrow>
<mi>l</mi>
<mo>+</mo>
<mi>m</mi>
</mrow>
</mfenced>
<mo>!</mo>
</mrow>
</mfrac>
<msubsup>
<mi>P</mi>
<mrow>
<mi>l</mi>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mtd>
</mtr>
<mtr>
<mtd>
<msubsup>
<mi>P</mi>
<mrow>
<mo>&minus;</mo>
<mi>l</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msubsup>
<mi>P</mi>
<mrow>
<mi>l</mi>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mtd>
</mtr>
</mtable>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mi>P</mi>
<mrow>
<mi>l</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mfrac>
<mrow>
<mfenced>
<mrow>
<mn>2</mn>
<mi>l</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mi>x</mi>
<msub>
<mi>P</mi>
<mi>l</mi>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mo>&minus;</mo>
<mi>l</mi>
<msub>
<mi>P</mi>
<mrow>
<mi>l</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
</msub>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
<mfenced>
<mrow>
<mi>l</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfenced>
</mfrac>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msubsup>
<mi>P</mi>
<mrow>
<mi>l</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<mfrac>
<mrow>
<mfenced>
<mrow>
<mn>2</mn>
<mi>l</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfenced>
<mi>x</mi>
<msubsup>
<mi>P</mi>
<mrow>
<mi>l</mi>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
<mo>&minus;</mo>
<mfenced>
<mrow>
<mi>l</mi>
<mo>+</mo>
<mi>m</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfenced>
<msubsup>
<mi>P</mi>
<mrow>
<mi>l</mi>
<mo>&minus;</mo>
<mn>1</mn>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>x</mi>
</mrow>
</mfenced>
</mrow>
<mfenced>
<mrow>
<mi>l</mi>
<mo>&minus;</mo>
<mi>m</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfenced>
</mfrac>
</mrow>
</math>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 830 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 854 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

259
doc/equations/spherical.xml Normal file
View File

@ -0,0 +1,259 @@
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<!-- MathML created with MathCast Equation Editor version 0.83 -->
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msubsup>
<mi>Y</mi>
<mrow>
<mi>n</mi>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>&theta;</mi>
<mo>,</mo>
<mi>&phi;</mi>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msqrt>
<mrow>
<mfrac>
<mrow>
<mn>2</mn>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
<mrow>
<mn>4</mn>
<mi>&pi;</mi>
</mrow>
</mfrac>
<mfrac>
<mrow>
<mfenced>
<mrow>
<mi>n</mi>
<mo>&minus;</mo>
<mi>m</mi>
</mrow>
</mfenced>
<mo>!</mo>
</mrow>
<mrow>
<mfenced>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mi>m</mi>
</mrow>
</mfenced>
<mo>!</mo>
</mrow>
</mfrac>
</mrow>
</msqrt>
<msubsup>
<mi>P</mi>
<mrow>
<mi>n</mi>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>cos</mi>
<mi>&theta;</mi>
</mrow>
</mfenced>
<msup>
<mi>e</mi>
<mrow>
<mi>&ImaginaryI;</mi>
<mi>m</mi>
<mi>&phi;</mi>
</mrow>
</msup>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>Re</mi>
<mfenced>
<mrow>
<msubsup>
<mi>Y</mi>
<mrow>
<mi>n</mi>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>&theta;</mi>
<mo>,</mo>
<mi>&phi;</mi>
</mrow>
</mfenced>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msqrt>
<mrow>
<mfrac>
<mrow>
<mn>2</mn>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
<mrow>
<mn>4</mn>
<mi>&pi;</mi>
</mrow>
</mfrac>
<mfrac>
<mrow>
<mfenced>
<mrow>
<mi>n</mi>
<mo>&minus;</mo>
<mi>m</mi>
</mrow>
</mfenced>
<mo>!</mo>
</mrow>
<mrow>
<mfenced>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mi>m</mi>
</mrow>
</mfenced>
<mo>!</mo>
</mrow>
</mfrac>
</mrow>
</msqrt>
<msubsup>
<mi>P</mi>
<mrow>
<mi>n</mi>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>cos</mi>
<mi>&theta;</mi>
</mrow>
</mfenced>
<mi>cos</mi>
<mfenced>
<mrow>
<mi>m</mi>
<mi>&phi;</mi>
</mrow>
</mfenced>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>Im</mi>
<mfenced>
<mrow>
<msubsup>
<mi>Y</mi>
<mrow>
<mi>n</mi>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>&theta;</mi>
<mo>,</mo>
<mi>&phi;</mi>
</mrow>
</mfenced>
</mrow>
</mfenced>
<mspace width="1em"/>
<mo>=</mo>
<mspace width="1em"/>
<msqrt>
<mrow>
<mfrac>
<mrow>
<mn>2</mn>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
<mrow>
<mn>4</mn>
<mi>&pi;</mi>
</mrow>
</mfrac>
<mfrac>
<mrow>
<mfenced>
<mrow>
<mi>n</mi>
<mo>&minus;</mo>
<mi>m</mi>
</mrow>
</mfenced>
<mo>!</mo>
</mrow>
<mrow>
<mfenced>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mi>m</mi>
</mrow>
</mfenced>
<mo>!</mo>
</mrow>
</mfrac>
</mrow>
</msqrt>
<msubsup>
<mi>P</mi>
<mrow>
<mi>n</mi>
</mrow>
<mi>m</mi>
</msubsup>
<mfenced>
<mrow>
<mi>cos</mi>
<mi>&theta;</mi>
</mrow>
</mfenced>
<mi>sin</mi>
<mfenced>
<mrow>
<mi>m</mi>
<mi>&phi;</mi>
</mrow>
</mfenced>
</mrow>
</math>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 874 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 974 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 975 B

BIN
doc/graphs/hermite.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

17509
doc/graphs/hermite.ps Normal file

File diff suppressed because it is too large Load Diff

2145
doc/graphs/hermite.rgd Normal file

File diff suppressed because it is too large Load Diff

BIN
doc/graphs/laguerre.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

7844
doc/graphs/laguerre.ps Normal file

File diff suppressed because it is too large Load Diff

1745
doc/graphs/laguerre.rgd Normal file

File diff suppressed because it is too large Load Diff

BIN
doc/graphs/legendre_p1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

14927
doc/graphs/legendre_p1.ps Normal file

File diff suppressed because it is too large Load Diff

1752
doc/graphs/legendre_p1.rgd Normal file

File diff suppressed because it is too large Load Diff

BIN
doc/graphs/legendre_q.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

14727
doc/graphs/legendre_q.ps Normal file

File diff suppressed because it is too large Load Diff

1745
doc/graphs/legendre_q.rgd Normal file

File diff suppressed because it is too large Load Diff

106
doc/hermite.qbk Normal file
View File

@ -0,0 +1,106 @@
[section:hermite Hermite Polynomials]
[caution __caution ]
[h4 Synopsis]
``
#include <boost/math/special_functions/hermite.hpp>
``
namespace boost{ namespace math{
template <class T>
T hermite(unsigned n, T x);
template <class T>
T hermite_next(unsigned n, T x, T Hn, T Hnm1);
}} // namespaces
[h4 Description]
template <class T>
T hermite(unsigned n, T x);
Returns the value of the Hermite Polynomial of order /n/ at point /x/:
[$../equations/hermite_0.png]
The following graph illustrates the behaviour of the first few
Hermite Polynomials:
[$../graphs/hermite.png]
template <class T>
T hermite_next(unsigned n, T x, T Hn, T Hnm1);
Implements the three term recurrence relation for the Hermite
polynomials, this function can be used to create a sequence of
values evaluated at the same /x/, and for rising /n/.
[$../equations/hermite_1.png]
For example we could produce a vector of the first 10 polynomial
values using:
double x = 0.5; // Abscissa value
vector<double> v;
v.push_back(hermite(0, x)).push_back(hermite(1, x));
for(unsigned l = 1; l < 10; ++l)
v.push_back(hermite_next(l, x, v[l], v[l-1]));
Formally the arguments are:
[variablelist
[[n][The degree /n/ of the last polynomial calculated.]]
[[x][The abscissa value]]
[[Hn][The value of the polynomial evaluated at degree /n/.]]
[[Hnm1][The value of the polynomial evaluated at degree /n-1/.]]
]
[h4 Accuracy]
The following table shows peak errors for various domains of input arguments.
Note that only results for the widest floating point type on the system are
given as narrower types have __zero_error.
[table Peak Errors In the Hermite Polynomial
[[Significand Size] [Platform and Compiler] [Errors in range\n0 < l < 20] ]
[[53] [Win32, Visual C++ 8] [Peak=4.5 Mean=1.5] ]
[[64] [Red Hat Linux IA32, g++ 4.1] [Peak=6 Mean=2]]
[[64] [Red Hat Linux IA64, g++ 3.4.4] [Peak=6 Mean=2] ]
[[113] [HPUX IA64, aCC A.06.06] [Peak=6 Mean=4]]
]
Note that the worst errors occur when the degree increases, values greater than
~120 are very unlikely to produce sensible results, especially in the associated
polynomial case when the order is also large. Further the relative errors
are likely to grow arbitrarily large when the function is very close to a root.
No comparisons to other libraries are shown here: there appears to be only one
viable implementation method for these functions, the comparisons to other
libraries that have been run show identical error rates to those given here.
[h4 Testing]
A mixture of spot tests of values calculated using functions.wolfram.com,
and randomly generated test data are
used: the test data was computed using
[@http://shoup.net/ntl/doc/RR.txt NTL::RR] at 1000-bit precision.
[h4 Implementation]
These functions are implemented using the stable three term
recurrence relations. These relations guarentee low absolute error
but cannot guarentee low relative error near one of the roots of the
polynomials.
[endsect][/section:beta_function The Beta Function]
[/
Copyright 2006 John Maddock and Paul A. Bristow.
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt).
]

158
doc/laguerre.qbk Normal file
View File

@ -0,0 +1,158 @@
[section:laguerre Laguerre (and Associated) Polynomials]
[caution __caution ]
[h4 Synopsis]
``
#include <boost/math/special_functions/laguerre.hpp>
``
namespace boost{ namespace math{
template <class T>
T laguerre(unsigned n, T x);
template <class T>
T laguerre(unsigned n, unsigned m, T x);
template <class T>
T laguerre_next(unsigned n, T x, T Ln, T Lnm1);
template <class T>
T laguerre_next(unsigned n, unsigned m, T x, T Ln, T Lnm1);
}} // namespaces
[h4 Description]
template <class T>
T laguerre(unsigned n, T x);
Returns the value of the Laguerre Polynomial of order /n/ at point /x/:
[$../equations/laguerre_0.png]
The following graph illustrates the behaviour of the first few
Laguerre Polynomials:
[$../graphs/laguerre.png]
template <class T>
T laguerre(unsigned n, unsigned m, T x);
Returns the Associated Laguerre polynomial of degree /n/
and order /m/ at point /x/:
[$../equations/laguerre_1.png]
template <class T>
T laguerre_next(unsigned n, T x, T Ln, T Lnm1);
Implements the three term recurrence relation for the Laguerre
polynomials, this function can be used to create a sequence of
values evaluated at the same /x/, and for rising /n/.
[$../equations/laguerre_2.png]
For example we could produce a vector of the first 10 polynomial
values using:
double x = 0.5; // Abscissa value
vector<double> v;
v.push_back(laguerre(0, x)).push_back(laguerre(1, x));
for(unsigned l = 1; l < 10; ++l)
v.push_back(laguerre_next(l, x, v[l], v[l-1]));
Formally the arguments are:
[variablelist
[[n][The degree /n/ of the last polynomial calculated.]]
[[x][The abscissa value]]
[[Ln][The value of the polynomial evaluated at degree /n/.]]
[[Lnm1][The value of the polynomial evaluated at degree /n-1/.]]
]
template <class T>
T laguerre_next(unsigned n, unsigned m, T x, T Ln, T Lnm1);
Implements the three term recurrence relation for the Associated Laguerre
polynomials, this function can be used to create a sequence of
values evaluated at the same /x/, and for rising degree /n/.
[$../equations/laguerre_3.png]
For example we could produce a vector of the first 10 polynomial
values using:
double x = 0.5; // Abscissa value
int m = 10; // order
vector<double> v;
v.push_back(laguerre(0, m, x)).push_back(laguerre(1, m, x));
for(unsigned l = 1; l < 10; ++l)
v.push_back(laguerre_next(l, m, x, v[l], v[l-1]));
Formally the arguments are:
[variablelist
[[n][The degree of the last polynomial calculated.]]
[[m][The order of the Associated Polynomial.]]
[[x][The abscissa value.]]
[[Ln][The value of the polynomial evaluated at degree /n/.]]
[[Lnm1][The value of the polynomial evaluated at degree /n-1/.]]
]
[h4 Accuracy]
The following table shows peak errors for various domains of input arguments.
Note that only results for the widest floating point type on the system are
given as narrower types have __zero_error.
[table Peak Errors In the Laguerre Polynomial
[[Significand Size] [Platform and Compiler] [Errors in range\n0 < l < 20] ]
[[53] [Win32, Visual C++ 8] [Peak=3000 Mean=185] ]
[[64] [SUSE Linux IA32, g++ 4.1] [Peak=1x10[super 4] Mean=828]]
[[64] [Red Hat Linux IA64, g++ 3.4.4] [Peak=1x10[super 4] Mean=828] ]
[[113] [HPUX IA64, aCC A.06.06] [Peak=680 Mean=40]]
]
[table Peak Errors In the Associated Laguerre Polynomial
[[Significand Size] [Platform and Compiler] [Errors in range\n0 < l < 20] ]
[[53] [Win32, Visual C++ 8] [Peak=433 Mean=11]]
[[64] [SUSE Linux IA32, g++ 4.1] [Peak=61.4 Mean=19.5]]
[[64] [Red Hat Linux IA64, g++ 3.4.4] [Peak=61.4 Mean=19.5] ]
[[113] [HPUX IA64, aCC A.06.06] [Peak=540 Mean=13.94] ]
]
Note that the worst errors occur when the degree increases, values greater than
~120 are very unlikely to produce sensible results, especially in the associated
polynomial case when the order is also large. Further the relative errors
are likely to grow arbitrarily large when the function is very close to a root.
No comparisons to other libraries are shown here: there appears to be only one
viable implementation method for these functions, the comparisons to other
libraries that have been run show identical error rates to those given here.
[h4 Testing]
A mixture of spot tests of values calculated using functions.wolfram.com,
and randomly generated test data are
used: the test data was computed using
[@http://shoup.net/ntl/doc/RR.txt NTL::RR] at 1000-bit precision.
[h4 Implementation]
These functions are implemented using the stable three term
recurrence relations. These relations guarentee low absolute error
but cannot guarentee low relative error near one of the roots of the
polynomials.
[endsect][/section:beta_function The Beta Function]
[/
Copyright 2006 John Maddock and Paul A. Bristow.
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt).
]

215
doc/legendre.qbk Normal file
View File

@ -0,0 +1,215 @@
[section:legendre Legendre (and Associated) Polynomials]
[caution __caution ]
[h4 Synopsis]
``
#include <boost/math/special_functions/legendre.hpp>
``
namespace boost{ namespace math{
template <class T>
T legendre_p(int n, T x);
template <class T>
T legendre_p(int n, int m, T x);
template <class T>
T legendre_q(int n, T x);
template <class T>
T legendre_next(unsigned l, T x, T Pl, T Plm1);
template <class T>
T legendre_next(unsigned l, unsigned m, T x, T Pl, T Plm1);
}} // namespaces
[h4 Description]
template <class T>
T legendre_p(int l, T x);
Returns the Legendre Polynomial of the first kind:
[$../equations/legendre_0.png]
Requires -1 <= x <= 1, otherwise returns the result of __domain_error.
Negative orders are handled via the reflection formula:
P[sub -l-1](x) = P[sub l](x)
The following graph illustrates the behaviour of the first few
Legendre Polynomials:
[$../graphs/legendre_p1.png]
template <class T>
T legendre_p(int l, int m, T x);
Returns the associated Legendre polynomial of the first kind:
[$../equations/legendre_1.png]
Requires -1 <= x <= 1, otherwise returns the result of __domain_error.
Negative values of /l/ and /m/ are handled via the identity relations:
[$../equations/legendre_3.png]
[caution The definition of the associated Legendre polynomial used here
includes a leading Condon-Shortley phase term of (-1)[super m]. This
matches the definition given by Abramowitz and Stegun (8.6.6) and that
used by [@http://mathworld.wolfram.com/LegendrePolynomial.html Mathworld]
and [@http://documents.wolfram.com/mathematica/functions/LegendreP
Mathematica's LegendreP function]. However, uses in the literature
do not always include this phase term, and strangely the specification
for the associated Legendre function in the C++ TR1 (assoc_legendre)
also omits it, in spite of stating that it uses Abramowitz and Stegun
as the final arbiter on these matters.\n\n
See: \n\n[@http://mathworld.wolfram.com/LegendrePolynomial.html
Weisstein, Eric W. "Legendre Polynomial."
From MathWorld--A Wolfram Web Resource].\n\n
Abramowitz, M. and Stegun, I. A. (Eds.). "Legendre Functions" and
"Orthogonal Polynomials." Ch. 22 in Chs. 8 and 22 in Handbook of
Mathematical Functions with Formulas, Graphs, and Mathematical Tables,
9th printing. New York: Dover, pp. 331-339 and 771-802, 1972.
]
template <class T>
T legendre_q(int n, T x);
Returns the value of the Legendre polynomial that is the second solution
to the Legendre differential equation, for example:
[$../equations/legendre_2.png]
Requires -1 <= x <= 1, otherwise __domain_error is called.
The following graph illustrates the first few Legendre functions of the
second kind:
[$../graphs/legendre_q.png]
template <class T>
T legendre_next(unsigned l, T x, T Pl, T Plm1);
Implements the three term recurrence relation for the Legendre
polynomials, this function can be used to create a sequence of
values evaluated at the same /x/, and for rising /l/. This recurrence
relation holds for Legendre Polynomials of both the first and second kinds.
[$../equations/legendre_4.png]
For example we could produce a vector of the first 10 polynomial
values using:
double x = 0.5; // Abscissa value
vector<double> v;
v.push_back(legendre_p(0, x)).push_back(legendre_p(1, x));
for(unsigned l = 1; l < 10; ++l)
v.push_back(legendre_next(l, x, v[l], v[l-1]));
Formally the arguments are:
[variablelist
[[l][The degree of the last polynomial calculated.]]
[[x][The abscissa value]]
[[Pl][The value of the polynomial evaluated at degree /l/.]]
[[Plm1][The value of the polynomial evaluated at degree /l-1/.]]
]
template <class T>
T legendre_next(unsigned l, unsigned m, T x, T Pl, T Plm1);
Implements the three term recurrence relation for the Associated Legendre
polynomials, this function can be used to create a sequence of
values evaluated at the same /x/, and for rising /l/.
[$../equations/legendre_5.png]
For example we could produce a vector of the first m+10 polynomial
values using:
double x = 0.5; // Abscissa value
int m = 10; // order
vector<double> v;
v.push_back(legendre_p(m, m, x)).push_back(legendre_p(1 + m, m, x));
for(unsigned l = 1 + m; l < m + 10; ++l)
v.push_back(legendre_next(l, m, x, v[l], v[l-1]));
Formally the arguments are:
[variablelist
[[l][The degree of the last polynomial calculated.]]
[[m][The order of the Associated Polynomial.]]
[[x][The abscissa value]]
[[Pl][The value of the polynomial evaluated at degree /l/.]]
[[Plm1][The value of the polynomial evaluated at degree /l-1/.]]
]
[h4 Accuracy]
The following table shows peak errors for various domains of input arguments.
Note that only results for the widest floating point type on the system are
given as narrower types have __zero_error.
[table Peak Errors In the Legendre P Function
[[Significand Size] [Platform and Compiler] [Errors in range\n0 < l < 20] [Errors in range\n20 < l < 120]]
[[53] [Win32, Visual C++ 8] [Peak=211 Mean=20] [Peak=300 Mean=33]]
[[64] [SUSE Linux IA32, g++ 4.1] [Peak=70 Mean=10] [Peak=700 Mean=60]]
[[64] [Red Hat Linux IA64, g++ 3.4.4] [Peak=70 Mean=10] [Peak=700 Mean=60]]
[[113] [HPUX IA64, aCC A.06.06] [Peak=35 Mean=6] [Peak=292 Mean=41]]
]
[table Peak Errors In the Associated Legendre P Function
[[Significand Size] [Platform and Compiler] [Errors in range\n0 < l < 20] ]
[[53] [Win32, Visual C++ 8] [Peak=1200 Mean=7]]
[[64] [SUSE Linux IA32, g++ 4.1] [Peak=80 Mean=5]]
[[64] [Red Hat Linux IA64, g++ 3.4.4] [Peak=80 Mean=5] ]
[[113] [HPUX IA64, aCC A.06.06] [Peak=42 Mean=4] ]
]
[table Peak Errors In the Legendre Q Function
[[Significand Size] [Platform and Compiler] [Errors in range\n0 < l < 20] [Errors in range\n20 < l < 120]]
[[53] [Win32, Visual C++ 8] [Peak=50 Mean=7] [Peak=4600 Mean=370]]
[[64] [SUSE Linux IA32, g++ 4.1] [Peak=51 Mean=8] [Peak=6000 Mean=480]]
[[64] [Red Hat Linux IA64, g++ 3.4.4] [Peak=51 Mean=8] [Peak=6000 Mean=480]]
[[113] [HPUX IA64, aCC A.06.06] [Peak=90 Mean=10] [Peak=1700 Mean=140]]
]
Note that the worst errors occur when the order increases, values greater than
~120 are very unlikely to produce sensible results, especially in the associated
polynomial case when the degree is also large. Further the relative errors
are likely to grow arbitrarily large when the function is very close to a root.
No comparisons to other libraries are shown here: there appears to be only one
viable implementation method for these functions, the comparisons to other
libraries that have been run show identical error rates to those given here.
[h4 Testing]
A mixture of spot tests of values calculated using functions.wolfram.com,
and randomly generated test data are
used: the test data was computed using
[@http://shoup.net/ntl/doc/RR.txt NTL::RR] at 1000-bit precision.
[h4 Implementation]
These functions are implemented using the stable three term
recurrence relations. These relations guarentee low absolute error
but cannot guarentee low relative error near one of the roots of the
polynomials.
[endsect][/section:beta_function The Beta Function]
[/
Copyright 2006 John Maddock and Paul A. Bristow.
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt).
]

View File

@ -233,6 +233,10 @@ external graphing application.
[include ibeta.qbk]
[include ibeta_inv.qbk]
[include beta_gamma_derivatives.qbk]
[include legendre.qbk]
[include laguerre.qbk]
[include hermite.qbk]
[include spherical_harmonic.qbk]
[include fpclassify.qbk]
[include powers.qbk]
[include error_handling.qbk]

View File

@ -32,7 +32,7 @@ Statistical Distributions (Wiley Series in Probability & Statistics) (Paperback)
by N.A.J. Hastings, Brian Peacock, Merran Evans, ISBN: 0471371246, Wiley 2000.
[@http://bh0.physics.ubc.ca/People/matt/Doc/ThesesOthers/Phd/pugh.pdf pugh.pdf (application/pdf Object)]
Pugh Msc Thesis Lanczzos gamma function.
Pugh Msc Thesis on the Lanczzos approximation to the gamma function.
[@www.open-std.org/jtc1/sc22/wg21/docs/papers/2003 N1514, 03-0097, A Proposal to Add Mathematical Special Functions to the C++ Standard Library (version 2), Walter E. Brown]

121
doc/spherical_harmonic.qbk Normal file
View File

@ -0,0 +1,121 @@
[section:sph_harm Spherical Harmonics]
[caution __caution ]
[h4 Synopsis]
``
#include <boost/math/special_functions/spheric_harmonic.hpp>
``
namespace boost{ namespace math{
template <class T>
std::complex<T> spherical_harmonic(unsigned n, int m, T theta, T phi);
template <class T>
T spherical_harmonic_r(unsigned n, int m, T theta, T phi);
template <class T>
T spherical_harmonic_i(unsigned n, int m, T theta, T phi);
}} // namespaces
[h4 Description]
template <class T>
std::complex<T> spherical_harmonic(unsigned n, int m, T theta, T phi);
Returns the value of the Spherical Harmonic Y[sub n][super m](theta, phi):
[$../equations/spherical_0.png]
The spherical harmonics Y[sub n][super m](theta, phi) are the angular
portion of the solution to Laplace's equation in spherical coordinates
where azimuthal symmetry is not present.
[caution Care must be taken in correctly identifying the arguments to this
function: [theta][space] is taken as the polar (colatitudinal) coordinate
with [theta][space] in \[0, [pi]\], and [phi][space] as the azimuthal (longitudinal)
coordinate with [phi][space] in \[0,2[pi]). This is the convention used in Physics,
and matches the definition used by
[@http://documents.wolfram.com/mathematica/functions/SphericalHarmonicY
Mathematica in the function SpericalHarmonicY],
but is opposite to the usual mathematical conventions.\n\n
Some other sources include an additional Condon-Shortley phase term of
(-1)[super m] in the definition of this function: note however that our
definition of the associated Legendre polynomial already includes this term.\n\n
This implementation returns zero for m > n\n\n
For [theta][space] outside \[0, [pi]\] and [phi][space] outside \[0, 2[pi]\] this
implementation follows the convention used by Mathematica:
the function is periodic with period [pi][space] in [theta][space] and 2[pi][space] in
[phi]. Please note that this is not the behaviour one would get
from a casual application of the function's definition. Cautious users
should keep [theta][space] and [phi][space] to the range \[0, [pi]\] and
\[0, 2[pi]\] respectively.\n\n
See: [@http://mathworld.wolfram.com/SphericalHarmonic.html
Weisstein, Eric W. "Spherical Harmonic."
From MathWorld--A Wolfram Web Resource]. ]
template <class T>
T spherical_harmonic_r(unsigned n, int m, T theta, T phi);
Returns the real part of Y[sub n][super m](theta, phi):
[$../equations/spherical_1.png]
template <class T>
T spherical_harmonic_i(unsigned n, int m, T theta, T phi);
Returns the imaginary part of Y[sub n][super m](theta, phi):
[$../equations/spherical_2.png]
[h4 Accuracy]
The following table shows peak errors for various domains of input arguments.
Note that only results for the widest floating point type on the system are
given as narrower types have __zero_error. Peak errors are the same
for both the real and imaginary parts, as the error is dominated by
calculation of the associated Legendre polynomials: especially near the
roots of the associated Legendre function.
[table Peak Errors In the Sperical Harmonic Functions
[[Significand Size] [Platform and Compiler] [Errors in range\n0 < l < 20] ]
[[53] [Win32, Visual C++ 8] [Peak=2x10[super 4] Mean=700] ]
[[64] [SUSE Linux IA32, g++ 4.1] [Peak=2900 Mean=100]]
[[64] [Red Hat Linux IA64, g++ 3.4.4] [Peak=2900 Mean=100] ]
[[113] [HPUX IA64, aCC A.06.06] [Peak=6700 Mean=230]]
]
Note that the worst errors occur when the degree increases, values greater than
~120 are very unlikely to produce sensible results, especially in the associated
polynomial case when the order is also large. Further the relative errors
are likely to grow arbitrarily large when the function is very close to a root.
[h4 Testing]
A mixture of spot tests of values calculated using functions.wolfram.com,
and randomly generated test data are
used: the test data was computed using
[@http://shoup.net/ntl/doc/RR.txt NTL::RR] at 1000-bit precision.
[h4 Implementation]
These functions are implemented fairly naively using the formulae
given above. Some extra care is taken to prevent roundoff error
when converting from polar coordinates (so for example the
['1-x[super 2]] term used by the associated Legendre functions is calculated
without roundoff error using ['x = cos(theta)], and
['1-x[super 2] = sin[super 2](theta)]). The limiting factor in the error
rates for these functions is the need to calculate values near the roots
of the associated Legendre functions.
[endsect][/section:beta_function The Beta Function]
[/
Copyright 2006 John Maddock and Paul A. Bristow.
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt).
]

View File

@ -7,130 +7,130 @@
[/ To use, enclose the template name in square brackets.]
\n
[fnof]
[Alpha]
[Beta]
[Gamma]
[Delta]
[Epsilon]
[Zeta]
[Eta]
[Theta]
[Iota]
[Kappa]
[Lambda]
[Mu]
[Nu]
[Xi]
[Omicron]
[Pi]
[Rho]
[Sigma]
[Tau]
[Upsilon]
[Phi]
[Chi]
[Psi]
[Omega]
[alpha]
[beta]
[gamma]
[delta]
[epsilon]
[zeta]
[eta]
[theta]
[iota]
[kappa]
[lambda]
[mu]
[nu]
[xi]
[omicron]
[pi]
[rho]
[sigmaf]
[sigma]
[tau]
[upsilon]
[phi]
[chi]
[psi]
[omega]
[thetasym]
[upsih]
[piv]
[bull]
[hellip]
[prime]
[Prime]
[oline]
[frasl]
[weierp]
[image]
[real]
[trade]
[alefsym]
[larr]
[uarr]
[rarr]
[darr]
[harr]
[crarr]
[lArr]
[uArr]
[rArr]
[dArr]
[hArr]
[forall]
[part]
[exist]
[empty]
[nabla]
[isin]
[notin]
[ni]
[prod]
[sum]
[minus]
[lowast]
[radic]
[prop]
[infin]
[ang]
[and]
[or]
[cap]
[cup]
[int]
[there4]
[sim]
[cong]
[asymp]
[ne]
[equiv]
[le]
[ge]
[subset]
[superset]
[nsubset]
[sube]
[supe]
[oplus]
[otimes]
[perp]
[sdot]
[lceil]
[rceil]
[lfloor]
[rfloor]
[lang]
[rang]
[loz]
[spades]
[clubs]
[hearts]
[diams]
[fnof],
[Alpha],
[Beta],
[Gamma],
[Delta],
[Epsilon],
[Zeta],
[Eta],
[Theta],
[Iota],
[Kappa],
[Lambda],
[Mu],
[Nu],
[Xi],
[Omicron],
[Pi],
[Rho],
[Sigma],
[Tau],
[Upsilon],
[Phi],
[Chi],
[Psi],
[Omega],
[alpha],
[beta],
[gamma],
[delta],
[epsilon],
[zeta],
[eta],
[theta],
[iota],
[kappa],
[lambda],
[mu],
[nu],
[xi],
[omicron],
[pi],
[rho],
[sigmaf],
[sigma],
[tau],
[upsilon],
[phi],
[chi],
[psi],
[omega],
[thetasym],
[upsih],
[piv],
[bull],
[hellip],
[prime],
[Prime],
[oline],
[frasl],
[weierp],
[image],
[real],
[trade],
[alefsym],
[larr],
[uarr],
[rarr],
[darr],
[harr],
[crarr],
[lArr],
[uArr],
[rArr],
[dArr],
[hArr],
[forall],
[part],
[exist],
[empty],
[nabla],
[isin],
[notin],
[ni],
[prod],
[sum],
[minus],
[lowast],
[radic],
[prop],
[infin],
[ang],
[and],
[or],
[cap],
[cup],
[int],
[there4],
[sim],
[cong],
[asymp],
[ne],
[equiv],
[le],
[ge],
[subset],
[superset],
[nsubset],
[sube],
[supe],
[oplus],
[otimes],
[perp],
[sdot],
[lceil],
[rceil],
[lfloor],
[rfloor],
[lang],
[rang],
[loz],
[spades],
[clubs],
[hearts],
[diams],
\n
\n
[endsect]
@ -142,3 +142,4 @@
http://www.boost.org/LICENSE_1_0.txt).
]

View File

@ -0,0 +1,60 @@
// (C) Copyright John Maddock 2006.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_MATH_SPECIAL_HERMITE_HPP
#define BOOST_MATH_SPECIAL_HERMITE_HPP
#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/tools/config.hpp>
#include <boost/math/tools/evaluation_type.hpp>
namespace boost{
namespace math{
// Recurrance relation for Hermite polynomials:
template <class T>
inline T hermite_next(unsigned n, T x, T Hn, T Hnm1)
{
return (2 * x * Hn - 2 * n * Hnm1);
}
namespace detail{
// Implement Hermite polynomials via recurrance:
template <class T>
T hermite_imp(unsigned n, T x)
{
T p0 = 1;
T p1 = 2 * x;
if(n == 0)
return p0;
unsigned c = 1;
while(c < n)
{
std::swap(p0, p1);
p1 = hermite_next(c, x, p0, p1);
++c;
}
return p1;
}
} // namespace detail
template <class T>
inline T hermite(unsigned n, T x)
{
typedef typename tools::evaluation<typename remove_cv<T>::type>::type value_type;
return tools::checked_narrowing_cast<typename remove_cv<T>::type>(detail::hermite_imp(n, static_cast<value_type>(x)), BOOST_CURRENT_FUNCTION);
}
} // namespace math
} // namespace boost
#endif // BOOST_MATH_SPECIAL_HERMITE_HPP

View File

@ -0,0 +1,103 @@
// (C) Copyright John Maddock 2006.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_MATH_SPECIAL_LAGUERRE_HPP
#define BOOST_MATH_SPECIAL_LAGUERRE_HPP
#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/tools/config.hpp>
#include <boost/math/tools/evaluation_type.hpp>
namespace boost{
namespace math{
// Recurrance relation for Laguerre polynomials:
template <class T>
inline T laguerre_next(unsigned n, T x, T Ln, T Lnm1)
{
return ((2 * n + 1 - x) * Ln - n * Lnm1) / (n + 1);
}
namespace detail{
// Implement Laguerre polynomials via recurrance:
template <class T>
T laguerre_imp(unsigned n, T x)
{
T p0 = 1;
T p1 = 1 - x;
if(n == 0)
return p0;
unsigned c = 1;
while(c < n)
{
std::swap(p0, p1);
p1 = laguerre_next(c, x, p0, p1);
++c;
}
return p1;
}
} // namespace detail
template <class T>
inline T laguerre(unsigned n, T x)
{
typedef typename tools::evaluation<typename remove_cv<T>::type>::type value_type;
return tools::checked_narrowing_cast<typename remove_cv<T>::type>(detail::laguerre_imp(n, static_cast<value_type>(x)), BOOST_CURRENT_FUNCTION);
}
// Recurrence for associated polynomials:
template <class T>
inline T laguerre_next(unsigned n, unsigned l, T x, T Pl, T Plm1)
{
return ((2 * n + l + 1 - x) * Pl - (n + l) * Plm1) / (n+1);
}
namespace detail{
// Laguerre Associated Polynomial:
template <class T>
T laguerre_imp(unsigned n, unsigned m, T x)
{
// Special cases:
if(m == 0)
return laguerre(n, x);
T p0 = 1;
if(n == 0)
return p0;
T p1 = m + 1 - x;
unsigned c = 1;
while(c < n)
{
std::swap(p0, p1);
p1 = laguerre_next(c, m, x, p0, p1);
++c;
}
return p1;
}
}
template <class T>
inline T laguerre(unsigned n, unsigned m, T x)
{
typedef typename tools::evaluation<typename remove_cv<T>::type>::type value_type;
return tools::checked_narrowing_cast<typename remove_cv<T>::type>(detail::laguerre_imp(n, m, static_cast<value_type>(x)), BOOST_CURRENT_FUNCTION);
}
} // namespace math
} // namespace boost
#endif // BOOST_MATH_SPECIAL_LAGUERRE_HPP

View File

@ -0,0 +1,155 @@
// (C) Copyright John Maddock 2006.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_MATH_SPECIAL_LEGENDRE_HPP
#define BOOST_MATH_SPECIAL_LEGENDRE_HPP
#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/special_functions/factorials.hpp>
#include <boost/math/tools/config.hpp>
namespace boost{
namespace math{
// Recurrance relation for legendre P and Q polynomials:
template <class T>
inline T legendre_next(unsigned l, T x, T Pl, T Plm1)
{
return ((2 * l + 1) * x * Pl - l * Plm1) / (l + 1);
}
namespace detail{
// Implement Legendre P and Q polynomials via recurrance:
template <class T>
T legendre_imp(unsigned l, T x, bool second = false)
{
// Error handling:
if((x < -1) || (x > 1))
return tools::domain_error<T>(
BOOST_CURRENT_FUNCTION,
"The Legendre Polynomial is defined for"
" -1 <= x <= 1, but got x = %1%.", x);
T p0, p1;
if(second)
{
// A solution of the second kind (Q):
p0 = (boost::math::log1p(x) - boost::math::log1p(-x)) / 2;
p1 = x * p0 - 1;
}
else
{
// A solution of the first kind (P):
p0 = 1;
p1 = x;
}
if(l == 0)
return p0;
unsigned n = 1;
while(n < l)
{
std::swap(p0, p1);
p1 = legendre_next(n, x, p0, p1);
++n;
}
return p1;
}
} // namespace detail
template <class T>
inline T legendre_p(int l, T x)
{
typedef typename tools::evaluation<typename remove_cv<T>::type>::type value_type;
if(l < 0)
return tools::checked_narrowing_cast<typename remove_cv<T>::type>(detail::legendre_imp(-l-1, static_cast<value_type>(x), false), BOOST_CURRENT_FUNCTION);
return tools::checked_narrowing_cast<typename remove_cv<T>::type>(detail::legendre_imp(l, static_cast<value_type>(x), false), BOOST_CURRENT_FUNCTION);
}
template <class T>
inline T legendre_q(unsigned l, T x)
{
typedef typename tools::evaluation<typename remove_cv<T>::type>::type value_type;
return tools::checked_narrowing_cast<typename remove_cv<T>::type>(detail::legendre_imp(l, static_cast<value_type>(x), true), BOOST_CURRENT_FUNCTION);
}
// Recurrence for associated polynomials:
template <class T>
inline T legendre_next(unsigned l, unsigned m, T x, T Pl, T Plm1)
{
return ((2 * l + 1) * x * Pl - (l + m) * Plm1) / (l + 1 - m);
}
namespace detail{
// Legendre P associated polynomial:
template <class T>
T legendre_p_imp(int l, int m, T x, T sin_theta_power)
{
// Error handling:
if((x < -1) || (x > 1))
return tools::domain_error<T>(
BOOST_CURRENT_FUNCTION,
"The associated Legendre Polynomial is defined for"
" -1 <= x <= 1, but got x = %1%.", x);
// Handle negative arguments first:
if(l < 0)
return legendre_p_imp(-l-1, m, x, sin_theta_power);
if(m < 0)
{
int sign = (m&1) ? -1 : 1;
return sign * tgamma_ratio(static_cast<T>(l+m+1), static_cast<T>(l+1-m)) * legendre_p_imp(l, -m, x, sin_theta_power);
}
// Special cases:
if(m > l)
return 0;
if(m == 0)
return legendre_p(l, x);
T p0 = boost::math::double_factorial<T>(2 * m - 1) * sin_theta_power;
if(m&1)
p0 *= -1;
if(m == l)
return p0;
T p1 = x * (2 * m + 1) * p0;
int n = m + 1;
while(n < l)
{
std::swap(p0, p1);
p1 = legendre_next(n, m, x, p0, p1);
++n;
}
return p1;
}
template <class T>
inline T legendre_p_imp(int l, int m, T x)
{
using namespace std;
// TODO: we really could use that mythical "pow1p" function here:
return legendre_p_imp(l, m, x, pow(1 - x*x, T(abs(m))/2));
}
}
template <class T>
inline T legendre_p(int l, int m, T x)
{
typedef typename tools::evaluation<typename remove_cv<T>::type>::type value_type;
return tools::checked_narrowing_cast<typename remove_cv<T>::type>(detail::legendre_p_imp(l, m, static_cast<value_type>(x)), BOOST_CURRENT_FUNCTION);
}
} // namespace math
} // namespace boost
#endif // BOOST_MATH_SPECIAL_LEGENDRE_HPP

View File

@ -0,0 +1,169 @@
// (C) Copyright John Maddock 2006.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_MATH_SPECIAL_SPHERICAL_HARMONIC_HPP
#define BOOST_MATH_SPECIAL_SPHERICAL_HARMONIC_HPP
#include <boost/math/special_functions/legendre.hpp>
#include <complex>
namespace boost{
namespace math{
namespace detail{
//
// Calculates the prefix term that's common to the real
// and imaginary parts. Does *not* fix up the sign of the result
// though.
//
template <class T>
T spherical_harmonic_prefix(unsigned n, unsigned m, T theta, T phi)
{
using namespace std;
if(m > n)
return 0;
T sin_theta = sin(theta);
T x = cos(theta);
T leg = detail::legendre_p_imp(n, m, x, pow(fabs(sin_theta), T(m)));
T prefix = tgamma_delta_ratio(static_cast<T>(n - m + 1), static_cast<T>(2 * m));
prefix *= (2 * n + 1) / (4 * constants::pi<T>());
prefix = sqrt(prefix);
return prefix * leg;
}
//
// Real Part:
//
template <class T>
T spherical_harmonic_r(unsigned n, int m, T theta, T phi)
{
using namespace std; // ADL of std functions
bool sign = false;
if(m < 0)
{
// Reflect and adjust sign if m < 0:
sign = m&1;
m = abs(m);
}
if(m&1)
{
// Check phase if theta is outside [0, PI]:
T mod = fmod(theta, 2 * constants::pi<T>());
if(mod < 0)
mod += 2 * constants::pi<T>();
if(mod > constants::pi<T>())
sign = !sign;
}
// Get the value and adjust sign as required:
T prefix = spherical_harmonic_prefix(n, m, theta, phi);
prefix *= cos(m * phi);
return sign ? -prefix : prefix;
}
template <class T>
T spherical_harmonic_i(unsigned n, int m, T theta, T phi)
{
using namespace std; // ADL of std functions
bool sign = false;
if(m < 0)
{
// Reflect and adjust sign if m < 0:
sign = !(m&1);
m = abs(m);
}
if(m&1)
{
// Check phase if theta is outside [0, PI]:
T mod = fmod(theta, 2 * constants::pi<T>());
if(mod < 0)
mod += 2 * constants::pi<T>();
if(mod > constants::pi<T>())
sign = !sign;
}
// Get the value and adjust sign as required:
T prefix = spherical_harmonic_prefix(n, m, theta, phi);
prefix *= sin(m * phi);
return sign ? -prefix : prefix;
}
template <class T, class U>
std::complex<T> spherical_harmonic(unsigned n, int m, U theta, U phi)
{
using namespace std;
//
// Sort out the signs:
//
bool r_sign = false;
bool i_sign = false;
if(m < 0)
{
// Reflect and adjust sign if m < 0:
r_sign = m&1;
i_sign = !(m&1);
m = abs(m);
}
if(m&1)
{
// Check phase if theta is outside [0, PI]:
U mod = fmod(theta, 2 * constants::pi<U>());
if(mod < 0)
mod += 2 * constants::pi<U>();
if(mod > constants::pi<U>())
{
r_sign = !r_sign;
i_sign = !i_sign;
}
}
//
// Calculate the value:
//
U prefix = spherical_harmonic_prefix(n, m, theta, phi);
U r = prefix * cos(m * phi);
U i = prefix * sin(m * phi);
//
// Add in the signs:
//
if(r_sign)
r = -r;
if(i_sign)
i = -i;
return std::complex<T>(tools::checked_narrowing_cast<T>(r, BOOST_CURRENT_FUNCTION), tools::checked_narrowing_cast<T>(i, BOOST_CURRENT_FUNCTION));
}
} // namespace detail
template <class T>
inline std::complex<T> spherical_harmonic(unsigned n, int m, T theta, T phi)
{
typedef typename tools::evaluation<typename remove_cv<T>::type>::type value_type;
return detail::spherical_harmonic<T, value_type>(n, m, static_cast<value_type>(theta), static_cast<value_type>(phi));
}
template <class T>
inline T spherical_harmonic_r(unsigned n, int m, T theta, T phi)
{
typedef typename tools::evaluation<typename remove_cv<T>::type>::type value_type;
return tools::checked_narrowing_cast<typename remove_cv<T>::type>(detail::spherical_harmonic_r(n, m, static_cast<value_type>(theta), static_cast<value_type>(phi)), BOOST_CURRENT_FUNCTION);
}
template <class T>
inline T spherical_harmonic_i(unsigned n, int m, T theta, T phi)
{
typedef typename tools::evaluation<typename remove_cv<T>::type>::type value_type;
return tools::checked_narrowing_cast<typename remove_cv<T>::type>(detail::spherical_harmonic_i(n, m, static_cast<value_type>(theta), static_cast<value_type>(phi)), BOOST_CURRENT_FUNCTION);
}
} // namespace math
} // namespace boost
#endif // BOOST_MATH_SPECIAL_SPHERICAL_HARMONIC_HPP

View File

@ -298,6 +298,14 @@ namespace NTL{
boost::math::tools::digits<NTL::RR>());
}
inline NTL::RR fmod(NTL::RR x, NTL::RR y)
{
// This is a really crummy version of fmod, we rely on lots
// of digits to get us out of trouble...
NTL::RR factor = floor(x/y);
return x - factor * y;
}
} // namespace NTL

View File

@ -32,24 +32,29 @@ run test_factorials.cpp ;
run test_fisher_f.cpp ;
run test_gamma.cpp ;
run test_gamma_dist.cpp ;
run test_hermite.cpp ;
run test_ibeta.cpp ;
run test_ibeta_inv.cpp ;
run test_ibeta_inv_ab.cpp ;
run test_igamma.cpp ;
run test_igamma_inv.cpp ;
run test_igamma_inva.cpp ;
run test_laguerre.cpp ;
run test_legendre.cpp ;
run test_lognormal.cpp ;
run test_minima.cpp ;
run test_negative_binomial.cpp ;
run test_normal.cpp ;
run test_poisson.cpp ;
run test_promotion.cpp ;
run test_rationals.cpp ;
run test_remez.cpp ;
run test_roots.cpp ;
run test_spherical_harmonic.cpp ;
run test_students_t.cpp ;
run test_tgamma_ratio.cpp ;
run test_triangular.cpp ;
run test_toms748_solve.cpp ;
run test_uniform.cpp ;
run test_weibull.cpp ;
compile distribution_concept_check.cpp ;
@ -65,3 +70,5 @@ compile std_real_concept_check.cpp ;

405
test/assoc_legendre_p.ipp Normal file
View File

@ -0,0 +1,405 @@
#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
static const boost::array<boost::array<T, 4>, 400> assoc_legendre_p = {
SC_(3.755727291107177734375), SC_(-3), SC_(0.264718532562255859375), SC_(0.018682285998021253444483874168352748715136623066073),
SC_(3.755727291107177734375), SC_(-3), SC_(0.67001712322235107421875), SC_(0.0085227010576716344744906184676725516467064196759033),
SC_(3.755727291107177734375), SC_(-3), SC_(0.91501367092132568359375), SC_(0.0013678553914178941694232605088191864494205442141689),
SC_(3.755727291107177734375), SC_(-3), SC_(0.93538987636566162109375), SC_(0.00092121779437596438014780141399846622556782069609554),
SC_(3.755727291107177734375), SC_(-2), SC_(-0.804919183254241943359375), SC_(-0.035427019537072229468317544697039851719910785732282),
SC_(3.755727291107177734375), SC_(-2), SC_(-0.62323606014251708984375), SC_(-0.047644590452413896385001513687947050090798484234256),
SC_(3.755727291107177734375), SC_(-2), SC_(0.62944734096527099609375), SC_(0.047507226872528274797147731134568104938153965122183),
SC_(3.755727291107177734375), SC_(-2), SC_(0.92977702617645263671875), SC_(0.015749804707019642230489140711548190498803023729124),
SC_(3.755727291107177734375), SC_(-2), SC_(0.98576259613037109375), SC_(0.0034836978383022116191949923980075709550874307751656),
SC_(3.755727291107177734375), SC_(-1), SC_(0.09376299381256103515625), SC_(-0.11897883801786023759113449248494493928619190467444),
SC_(3.755727291107177734375), SC_(0), SC_(-0.72904598712921142578125), SC_(0.12483445078630286253952851342405305778981983166886),
SC_(3.755727291107177734375), SC_(0), SC_(0.0944411754608154296875), SC_(-0.13955592906053357908142302859499928047171124489978),
SC_(3.755727291107177734375), SC_(0), SC_(0.826751708984375), SC_(0.1726224256643575927228084765374660491943359375),
SC_(3.755727291107177734375), SC_(0), SC_(0.99292266368865966796875), SC_(0.95791076106518834501582130387317692843396343960194),
SC_(3.755727291107177734375), SC_(1), SC_(-0.5579319000244140625), SC_(-0.69267329476836900305232758748436796165065650726706),
SC_(3.755727291107177734375), SC_(1), SC_(-0.38366591930389404296875), SC_(0.36569809882896106974883774476288881583212189972924),
SC_(3.755727291107177734375), SC_(2), SC_(-0.74602639675140380859375), SC_(-4.9623208282269009166469230084559050020232007227605),
SC_(3.755727291107177734375), SC_(2), SC_(-0.44300353527069091796875), SC_(-5.340947203111010720410977109344485835862315070699),
SC_(3.755727291107177734375), SC_(2), SC_(0.81158387660980224609375), SC_(4.1552884837362426955817673026802316904593226354336),
SC_(3.755727291107177734375), SC_(2), SC_(0.93773555755615234375), SC_(1.6970953962729668417983019956807311245938763022423),
SC_(4.285762786865234375), SC_(-4), SC_(0.0944411754608154296875), SC_(0.0025579199993109637443137263005669146428545187165902),
SC_(4.285762786865234375), SC_(-4), SC_(0.67001712322235107421875), SC_(0.00079084875024561627663099583678188315474519799498067),
SC_(4.285762786865234375), SC_(-3), SC_(-0.74602639675140380859375), SC_(-0.0045895703969571628891682136050294568676142831603226),
SC_(4.285762786865234375), SC_(-2), SC_(-0.62323606014251708984375), SC_(0.021901614369568242657323933337327101674854041794065),
SC_(4.285762786865234375), SC_(-2), SC_(0.62944734096527099609375), SC_(0.022308096300309799048219090710479861660073888191704),
SC_(4.285762786865234375), SC_(-2), SC_(0.93538987636566162109375), SC_(0.013350407227053037260147784930747976172856146131701),
SC_(4.285762786865234375), SC_(-1), SC_(0.91501367092132568359375), SC_(0.13200123550282267507521242420636682233158093275439),
SC_(4.285762786865234375), SC_(-1), SC_(0.98576259613037109375), SC_(0.07877427388685735435597041845896354141179322010808),
SC_(4.285762786865234375), SC_(0), SC_(-0.38366591930389404296875), SC_(-0.082202061657178565574671344721658600769778582062621),
SC_(4.285762786865234375), SC_(1), SC_(0.09376299381256103515625), SC_(0.68576243868873072515243076289551241703397054367008),
SC_(4.285762786865234375), SC_(1), SC_(0.264718532562255859375), SC_(1.6015108598580622790613880161520031562290080195803),
SC_(4.285762786865234375), SC_(1), SC_(0.826751708984375), SC_(-2.075091388628511047552411495370343087881224878243),
SC_(4.285762786865234375), SC_(1), SC_(0.92977702617645263671875), SC_(-2.6110232658679238686101145865940662146504977908866),
SC_(4.285762786865234375), SC_(1), SC_(0.99292266368865966796875), SC_(-1.1501152124516827856720730990547167000673318754544),
SC_(4.285762786865234375), SC_(3), SC_(-0.804919183254241943359375), SC_(17.658347776050435476592152301745513462355419797644),
SC_(4.285762786865234375), SC_(3), SC_(-0.72904598712921142578125), SC_(24.546943351788936569134344357322020563417724549234),
SC_(4.285762786865234375), SC_(3), SC_(-0.5579319000244140625), SC_(33.483200432942805434592337100676821594014587089232),
SC_(4.285762786865234375), SC_(4), SC_(-0.44300353527069091796875), SC_(67.831116663749312786686560206270714301013197988912),
SC_(4.285762786865234375), SC_(4), SC_(0.81158387660980224609375), SC_(12.23326322639646526677027003435192961976317891902),
SC_(4.285762786865234375), SC_(4), SC_(0.93773555755615234375), SC_(1.5284756464094009019523190775027909687425881068989),
SC_(4.43858623504638671875), SC_(-4), SC_(0.09376299381256103515625), SC_(0.0025585788865558103020054987182935328386974024573462),
SC_(4.43858623504638671875), SC_(-4), SC_(0.81158387660980224609375), SC_(0.00030340434589276947586235788775674428620444392160269),
SC_(4.43858623504638671875), SC_(-4), SC_(0.826751708984375), SC_(0.00026083492327811402025075290800337768359895562753081),
SC_(4.43858623504638671875), SC_(-4), SC_(0.92977702617645263671875), SC_(0.47823512832424889615550406883421003863012687163716e-4),
SC_(4.43858623504638671875), SC_(-3), SC_(-0.804919183254241943359375), SC_(-0.0035036404317560387850381254566955383853879801185802),
SC_(4.43858623504638671875), SC_(-3), SC_(-0.72904598712921142578125), SC_(-0.0048704252682120905891139572137543691594082786804035),
SC_(4.43858623504638671875), SC_(-3), SC_(-0.62323606014251708984375), SC_(-0.0062099464278749790063643151908339184429802189273533),
SC_(4.43858623504638671875), SC_(-3), SC_(0.93538987636566162109375), SC_(0.00086169779878718081099879281321850193219169946462828),
SC_(4.43858623504638671875), SC_(-2), SC_(-0.5579319000244140625), SC_(0.016916718454958990171262790356133102641009169353481),
SC_(4.43858623504638671875), SC_(-2), SC_(-0.44300353527069091796875), SC_(0.0062585992120013346073049856968548291009012658140108),
SC_(4.43858623504638671875), SC_(-2), SC_(0.91501367092132568359375), SC_(0.016480979075286992096829450389735978618066029926915),
SC_(4.43858623504638671875), SC_(-1), SC_(0.62944734096527099609375), SC_(-0.013852284088400384102197697049644481796357180917995),
SC_(4.43858623504638671875), SC_(0), SC_(-0.38366591930389404296875), SC_(-0.082202061657178565574671344721658600769778582062621),
SC_(4.43858623504638671875), SC_(0), SC_(0.0944411754608154296875), SC_(0.3419012769545217228869883142677928817338726938716),
SC_(4.43858623504638671875), SC_(0), SC_(0.67001712322235107421875), SC_(-0.42675937253158873957266351661277594541380955593248),
SC_(4.43858623504638671875), SC_(1), SC_(-0.74602639675140380859375), SC_(1.1126727867403958433914301847632907446425470781145),
SC_(4.43858623504638671875), SC_(1), SC_(0.93773555755615234375), SC_(-2.5694907092758592654019226620729417580286717814693),
SC_(4.43858623504638671875), SC_(2), SC_(0.264718532562255859375), SC_(-3.5532540894315570371583179746027713002035183960381),
SC_(4.43858623504638671875), SC_(2), SC_(0.99292266368865966796875), SC_(0.62426196438718111041026481024591411942721351148618),
SC_(4.43858623504638671875), SC_(4), SC_(0.98576259613037109375), SC_(0.083927746199061397527375080044175506771911288161903),
SC_(5.390875339508056640625), SC_(-5), SC_(0.0944411754608154296875), SC_(0.0002546487231919752178607492517299512129462633725364),
SC_(5.390875339508056640625), SC_(-5), SC_(0.264718532562255859375), SC_(0.00021716384956208715694799696662224323122616129459559),
SC_(5.390875339508056640625), SC_(-5), SC_(0.67001712322235107421875), SC_(0.58708312450036459613075249881849855560840725857318e-4),
SC_(5.390875339508056640625), SC_(-5), SC_(0.91501367092132568359375), SC_(0.27827305046113328781834314319875323548924440626817e-5),
SC_(5.390875339508056640625), SC_(-3), SC_(0.92977702617645263671875), SC_(0.00088084918348099199582932467310763476850348538284308),
SC_(5.390875339508056640625), SC_(-2), SC_(0.62944734096527099609375), SC_(0.0044802133341411818740038475673044511324305084281699),
SC_(5.390875339508056640625), SC_(-2), SC_(0.826751708984375), SC_(0.017179972428025654957727173029455910568258358850358),
SC_(5.390875339508056640625), SC_(-2), SC_(0.93773555755615234375), SC_(0.011582986702578200018657376926081178305253584288072),
SC_(5.390875339508056640625), SC_(-1), SC_(-0.804919183254241943359375), SC_(0.027614447937383812923403611365941023696827330290191),
SC_(5.390875339508056640625), SC_(-1), SC_(-0.74602639675140380859375), SC_(-0.011942526133146833219086796223309547055717483576189),
SC_(5.390875339508056640625), SC_(-1), SC_(-0.44300353527069091796875), SC_(-0.052598650339880048670991840817375710928478745804392),
SC_(5.390875339508056640625), SC_(-1), SC_(0.81158387660980224609375), SC_(0.032475028650926011657602131247192442876513897830463),
SC_(5.390875339508056640625), SC_(-1), SC_(0.98576259613037109375), SC_(0.075928872430285790876424723398166177311286253675933),
SC_(5.390875339508056640625), SC_(1), SC_(-0.5579319000244140625), SC_(2.0588360348849268576901634118752070496134490686058),
SC_(5.390875339508056640625), SC_(1), SC_(-0.38366591930389404296875), SC_(1.0488997903645254423314161051388628455007799361763),
SC_(5.390875339508056640625), SC_(1), SC_(0.99292266368865966796875), SC_(-1.694428428045302980695459253870012855657911579182),
SC_(5.390875339508056640625), SC_(3), SC_(0.09376299381256103515625), SC_(47.709869098409296824126378544766494005231382182091),
SC_(5.390875339508056640625), SC_(5), SC_(-0.72904598712921142578125), SC_(-141.96691257606284385923672899667345613424951478332),
SC_(5.390875339508056640625), SC_(5), SC_(-0.62323606014251708984375), SC_(-276.41355575741464167724815651046032240942755898478),
SC_(5.390875339508056640625), SC_(5), SC_(0.93538987636566162109375), SC_(-5.2252178435591148637339332297779102344828532461685),
SC_(5.9786128997802734375), SC_(-5), SC_(-0.72904598712921142578125), SC_(0.39122275291022609088193543043615921553750417433674e-4),
SC_(5.9786128997802734375), SC_(-5), SC_(-0.38366591930389404296875), SC_(0.00017489900689655423627775194820998979395800601640731),
SC_(5.9786128997802734375), SC_(-5), SC_(0.93538987636566162109375), SC_(0.14399299612982569620078078785763641519187756961443e-5),
SC_(5.9786128997802734375), SC_(-4), SC_(-0.62323606014251708984375), SC_(-0.00060704847503506154620171592993567892964928692547447),
SC_(5.9786128997802734375), SC_(-4), SC_(0.264718532562255859375), SC_(0.00059613981311034434030663336977459595577939813266618),
SC_(5.9786128997802734375), SC_(-3), SC_(0.62944734096527099609375), SC_(0.0031349671707415505384457022694976904859365129000026),
SC_(5.9786128997802734375), SC_(-3), SC_(0.67001712322235107421875), SC_(0.0032389529371683531093138459783060646462307543487447),
SC_(5.9786128997802734375), SC_(-2), SC_(0.91501367092132568359375), SC_(0.014070467978894087845837622000095287182388864142753),
SC_(5.9786128997802734375), SC_(-2), SC_(0.99292266368865966796875), SC_(0.0017135580072319634875733505499327690870804859765117),
SC_(5.9786128997802734375), SC_(-1), SC_(-0.74602639675140380859375), SC_(-0.011942526133146833219086796223309547055717483576189),
SC_(5.9786128997802734375), SC_(-1), SC_(0.93773555755615234375), SC_(0.10697160990790480346676465130193776610937898528547),
SC_(5.9786128997802734375), SC_(0), SC_(-0.5579319000244140625), SC_(0.047804048918209109846499488120279081448233535491368),
SC_(5.9786128997802734375), SC_(0), SC_(-0.44300353527069091796875), SC_(-0.20426834340719068505951661242682923196540890996203),
SC_(5.9786128997802734375), SC_(0), SC_(0.98576259613037109375), SC_(0.79688047965898906667942422168075865228912496237335),
SC_(5.9786128997802734375), SC_(2), SC_(-0.804919183254241943359375), SC_(-14.041412871300637007325237563186908954938502617465),
SC_(5.9786128997802734375), SC_(3), SC_(0.09376299381256103515625), SC_(47.709869098409296824126378544766494005231382182091),
SC_(5.9786128997802734375), SC_(3), SC_(0.0944411754608154296875), SC_(47.641150834624152676066344832804794889226504703822),
SC_(5.9786128997802734375), SC_(3), SC_(0.826751708984375), SC_(-48.15370209637736090987750799064280741291078069631),
SC_(5.9786128997802734375), SC_(4), SC_(0.92977702617645263671875), SC_(16.135533061554449755055362055976172128279602633683),
SC_(5.9786128997802734375), SC_(5), SC_(0.81158387660980224609375), SC_(-64.324006256133565068416408251533490438742435471623),
SC_(7.0129680633544921875), SC_(-6), SC_(-0.44300353527069091796875), SC_(-0.49917660497843442012283615070189075267419679644049e-5),
SC_(7.0129680633544921875), SC_(-6), SC_(0.62944734096527099609375), SC_(0.3006891273213370799141727869232359504461493153624e-5),
SC_(7.0129680633544921875), SC_(-6), SC_(0.81158387660980224609375), SC_(0.70040699133541810527562096226330143819869790187691e-6),
SC_(7.0129680633544921875), SC_(-6), SC_(0.98576259613037109375), SC_(0.48343073413896634965208304544121619980890063725753e-9),
SC_(7.0129680633544921875), SC_(-3), SC_(0.67001712322235107421875), SC_(0.000233323277056834438037424623276038206336990557194),
SC_(7.0129680633544921875), SC_(-2), SC_(-0.804919183254241943359375), SC_(-0.0027739031343697825991513090446807124968690478954398),
SC_(7.0129680633544921875), SC_(-1), SC_(-0.38366591930389404296875), SC_(0.039786558334548825835304799167391994654559424625062),
SC_(7.0129680633544921875), SC_(-1), SC_(0.92977702617645263671875), SC_(0.054454932483310305073733979576928070746123404332102),
SC_(7.0129680633544921875), SC_(0), SC_(0.0944411754608154296875), SC_(-0.19033023284194947443250862014615331274337558869229),
SC_(7.0129680633544921875), SC_(0), SC_(0.264718532562255859375), SC_(-0.26772197626528608005754891383945733780088489487847),
SC_(7.0129680633544921875), SC_(2), SC_(-0.72904598712921142578125), SC_(8.2527975846199234989599916055568828159236433321317),
SC_(7.0129680633544921875), SC_(3), SC_(-0.74602639675140380859375), SC_(-122.8095242453750885154728218467647225016581694455),
SC_(7.0129680633544921875), SC_(3), SC_(0.826751708984375), SC_(-173.13613361264811344425400070610320025380148250632),
SC_(7.0129680633544921875), SC_(3), SC_(0.93773555755615234375), SC_(-91.646151026938230226355468598656579455999111879645),
SC_(7.0129680633544921875), SC_(4), SC_(-0.62323606014251708984375), SC_(-827.70592695642797610122284647665024797997991160461),
SC_(7.0129680633544921875), SC_(5), SC_(0.09376299381256103515625), SC_(4502.9678134547254406291563962805504284132872177258),
SC_(7.0129680633544921875), SC_(5), SC_(0.93538987636566162109375), SC_(-298.14688995091627351489747457308624963260602452294),
SC_(7.0129680633544921875), SC_(5), SC_(0.99292266368865966796875), SC_(-1.4510728508951063559765139003152953353215769586589),
SC_(7.0129680633544921875), SC_(6), SC_(-0.5579319000244140625), SC_(-24629.862077522287552037887727378221479137335921999),
SC_(7.0129680633544921875), SC_(7), SC_(0.91501367092132568359375), SC_(-235.01261148836072843323648254407718400683198946966),
SC_(7.5470066070556640625), SC_(-7), SC_(0.92977702617645263671875), SC_(0.14200764177428564541660357501288113217936324682596e-8),
SC_(7.5470066070556640625), SC_(-6), SC_(0.99292266368865966796875), SC_(0.60462178621145526495587961093028377048346906917799e-10),
SC_(7.5470066070556640625), SC_(-5), SC_(-0.804919183254241943359375), SC_(0.11850218745680660327856845487252042020489012451249e-4),
SC_(7.5470066070556640625), SC_(-5), SC_(-0.62323606014251708984375), SC_(0.25704941219612768652057044997952103565531823264833e-4),
SC_(7.5470066070556640625), SC_(-5), SC_(-0.5579319000244140625), SC_(0.26026610986949895591456820667931397644373911708617e-4),
SC_(7.5470066070556640625), SC_(-5), SC_(0.826751708984375), SC_(0.96427550556555556215914278478645893071540865408665e-5),
SC_(7.5470066070556640625), SC_(-4), SC_(-0.74602639675140380859375), SC_(-0.00016179970162846142544637619599296898839695649488055),
SC_(7.5470066070556640625), SC_(-3), SC_(0.0944411754608154296875), SC_(0.00062249282910339912813465170017929282035995863532522),
SC_(7.5470066070556640625), SC_(-3), SC_(0.98576259613037109375), SC_(0.91478224428475023051355182182258959654080836058826e-4),
SC_(7.5470066070556640625), SC_(-1), SC_(0.81158387660980224609375), SC_(-0.037618428130799583340460729445204508575236956259112),
SC_(7.5470066070556640625), SC_(1), SC_(0.264718532562255859375), SC_(-0.91850641031589001426851910351654966807086201315901),
SC_(7.5470066070556640625), SC_(2), SC_(-0.72904598712921142578125), SC_(8.2527975846199234989599916055568828159236433321317),
SC_(7.5470066070556640625), SC_(2), SC_(0.67001712322235107421875), SC_(-16.173978727715922835573941646676954402245624210885),
SC_(7.5470066070556640625), SC_(3), SC_(-0.44300353527069091796875), SC_(126.11683720173836113693183279288501512543793837078),
SC_(7.5470066070556640625), SC_(3), SC_(0.09376299381256103515625), SC_(-94.453868860737087182332484196906419229893511255424),
SC_(7.5470066070556640625), SC_(4), SC_(0.93538987636566162109375), SC_(212.20613541117306294339745645140997922163474736004),
SC_(7.5470066070556640625), SC_(5), SC_(0.91501367092132568359375), SC_(-548.9598762946375491746161334341209970192082722327),
SC_(7.5470066070556640625), SC_(5), SC_(0.93773555755615234375), SC_(-274.14402002956226658985353133565183129456133307216),
SC_(7.5470066070556640625), SC_(6), SC_(-0.38366591930389404296875), SC_(-32156.098501462924236706288755730053796038774016275),
SC_(7.5470066070556640625), SC_(7), SC_(0.62944734096527099609375), SC_(-23114.460949600096071941383702301168401607047211818),
SC_(11.84386730194091796875), SC_(-10), SC_(-0.5579319000244140625), SC_(-0.23265181140053135802487825748454722380866646014593e-10),
SC_(11.84386730194091796875), SC_(-10), SC_(0.81158387660980224609375), SC_(0.10119358336421199432244908899725952448132738655445e-11),
SC_(11.84386730194091796875), SC_(-8), SC_(-0.74602639675140380859375), SC_(-0.13489060836825107052053300247017803661743299618615e-8),
SC_(11.84386730194091796875), SC_(-8), SC_(-0.72904598712921142578125), SC_(-0.1542799319087398107549162488097441554465286352303e-8),
SC_(11.84386730194091796875), SC_(-8), SC_(0.98576259613037109375), SC_(0.59003527302236484992801818528316725899144008941385e-13),
SC_(11.84386730194091796875), SC_(-4), SC_(0.62944734096527099609375), SC_(-0.14472251039785768408474263876593046823350434589546e-4),
SC_(11.84386730194091796875), SC_(-4), SC_(0.92977702617645263671875), SC_(0.19881213267841126683103644232724033001739468923731e-4),
SC_(11.84386730194091796875), SC_(-3), SC_(0.67001712322235107421875), SC_(-0.45829620024586356030414844243050192126649872258431e-4),
SC_(11.84386730194091796875), SC_(-2), SC_(0.826751708984375), SC_(-0.0024475865536336790697122592507802550191969717760944),
SC_(11.84386730194091796875), SC_(-2), SC_(0.99292266368865966796875), SC_(0.001514584725634246672093061231008807294812673049418),
SC_(11.84386730194091796875), SC_(-1), SC_(-0.38366591930389404296875), SC_(0.0041910765987207082014873224726632429468869952557846),
SC_(11.84386730194091796875), SC_(2), SC_(-0.44300353527069091796875), SC_(29.060140543929646372953199229138943547599341368473),
SC_(11.84386730194091796875), SC_(3), SC_(0.09376299381256103515625), SC_(-177.48133935035592847836648194577534007151999415785),
SC_(11.84386730194091796875), SC_(6), SC_(0.264718532562255859375), SC_(222813.62228852691558610355161450613259901923040526),
SC_(11.84386730194091796875), SC_(7), SC_(-0.62323606014251708984375), SC_(-4859018.4455751267400897075639214816266256959868333),
SC_(11.84386730194091796875), SC_(8), SC_(0.91501367092132568359375), SC_(1021518.66801184216282417981301458120258320370794),
SC_(11.84386730194091796875), SC_(8), SC_(0.93538987636566162109375), SC_(383678.2307827682389868079425774985048635406198118),
SC_(11.84386730194091796875), SC_(8), SC_(0.93773555755615234375), SC_(335363.54374210707806874319418081514539985485964623),
SC_(11.84386730194091796875), SC_(9), SC_(-0.804919183254241943359375), SC_(-37638062.605176743043545621659726706224449118828276),
SC_(11.84386730194091796875), SC_(11), SC_(0.0944411754608154296875), SC_(-13088230119.354593487821768373557740001331594792884),
SC_(11.84997081756591796875), SC_(-11), SC_(0.09376299381256103515625), SC_(0.11652575593644221485023460761015831090267033800858e-10),
SC_(11.84997081756591796875), SC_(-11), SC_(0.92977702617645263671875), SC_(0.20579709935439231465251633890295859136590924726116e-15),
SC_(11.84997081756591796875), SC_(-11), SC_(0.93538987636566162109375), SC_(0.13224949845586789337687366145892296658666301182813e-15),
SC_(11.84997081756591796875), SC_(-8), SC_(-0.74602639675140380859375), SC_(-0.13489060836825107052053300247017803661743299618615e-8),
SC_(11.84997081756591796875), SC_(-7), SC_(0.93773555755615234375), SC_(0.69374698116005068370241223092303295509213455690462e-9),
SC_(11.84997081756591796875), SC_(-6), SC_(0.264718532562255859375), SC_(0.75171716970009817274765988454793518932645912441686e-7),
SC_(11.84997081756591796875), SC_(-5), SC_(0.67001712322235107421875), SC_(-0.74962894159760082832011679326967274680513990227673e-6),
SC_(11.84997081756591796875), SC_(-4), SC_(-0.62323606014251708984375), SC_(0.13562168617539220725057252182518517591360727530937e-4),
SC_(11.84997081756591796875), SC_(-3), SC_(0.0944411754608154296875), SC_(0.81018496059627083036058461166125860043982866987277e-4),
SC_(11.84997081756591796875), SC_(-3), SC_(0.81158387660980224609375), SC_(-0.00013226110423271619374803791001430283951730245350595),
SC_(11.84997081756591796875), SC_(-1), SC_(0.826751708984375), SC_(-0.0040979297572913890790531337178784142062844908280042),
SC_(11.84997081756591796875), SC_(0), SC_(-0.804919183254241943359375), SC_(-0.29753322859260680967406878028841522576050347782121),
SC_(11.84997081756591796875), SC_(0), SC_(-0.44300353527069091796875), SC_(-0.20897102536739270748155301914422564587637993175572),
SC_(11.84997081756591796875), SC_(0), SC_(0.98576259613037109375), SC_(0.25718519997355322934845056525480032969786078351821),
SC_(11.84997081756591796875), SC_(2), SC_(-0.38366591930389404296875), SC_(31.321494899202229629503730871768387574032327364668),
SC_(11.84997081756591796875), SC_(3), SC_(0.62944734096527099609375), SC_(-133.45273880919003222397159296712531292386296841578),
SC_(11.84997081756591796875), SC_(4), SC_(0.99292266368865966796875), SC_(124.0791430575599930695018428639543182491862135452),
SC_(11.84997081756591796875), SC_(8), SC_(-0.72904598712921142578125), SC_(-31278996.346844030458961294814400214328489738408282),
SC_(11.84997081756591796875), SC_(9), SC_(-0.5579319000244140625), SC_(-338438171.1910644879479672790426918021710482022825),
SC_(11.84997081756591796875), SC_(10), SC_(0.91501367092132568359375), SC_(1436525.2077063817917494317507659803096843830478934),
SC_(13.3824672698974609375), SC_(-13), SC_(-0.804919183254241943359375), SC_(0.22166639523051638106418604328947911924875738037195e-16),
SC_(13.3824672698974609375), SC_(-13), SC_(0.92977702617645263671875), SC_(0.44693154474481435928082063045813863131262403955661e-19),
SC_(13.3824672698974609375), SC_(-12), SC_(-0.62323606014251708984375), SC_(-0.16621175359968221829687634726523126274572535451776e-13),
SC_(13.3824672698974609375), SC_(-11), SC_(-0.5579319000244140625), SC_(0.44450919253842863629215666338932968470668430070296e-12),
SC_(13.3824672698974609375), SC_(-10), SC_(0.93773555755615234375), SC_(0.55673512583170756101841118590153351963256527278471e-14),
SC_(13.3824672698974609375), SC_(-9), SC_(0.81158387660980224609375), SC_(0.15673048027086770934389940776395437140646071715598e-10),
SC_(13.3824672698974609375), SC_(-7), SC_(0.09376299381256103515625), SC_(-0.18900830818056138997299707029920201032855688227972e-8),
SC_(13.3824672698974609375), SC_(-7), SC_(0.93538987636566162109375), SC_(0.62398829036318924421682890093652108111426929160992e-9),
SC_(13.3824672698974609375), SC_(-6), SC_(-0.74602639675140380859375), SC_(-0.21723575516243262421798797023094100622452296975193e-7),
SC_(13.3824672698974609375), SC_(2), SC_(0.264718532562255859375), SC_(17.034455941674013494369196837130404278802967075785),
SC_(13.3824672698974609375), SC_(2), SC_(0.98576259613037109375), SC_(74.199869740310278546928044799483142489006719811421),
SC_(13.3824672698974609375), SC_(4), SC_(0.826751708984375), SC_(-2970.4202769206060544252953563327031335250923271111),
SC_(13.3824672698974609375), SC_(6), SC_(-0.72904598712921142578125), SC_(-142653.18426864739894657986914209617064658696817064),
SC_(13.3824672698974609375), SC_(6), SC_(-0.44300353527069091796875), SC_(-847125.49020389136626193373354682614784551391911727),
SC_(13.3824672698974609375), SC_(6), SC_(0.67001712322235107421875), SC_(-973179.19295459124004349072652615957844656182701482),
SC_(13.3824672698974609375), SC_(7), SC_(0.0944411754608154296875), SC_(6291587.8396040891190619719705059087867165445493),
SC_(13.3824672698974609375), SC_(8), SC_(-0.38366591930389404296875), SC_(148736140.90353794537277725465559178875001451292523),
SC_(13.3824672698974609375), SC_(8), SC_(0.99292266368865966796875), SC_(1562.9986080941304055581037380248889804054119356879),
SC_(13.3824672698974609375), SC_(9), SC_(0.62944734096527099609375), SC_(-2282996099.0744102550139909067331966860804173216966),
SC_(13.3824672698974609375), SC_(9), SC_(0.91501367092132568359375), SC_(-47108686.442640842883533859076465535279340150282202),
SC_(16.6650257110595703125), SC_(-16), SC_(-0.5579319000244140625), SC_(0.36914896153983860669619753805966665027048352841086e-19),
SC_(16.6650257110595703125), SC_(-15), SC_(-0.804919183254241943359375), SC_(-0.74790282995655983775531645052438536118228838933368e-20),
SC_(16.6650257110595703125), SC_(-15), SC_(-0.62323606014251708984375), SC_(-0.36398678387957337085009611234034932395493463191661e-18),
SC_(16.6650257110595703125), SC_(-14), SC_(0.93773555755615234375), SC_(0.22807828690216376785976940239028828932632169446174e-21),
SC_(16.6650257110595703125), SC_(-13), SC_(0.92977702617645263671875), SC_(0.35320050515977865959614707894521274040624190465647e-19),
SC_(16.6650257110595703125), SC_(-12), SC_(0.81158387660980224609375), SC_(0.3082671873049785091792439153346921827065397800962e-15),
SC_(16.6650257110595703125), SC_(-4), SC_(0.93538987636566162109375), SC_(0.52291298347581562621901072563414165417626206009583e-5),
SC_(16.6650257110595703125), SC_(-2), SC_(0.99292266368865966796875), SC_(0.0012698575294388484883534762618017745047909786068378),
SC_(16.6650257110595703125), SC_(-1), SC_(0.0944411754608154296875), SC_(-0.011944140876262027507943894873016233264464123175583),
SC_(16.6650257110595703125), SC_(-1), SC_(0.91501367092132568359375), SC_(-0.0031076083789904422712562161725068777570567479833285),
SC_(16.6650257110595703125), SC_(4), SC_(-0.44300353527069091796875), SC_(7489.7232452416344466185434844943197669989737666647),
SC_(16.6650257110595703125), SC_(5), SC_(0.67001712322235107421875), SC_(-245785.37315952021732160039445469928096897296200858),
SC_(16.6650257110595703125), SC_(7), SC_(-0.72904598712921142578125), SC_(-49207050.468316885335102250704228071597639131505993),
SC_(16.6650257110595703125), SC_(7), SC_(0.264718532562255859375), SC_(42453247.952851458881163464731595954318082047470875),
SC_(16.6650257110595703125), SC_(8), SC_(0.62944734096527099609375), SC_(-979230421.06039761780739880450853659640100219735369),
SC_(16.6650257110595703125), SC_(10), SC_(-0.38366591930389404296875), SC_(-65484300474.651994691389202076648539080316522513276),
SC_(16.6650257110595703125), SC_(11), SC_(0.826751708984375), SC_(-621994593400.85818284286708477331063639042478826259),
SC_(16.6650257110595703125), SC_(13), SC_(0.98576259613037109375), SC_(-2368679.116056950972031807234328493387762603085367),
SC_(16.6650257110595703125), SC_(16), SC_(-0.74602639675140380859375), SC_(286937498915109.72391794972691070626807358288824491),
SC_(16.6650257110595703125), SC_(16), SC_(0.09376299381256103515625), SC_(178810232213386344.75148306627111836848013903472344),
SC_(17.0301532745361328125), SC_(-17), SC_(0.81158387660980224609375), SC_(0.23089891934552557492903571788866976069269398034636e-23),
SC_(17.0301532745361328125), SC_(-16), SC_(0.92977702617645263671875), SC_(0.77120542993546838080187693618711944669104877784798e-25),
SC_(17.0301532745361328125), SC_(-14), SC_(-0.38366591930389404296875), SC_(-0.54561248812503755335991908931944825672149594319331e-17),
SC_(17.0301532745361328125), SC_(-14), SC_(0.264718532562255859375), SC_(-0.25540948412416548331728930347103911513122873387648e-17),
SC_(17.0301532745361328125), SC_(-12), SC_(0.62944734096527099609375), SC_(0.11267232505246190944593673014733244504856527347217e-14),
SC_(17.0301532745361328125), SC_(-11), SC_(0.93538987636566162109375), SC_(0.8080068473692047289701190290402825999134033774326e-16),
SC_(17.0301532745361328125), SC_(-8), SC_(-0.44300353527069091796875), SC_(-0.23668950399843099002326915537352916668711085164683e-10),
SC_(17.0301532745361328125), SC_(-4), SC_(-0.62323606014251708984375), SC_(0.22257178074585895343804673994496661297003034593049e-5),
SC_(17.0301532745361328125), SC_(-4), SC_(-0.5579319000244140625), SC_(0.13825468678287818487268474508564732013727903072802e-5),
SC_(17.0301532745361328125), SC_(-2), SC_(0.98576259613037109375), SC_(0.0015940113463464718894604985317013703396900221174161),
SC_(17.0301532745361328125), SC_(-1), SC_(-0.72904598712921142578125), SC_(-0.00179298507080800413716717496074397930291963387428),
SC_(17.0301532745361328125), SC_(2), SC_(-0.74602639675140380859375), SC_(63.703534657883034459738823553326354020852528298334),
SC_(17.0301532745361328125), SC_(4), SC_(0.91501367092132568359375), SC_(9578.4486235254777894217041455902077880056968913822),
SC_(17.0301532745361328125), SC_(6), SC_(0.09376299381256103515625), SC_(-5017339.216196783919233944407631270205095529788784),
SC_(17.0301532745361328125), SC_(6), SC_(0.0944411754608154296875), SC_(-5018698.5341072323277278971254008046714224679259579),
SC_(17.0301532745361328125), SC_(7), SC_(0.99292266368865966796875), SC_(-78992.039209423422657071913321786385052597355213482),
SC_(17.0301532745361328125), SC_(8), SC_(0.826751708984375), SC_(2125458172.4081600001165033646972051069773553913414),
SC_(17.0301532745361328125), SC_(11), SC_(-0.804919183254241943359375), SC_(-3083182177646.0814083741337604451869998939540761478),
SC_(17.0301532745361328125), SC_(16), SC_(0.93773555755615234375), SC_(266651139531.32384929509372467284346479362567522913),
SC_(17.0301532745361328125), SC_(17), SC_(0.67001712322235107421875), SC_(-39984434200097046.063642477455323422467024142361322),
SC_(18.3042545318603515625), SC_(-16), SC_(0.91501367092132568359375), SC_(0.29883615646300452729116273431746068354341463393245e-24),
SC_(18.3042545318603515625), SC_(-15), SC_(-0.5579319000244140625), SC_(-0.19593885482631020055319069838825786355264001980923e-18),
SC_(18.3042545318603515625), SC_(-13), SC_(0.93538987636566162109375), SC_(0.18015893170629159643302327598927935673211915247379e-19),
SC_(18.3042545318603515625), SC_(-9), SC_(0.09376299381256103515625), SC_(0.11469696889070244336893177339905362355047054202956e-11),
SC_(18.3042545318603515625), SC_(-8), SC_(-0.38366591930389404296875), SC_(-0.1887440538785176364549309437756617748819077392573e-10),
SC_(18.3042545318603515625), SC_(-6), SC_(0.62944734096527099609375), SC_(0.43674982083323422168372530118149718931490233301677e-8),
SC_(18.3042545318603515625), SC_(-4), SC_(-0.44300353527069091796875), SC_(0.7202196497255920924428859123626553791826086042503e-6),
SC_(18.3042545318603515625), SC_(-2), SC_(-0.804919183254241943359375), SC_(-0.77283649068875750938251183253775363894689287493389e-4),
SC_(18.3042545318603515625), SC_(1), SC_(-0.74602639675140380859375), SC_(0.63828710585725175676940885969260056847792325179648),
SC_(18.3042545318603515625), SC_(2), SC_(0.98576259613037109375), SC_(166.08676681462310504060036212332710646394263847909),
SC_(18.3042545318603515625), SC_(4), SC_(0.99292266368865966796875), SC_(5290.5406072371351692027633069511734187279679177777),
SC_(18.3042545318603515625), SC_(5), SC_(0.264718532562255859375), SC_(392113.36345354167041874035916897478682871001810603),
SC_(18.3042545318603515625), SC_(5), SC_(0.826751708984375), SC_(515813.36159934241989083840875835833434313742166124),
SC_(18.3042545318603515625), SC_(10), SC_(0.81158387660980224609375), SC_(786203092993.54293624662825003360911583842842889743),
SC_(18.3042545318603515625), SC_(11), SC_(0.67001712322235107421875), SC_(-8261729884863.6657373747045319640816334012239447799),
SC_(18.3042545318603515625), SC_(12), SC_(0.0944411754608154296875), SC_(-30579050031328.838999922313096299251374259570555362),
SC_(18.3042545318603515625), SC_(13), SC_(-0.62323606014251708984375), SC_(2490927774952003.541834741685697258166307532119113),
SC_(18.3042545318603515625), SC_(14), SC_(-0.72904598712921142578125), SC_(8874022800651066.6502918671748924861977690946025867),
SC_(18.3042545318603515625), SC_(15), SC_(0.93773555755615234375), SC_(-3553964025785.9966811637710283958451213589141162289),
SC_(18.3042545318603515625), SC_(18), SC_(0.92977702617645263671875), SC_(3416106077482.7264856872784871760461910378746573151),
SC_(18.440765380859375), SC_(-17), SC_(-0.5579319000244140625), SC_(-0.50271604952920343300607472787502048319360871188692e-21),
SC_(18.440765380859375), SC_(-16), SC_(-0.804919183254241943359375), SC_(0.10984637871249881776444510537426108537817137259055e-21),
SC_(18.440765380859375), SC_(-12), SC_(-0.74602639675140380859375), SC_(0.38699810971215052589513068420573917306170228310572e-15),
SC_(18.440765380859375), SC_(-12), SC_(0.93773555755615234375), SC_(0.98565761862632574513933033426583440815341731508199e-18),
SC_(18.440765380859375), SC_(-6), SC_(0.264718532562255859375), SC_(-0.15283288108259116456399654021918348895173752216729e-9),
SC_(18.440765380859375), SC_(-5), SC_(0.67001712322235107421875), SC_(0.42663862212707289150211045881623824679654531468886e-7),
SC_(18.440765380859375), SC_(-5), SC_(0.98576259613037109375), SC_(0.23861087627268731000356265059002054846394077572679e-7),
SC_(18.440765380859375), SC_(-4), SC_(0.91501367092132568359375), SC_(-0.80543753849626232167758105932861113884499338011562e-7),
SC_(18.440765380859375), SC_(-2), SC_(0.09376299381256103515625), SC_(-0.85382295357652349741567303582030854482898935914125e-4),
SC_(18.440765380859375), SC_(-1), SC_(0.99292266368865966796875), SC_(0.030086983815468676149299012036109061540059539271355),
SC_(18.440765380859375), SC_(0), SC_(-0.72904598712921142578125), SC_(0.18653718888369370131458265584018026946159296567964),
SC_(18.440765380859375), SC_(0), SC_(0.62944734096527099609375), SC_(-0.21025192720175270695719746239016794207250758550671),
SC_(18.440765380859375), SC_(5), SC_(-0.38366591930389404296875), SC_(264699.84731638138429900882287246208183148022742781),
SC_(18.440765380859375), SC_(5), SC_(0.92977702617645263671875), SC_(-736319.88814289375666669784796756264581839709032387),
SC_(18.440765380859375), SC_(7), SC_(0.826751708984375), SC_(-42543004.889913803417064413390657862883996054044383),
SC_(18.440765380859375), SC_(11), SC_(-0.62323606014251708984375), SC_(838990229190.95540426631634358776581787814066606189),
SC_(18.440765380859375), SC_(13), SC_(0.81158387660980224609375), SC_(-358219758017025.29646048607070742930527995349756931),
SC_(18.440765380859375), SC_(15), SC_(0.0944411754608154296875), SC_(250504952280779402.4459453389974592578734995999658),
SC_(18.440765380859375), SC_(17), SC_(0.93538987636566162109375), SC_(-4382618700190.530435650666874966527218631896635012),
SC_(18.440765380859375), SC_(18), SC_(-0.44300353527069091796875), SC_(31026494575738330367.158321747018911852847647134982),
SC_(19.2351226806640625), SC_(-19), SC_(0.826751708984375), SC_(0.28096099754174757639142988313052093117069710820259e-27),
SC_(19.2351226806640625), SC_(-15), SC_(0.93773555755615234375), SC_(0.22729284127735589054255258668317884253291919419305e-23),
SC_(19.2351226806640625), SC_(-13), SC_(0.99292266368865966796875), SC_(0.1743121215871876802557328668088468943943263194911e-25),
SC_(19.2351226806640625), SC_(-10), SC_(-0.38366591930389404296875), SC_(-0.10293684623854104934250449760096572176156444372122e-13),
SC_(19.2351226806640625), SC_(-10), SC_(0.264718532562255859375), SC_(-0.39291909511632775673453848171264487384306556380656e-13),
SC_(19.2351226806640625), SC_(1), SC_(0.92977702617645263671875), SC_(-1.8928597921982751461985041697534535744382441623969),
SC_(19.2351226806640625), SC_(1), SC_(0.93538987636566162109375), SC_(-0.17753066615543550750253798142286628228408488271265),
SC_(19.2351226806640625), SC_(3), SC_(-0.62323606014251708984375), SC_(-1406.8551161661961787833668743464163883272950430824),
SC_(19.2351226806640625), SC_(3), SC_(0.81158387660980224609375), SC_(-1349.1692552830459195981604712085505043997296160725),
SC_(19.2351226806640625), SC_(4), SC_(-0.74602639675140380859375), SC_(-8037.6658264469123963393087477071904706108915347975),
SC_(19.2351226806640625), SC_(4), SC_(0.0944411754608154296875), SC_(-25028.145293006716172962519105923296460758908547618),
SC_(19.2351226806640625), SC_(4), SC_(0.67001712322235107421875), SC_(-29534.257011785190165176788825355970943316250224702),
SC_(19.2351226806640625), SC_(4), SC_(0.91501367092132568359375), SC_(-16392.232356669543132626194808379585805064546084349),
SC_(19.2351226806640625), SC_(4), SC_(0.98576259613037109375), SC_(23971.132007029558069016801023045608495969275263064),
SC_(19.2351226806640625), SC_(6), SC_(-0.72904598712921142578125), SC_(-8140834.1324089639935519173978872996653658919863967),
SC_(19.2351226806640625), SC_(6), SC_(-0.44300353527069091796875), SC_(-7930928.2397986661163007545526813521615562150281197),
SC_(19.2351226806640625), SC_(9), SC_(-0.804919183254241943359375), SC_(-72379113476.352796377305937996940747985952066128593),
SC_(19.2351226806640625), SC_(13), SC_(0.62944734096527099609375), SC_(-5134369678377531.0833016268690600215514053304023389),
SC_(19.2351226806640625), SC_(15), SC_(-0.5579319000244140625), SC_(-1015762016510443869.6327233053169209347494734043869),
SC_(19.2351226806640625), SC_(18), SC_(0.09376299381256103515625), SC_(710186740012925626467.73942195603474203745449828018),
SC_(19.367992401123046875), SC_(-17), SC_(0.62944734096527099609375), SC_(0.11171785200806076601510755896553721227874614231315e-21),
SC_(19.367992401123046875), SC_(-15), SC_(0.67001712322235107421875), SC_(0.41708170484402827993195327851962176229050519214935e-19),
SC_(19.367992401123046875), SC_(-11), SC_(0.91501367092132568359375), SC_(0.21756446987184863754567940655540650014788217090708e-15),
SC_(19.367992401123046875), SC_(-10), SC_(0.264718532562255859375), SC_(-0.39291909511632775673453848171264487384306556380656e-13),
SC_(19.367992401123046875), SC_(-10), SC_(0.93538987636566162109375), SC_(0.35203386148632068895108168682763476328178687031646e-14),
SC_(19.367992401123046875), SC_(-8), SC_(0.09376299381256103515625), SC_(-0.11426052789780942300532608169075547762937997222756e-10),
SC_(19.367992401123046875), SC_(-3), SC_(0.0944411754608154296875), SC_(-0.62009805308781525829391269462790209708034571751975e-5),
SC_(19.367992401123046875), SC_(-3), SC_(0.98576259613037109375), SC_(0.48683625637537837402773720121195220847472881885636e-4),
SC_(19.367992401123046875), SC_(-1), SC_(-0.5579319000244140625), SC_(-0.0051771830750291213227283927254523671758223103225019),
SC_(19.367992401123046875), SC_(4), SC_(-0.804919183254241943359375), SC_(-31206.872941793395251553296530119153550183252786295),
SC_(19.367992401123046875), SC_(4), SC_(-0.44300353527069091796875), SC_(17028.045702509925174397449943279294145247295355527),
SC_(19.367992401123046875), SC_(9), SC_(-0.72904598712921142578125), SC_(40963049161.840563921749109759131967640623017931928),
SC_(19.367992401123046875), SC_(10), SC_(0.81158387660980224609375), SC_(1539232549071.2403439978796189170963046987864230162),
SC_(19.367992401123046875), SC_(12), SC_(-0.38366591930389404296875), SC_(-88775931893030.570776909560322117125028614222504249),
SC_(19.367992401123046875), SC_(13), SC_(0.99292266368865966796875), SC_(-6370402.0056839501875375385352467787059666973045593),
SC_(19.367992401123046875), SC_(14), SC_(-0.74602639675140380859375), SC_(-29382493955027210.900261178223964994850616622296376),
SC_(19.367992401123046875), SC_(14), SC_(-0.62323606014251708984375), SC_(-78338179480735275.385980722705110901752445891864321),
SC_(19.367992401123046875), SC_(15), SC_(0.826751708984375), SC_(-21925888030419983.923456036187293901038296511900498),
SC_(19.367992401123046875), SC_(15), SC_(0.92977702617645263671875), SC_(-64341448614367.513605394800667731791476692010324668),
SC_(19.367992401123046875), SC_(18), SC_(0.93773555755615234375), SC_(41662739626590.703682551951618167157234877634542544),
SC_(19.4185085296630859375), SC_(-18), SC_(0.0944411754608154296875), SC_(0.51911342450084606006498960540691516909936454811191e-22),
SC_(19.4185085296630859375), SC_(-17), SC_(-0.5579319000244140625), SC_(0.26324372445835333986291229819511043236130501244613e-21),
SC_(19.4185085296630859375), SC_(-13), SC_(-0.74602639675140380859375), SC_(0.1038530509609787824487836468215661897944095895319e-16),
SC_(19.4185085296630859375), SC_(-13), SC_(-0.44300353527069091796875), SC_(-0.11954326307657381817424475791045577141774274614215e-16),
SC_(19.4185085296630859375), SC_(-11), SC_(0.98576259613037109375), SC_(0.32010533648064664252568315383909193374387441919969e-19),
SC_(19.4185085296630859375), SC_(-8), SC_(0.93538987636566162109375), SC_(0.70096078678514191093666708376458847827858161562235e-11),
SC_(19.4185085296630859375), SC_(-6), SC_(0.826751708984375), SC_(-0.50239978245173340481994943923797004708278735544008e-8),
SC_(19.4185085296630859375), SC_(-6), SC_(0.91501367092132568359375), SC_(0.69080326024780067300862626196534340743493983872007e-8),
SC_(19.4185085296630859375), SC_(-5), SC_(-0.38366591930389404296875), SC_(-0.30848661309469795756336369771506539897303178512343e-7),
SC_(19.4185085296630859375), SC_(-2), SC_(-0.72904598712921142578125), SC_(0.6914266105284580609485581648675886651787722622556e-4),
SC_(19.4185085296630859375), SC_(-2), SC_(0.93773555755615234375), SC_(-0.00082097977947824531306568828914325965998735309386971),
SC_(19.4185085296630859375), SC_(1), SC_(0.81158387660980224609375), SC_(4.2277096876026264281609013898703823312548839649606),
SC_(19.4185085296630859375), SC_(3), SC_(-0.804919183254241943359375), SC_(-1069.4488089252507695912869014570583577070805013318),
SC_(19.4185085296630859375), SC_(8), SC_(-0.62323606014251708984375), SC_(-2666091237.1634788661326592401910351174873913360323),
SC_(19.4185085296630859375), SC_(8), SC_(0.99292266368865966796875), SC_(925591.97999902651810095119605577620595541436584718),
SC_(19.4185085296630859375), SC_(9), SC_(0.264718532562255859375), SC_(-5122686380.6946779314572422174331586519139555025857),
SC_(19.4185085296630859375), SC_(10), SC_(0.09376299381256103515625), SC_(965104740093.56545540804916275928148739799548313534),
SC_(19.4185085296630859375), SC_(11), SC_(0.92977702617645263671875), SC_(-624047483227.59396674703988209346984924810845031782),
SC_(19.4185085296630859375), SC_(15), SC_(0.62944734096527099609375), SC_(-738329845534139238.31589929078368480078587395312756),
SC_(19.4185085296630859375), SC_(18), SC_(0.67001712322235107421875), SC_(25754480226319677835.76098992722595983871287263485),
SC_(19.4396209716796875), SC_(-19), SC_(0.826751708984375), SC_(0.28096099754174757639142988313052093117069710820259e-27),
SC_(19.4396209716796875), SC_(-19), SC_(0.99292266368865966796875), SC_(0.41139415501798503182620662065024377889890717413858e-40),
SC_(19.4396209716796875), SC_(-16), SC_(0.92977702617645263671875), SC_(0.65747433121722074118768922518726326206091216387016e-25),
SC_(19.4396209716796875), SC_(-14), SC_(0.0944411754608154296875), SC_(0.7750508585662675010738068913765041007697196976154e-18),
SC_(19.4396209716796875), SC_(-10), SC_(0.93538987636566162109375), SC_(0.35203386148632068895108168682763476328178687031646e-14),
SC_(19.4396209716796875), SC_(-9), SC_(-0.804919183254241943359375), SC_(0.861460700695142273465894246225707493326360379112e-12),
SC_(19.4396209716796875), SC_(-9), SC_(0.09376299381256103515625), SC_(0.35797340830762850114741224311803714456251087097646e-13),
SC_(19.4396209716796875), SC_(-9), SC_(0.264718532562255859375), SC_(0.60970531234766811023858960941339345617424038691191e-13),
SC_(19.4396209716796875), SC_(-4), SC_(0.81158387660980224609375), SC_(0.14162438520800722165613785588526894318263591840579e-5),
SC_(19.4396209716796875), SC_(0), SC_(0.93773555755615234375), SC_(0.30185089350015097041813236342216465473811492066808),
SC_(19.4396209716796875), SC_(1), SC_(-0.74602639675140380859375), SC_(-3.3298125144104874439554986012917200328078041284076),
SC_(19.4396209716796875), SC_(6), SC_(-0.62323606014251708984375), SC_(2070223.0689771828593384049574788254082161424782151),
SC_(19.4396209716796875), SC_(9), SC_(-0.72904598712921142578125), SC_(40963049161.840563921749109759131967640623017931928),
SC_(19.4396209716796875), SC_(12), SC_(0.91501367092132568359375), SC_(7040751124453.4488884066354472049044671577945030141),
SC_(19.4396209716796875), SC_(13), SC_(0.67001712322235107421875), SC_(-5687940021302887.6451945681691475411327830115702795),
SC_(19.4396209716796875), SC_(14), SC_(0.98576259613037109375), SC_(674245566.99025968816472030671195432637133872627082),
SC_(19.4396209716796875), SC_(17), SC_(-0.38366591930389404296875), SC_(-127301699165359197878.79551348556848810793872324273),
SC_(19.4396209716796875), SC_(18), SC_(-0.5579319000244140625), SC_(-159505604178383717077.46533923481855803222244671133),
SC_(19.4396209716796875), SC_(19), SC_(-0.44300353527069091796875), SC_(-1029187142567780884281.5753644645077933758833454754),
SC_(19.4396209716796875), SC_(19), SC_(0.62944734096527099609375), SC_(-67969400336711244635.100926182757403393151023891505),
SC_(19.87186431884765625), SC_(-18), SC_(0.0944411754608154296875), SC_(0.51911342450084606006498960540691516909936454811191e-22),
SC_(19.87186431884765625), SC_(-17), SC_(0.67001712322235107421875), SC_(0.58726064536889576863720153513076020150678343992132e-22),
SC_(19.87186431884765625), SC_(-14), SC_(0.09376299381256103515625), SC_(0.77286264421078668095197950811355859649633390890055e-18),
SC_(19.87186431884765625), SC_(-13), SC_(0.98576259613037109375), SC_(0.15205096913859731930591097244177400726284058187231e-23),
SC_(19.87186431884765625), SC_(-12), SC_(0.62944734096527099609375), SC_(0.84179594974630947109160535195453410788993007175736e-16),
SC_(19.87186431884765625), SC_(-6), SC_(0.93773555755615234375), SC_(0.66088259609398732039730419153668689085254808488491e-8),
SC_(19.87186431884765625), SC_(-3), SC_(0.92977702617645263671875), SC_(-0.3202584859446750447001544695075271493418238924369e-4),
SC_(19.87186431884765625), SC_(2), SC_(0.93538987636566162109375), SC_(-114.29504330922803764479417554506839061453574689078),
SC_(19.87186431884765625), SC_(3), SC_(0.264718532562255859375), SC_(-590.31121404357419718511991159003397861067922712095),
SC_(19.87186431884765625), SC_(4), SC_(-0.804919183254241943359375), SC_(-31206.872941793395251553296530119153550183252786295),
SC_(19.87186431884765625), SC_(4), SC_(0.81158387660980224609375), SC_(27998.376863739953480856174913557597864204862111517),
SC_(19.87186431884765625), SC_(6), SC_(-0.74602639675140380859375), SC_(-3988947.6757273109841392288902418535673497942678044),
SC_(19.87186431884765625), SC_(6), SC_(0.91501367092132568359375), SC_(17207577.76868430351907141387711761936487111245407),
SC_(19.87186431884765625), SC_(8), SC_(-0.5579319000244140625), SC_(-2880999408.1753053515439782739761895146097466930431),
SC_(19.87186431884765625), SC_(10), SC_(-0.38366591930389404296875), SC_(-250811038036.64016980933046385373956183195852302589),
SC_(19.87186431884765625), SC_(11), SC_(0.99292266368865966796875), SC_(-4956548.0008289171017772512361059049573500136580832),
SC_(19.87186431884765625), SC_(12), SC_(-0.62323606014251708984375), SC_(-106590833899905.54371031227921841065877625515491286),
SC_(19.87186431884765625), SC_(12), SC_(-0.44300353527069091796875), SC_(164377317484172.780269767864581766622776515649156),
SC_(19.87186431884765625), SC_(18), SC_(-0.72904598712921142578125), SC_(-6500249695425848422.6994934374150447524907522260626),
SC_(19.87186431884765625), SC_(18), SC_(0.826751708984375), SC_(215957040146103710.43752878136972484271174243226819),
SC_(19.9363040924072265625), SC_(-19), SC_(-0.5579319000244140625), SC_(0.4536209533748046856223356436528310434693264815516e-24),
SC_(19.9363040924072265625), SC_(-19), SC_(0.264718532562255859375), SC_(0.78629720841879126459468443827603688509992408472136e-23),
SC_(19.9363040924072265625), SC_(-17), SC_(-0.44300353527069091796875), SC_(0.58251104165678394898744857711146365095314417691743e-21),
SC_(19.9363040924072265625), SC_(-16), SC_(-0.62323606014251708984375), SC_(-0.29751304424052425636113962115386812591456175870573e-20),
SC_(19.9363040924072265625), SC_(-14), SC_(0.91501367092132568359375), SC_(0.12709748787166211089363084338252308414817659872819e-20),
SC_(19.9363040924072265625), SC_(-14), SC_(0.92977702617645263671875), SC_(0.3871138758064428596131493508699859591733838577277e-21),
SC_(19.9363040924072265625), SC_(-12), SC_(0.93773555755615234375), SC_(0.89408958662499196674261505271428146255253342324884e-18),
SC_(19.9363040924072265625), SC_(-11), SC_(-0.38366591930389404296875), SC_(0.26026063256932547239295328669255586707226242612148e-14),
SC_(19.9363040924072265625), SC_(-10), SC_(-0.74602639675140380859375), SC_(-0.34765506905243672613499520824866410956137457719745e-13),
SC_(19.9363040924072265625), SC_(-10), SC_(0.81158387660980224609375), SC_(0.63172556307492864748930303721096827403984649074523e-13),
SC_(19.9363040924072265625), SC_(-4), SC_(0.0944411754608154296875), SC_(-0.12660004211205826580535251463738122438007427377005e-5),
SC_(19.9363040924072265625), SC_(-4), SC_(0.62944734096527099609375), SC_(-0.54962149013781842129875877015678395599272910286725e-6),
SC_(19.9363040924072265625), SC_(2), SC_(0.09376299381256103515625), SC_(66.642893417106666543810431512449143935500286088633),
SC_(19.9363040924072265625), SC_(3), SC_(0.99292266368865966796875), SC_(-1337.0443049910513329145515282976202263100750256813),
SC_(19.9363040924072265625), SC_(8), SC_(0.826751708984375), SC_(3010989900.8893375803525358367041329372033717978545),
SC_(19.9363040924072265625), SC_(10), SC_(-0.72904598712921142578125), SC_(-451944141173.12209414901560544187498153708108846852),
SC_(19.9363040924072265625), SC_(11), SC_(0.67001712322235107421875), SC_(-3818836562168.0063397346459855637481748033411304683),
SC_(19.9363040924072265625), SC_(13), SC_(0.98576259613037109375), SC_(-555684705.08358775884287423663622045616768375133224),
SC_(19.9363040924072265625), SC_(15), SC_(-0.804919183254241943359375), SC_(-43129486142739936.248977475359797313525493031517393),
SC_(19.9363040924072265625), SC_(19), SC_(0.93538987636566162109375), SC_(-21677629202869.188161110548407561929925083445523615),
};
#undef SC_

View File

@ -59,7 +59,7 @@ inline void add_expected_result(
re += group_name;
re += ")";
get_expected_data().push_back(
std::make_pair(boost::regex(re),
std::make_pair(boost::regex(re, boost::regex::perl | boost::regex::icase),
std::make_pair(max_peek_error, max_mean_error)));
}

425
test/hermite.ipp Normal file
View File

@ -0,0 +1,425 @@
#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
static const boost::array<boost::array<T, 3>, 420> hermite = {
SC_(0.8e1), SC_(-0.804919189453125e3), SC_(0.45107507538695517471998224862706929168983312035236e26),
SC_(0.8e1), SC_(-0.7460263671875e3), SC_(0.24561928260207418635049717146784087504133748838575e26),
SC_(0.8e1), SC_(-0.72904595947265625e3), SC_(0.20429972623973894937590136235800300689033201111301e26),
SC_(0.8e1), SC_(-0.623236083984375e3), SC_(0.5827000192786290015079053630015377969828881322477e25),
SC_(0.8e1), SC_(-0.557931884765625e3), SC_(0.24036425469465274704663172230600209480309473246511e25),
SC_(0.8e1), SC_(-0.4430035400390625e3), SC_(0.3797226972301982762616920977628718931846209669113e24),
SC_(0.8e1), SC_(-0.383665924072265625e3), SC_(0.12017786536547968144293561686294350272042177165962e24),
SC_(0.8e1), SC_(0.9376299285888671875e2), SC_(0.15268620781186000127986962828387837477310566397968e19),
SC_(0.8e1), SC_(0.944411773681640625e2), SC_(0.1617518154852919675909314869798309833011143307635e19),
SC_(0.8e1), SC_(0.264718536376953125e3), SC_(0.61720298828736019075790614156102805167876087211952e22),
SC_(0.8e1), SC_(0.62944732666015625e3), SC_(0.63081173846769146140441083274224793875281883735246e25),
SC_(0.8e1), SC_(0.67001715087890625e3), SC_(0.10397137311210792549517430287956468909599308482363e26),
SC_(0.8e1), SC_(0.8115838623046875e3), SC_(0.48183457131767562763518406277181444679084105960509e26),
SC_(0.8e1), SC_(0.826751708984375e3), SC_(0.55876845531601243780899074396489049059605490708721e26),
SC_(0.8e1), SC_(0.915013671875e3), SC_(0.12579210047506473419699887821873790018411396965251e27),
SC_(0.8e1), SC_(0.92977703857421875e3), SC_(0.14297610657915447015410284337196030534976367717228e27),
SC_(0.8e1), SC_(0.935389892578125e3), SC_(0.15002871812830612180035463350811490994647498745898e27),
SC_(0.8e1), SC_(0.93773553466796875e3), SC_(0.15306505051932713956696576348429859356902240309652e27),
SC_(0.8e1), SC_(0.9857625732421875e3), SC_(0.2282508005179494438672517847212865156472291867269e27),
SC_(0.8e1), SC_(0.99292266845703125e3), SC_(0.24185618845978155462978780829055436870571431239936e27),
SC_(0.9e1), SC_(-0.804919189453125e3), SC_(-0.72615348491801522758107817154280636761854800448258e29),
SC_(0.9e1), SC_(-0.7460263671875e3), SC_(-0.36647428831123627780613206119656435975372881269689e29),
SC_(0.9e1), SC_(-0.72904595947265625e3), SC_(-0.29788553802717105399309090578189082490491064795881e29),
SC_(0.9e1), SC_(-0.623236083984375e3), SC_(-0.72631187656840434630386580888842027480654740183583e28),
SC_(0.9e1), SC_(-0.557931884765625e3), SC_(-0.26821031676217242168707855784900940170157970241264e28),
SC_(0.9e1), SC_(-0.4430035400390625e3), SC_(-0.33643014085005895416146465835311020646005187659932e27),
SC_(0.9e1), SC_(-0.383665924072265625e3), SC_(-0.92213797591750116970480652180852706466705815198925e26),
SC_(0.9e1), SC_(0.9376299285888671875e2), SC_(0.28619599017630076419048218930351610672808471971911e21),
SC_(0.9e1), SC_(0.944411773681640625e2), SC_(0.30538356606793385774776392717760624059016600770529e21),
SC_(0.9e1), SC_(0.264718536376953125e3), SC_(0.32675149012792009950839328597362709432321349932704e25),
SC_(0.9e1), SC_(0.62944732666015625e3), SC_(0.79411750739676620994218584143838991056650844543993e28),
SC_(0.9e1), SC_(0.67001715087890625e3), SC_(0.13932396494395279118751516299633800114577839547729e29),
SC_(0.9e1), SC_(0.8115838623046875e3), SC_(0.78209357516588915667750630886227046953282003885816e29),
SC_(0.9e1), SC_(0.826751708984375e3), SC_(0.9239201438100206122484942895031603534508035207534e29),
SC_(0.9e1), SC_(0.915013671875e3), SC_(0.23020188368730794526744784417674030233447879296414e30),
SC_(0.9e1), SC_(0.92977703857421875e3), SC_(0.26587057172217180147109231631091242505401497841279e30),
SC_(0.9e1), SC_(0.935389892578125e3), SC_(0.28066940992909396296554569662089642014388342016689e30),
SC_(0.9e1), SC_(0.93773553466796875e3), SC_(0.2870677681432185184539265574407337379961356759468e30),
SC_(0.9e1), SC_(0.9857625732421875e3), SC_(0.4500003405401322163412586784924678900107709701962e30),
SC_(0.9e1), SC_(0.99292266845703125e3), SC_(0.48028703540906417924253986480733367446328052415498e30),
SC_(0.1e2), SC_(-0.804919189453125e3), SC_(0.11689816296461847274622300874825539661285328959095e33),
SC_(0.1e2), SC_(-0.7460263671875e3), SC_(0.54679454280582535200198215910160226619047153251183e32),
SC_(0.1e2), SC_(-0.72904595947265625e3), SC_(0.43434081837302238559608884831319578537002297874261e32),
SC_(0.1e2), SC_(-0.623236083984375e3), SC_(0.90531705080732310437321262346769305582516409498699e31),
SC_(0.1e2), SC_(-0.557931884765625e3), SC_(0.29928184853282382212205807781073913971873952893684e31),
SC_(0.1e2), SC_(-0.4430035400390625e3), SC_(0.29807265173628291298939129580674147768362711153657e30),
SC_(0.1e2), SC_(-0.383665924072265625e3), SC_(0.70756420528926763608091741538465186246363823788564e29),
SC_(0.1e2), SC_(0.9376299285888671875e2), SC_(0.53641701648878869328402154187886529569000541972093e23),
SC_(0.1e2), SC_(0.944411773681640625e2), SC_(0.57652451729901027022147781233362208672090049328676e23),
SC_(0.1e2), SC_(0.264718536376953125e3), SC_(0.17298324279751374105449100095978732528697456059849e28),
SC_(0.1e2), SC_(0.62944732666015625e3), SC_(0.99969892955855027682901459214621192921416240033293e31),
SC_(0.1e2), SC_(0.67001715087890625e3), SC_(0.18669702059708370695739115280703586121887901490207e32),
SC_(0.1e2), SC_(0.8115838623046875e3), SC_(0.12694603758113437790859235888888381018069026780075e33),
SC_(0.1e2), SC_(0.826751708984375e3), SC_(0.15276950578878524322853942670808003516571872263785e33),
SC_(0.1e2), SC_(0.915013671875e3), SC_(0.42127347747272206350084241564061602373253483547743e33),
SC_(0.1e2), SC_(0.92977703857421875e3), SC_(0.49439813206983222292955141736901537001605526567434e33),
SC_(0.1e2), SC_(0.935389892578125e3), SC_(0.52506795789015555507271006606207920041267992294258e33),
SC_(0.1e2), SC_(0.93773553466796875e3), SC_(0.5383845389205336603774821335902360432595407417418e33),
SC_(0.1e2), SC_(0.9857625732421875e3), SC_(0.88718287878699347854064053369680200599130466268723e33),
SC_(0.1e2), SC_(0.99292266845703125e3), SC_(0.95377141623597704470908019348004898122546466610927e33),
SC_(0.11e2), SC_(-0.804919189453125e3), SC_(-0.18818569685711019771084718279949279407835364975145e36),
SC_(0.11e2), SC_(-0.7460263671875e3), SC_(-0.81583896324899347640769823826628802342599459007862e35),
SC_(0.11e2), SC_(-0.72904595947265625e3), SC_(-0.63330287962703711111790462420108580900426293742353e35),
SC_(0.11e2), SC_(-0.623236083984375e3), SC_(-0.11284379807813476542599136955709023783640757794916e35),
SC_(0.11e2), SC_(-0.557931884765625e3), SC_(-0.33395240744978214895073421867397301877129142707028e34),
SC_(0.11e2), SC_(-0.4430035400390625e3), SC_(-0.26408775121319087852943852625927639373812809780785e33),
SC_(0.11e2), SC_(-0.383665924072265625e3), SC_(-0.54291810656601189878288220477937246911188498521391e32),
SC_(0.11e2), SC_(0.9376299285888671875e2), SC_(0.10053489057481196687076296855379756797368225593143e26),
SC_(0.11e2), SC_(0.944411773681640625e2), SC_(0.10883423167744841177736957439483334412283561854401e26),
SC_(0.11e2), SC_(0.264718536376953125e3), SC_(0.91577206672391353431978833974641874893100570036399e30),
SC_(0.11e2), SC_(0.62944732666015625e3), SC_(0.12584997550011507219817405571418069606411457160603e35),
SC_(0.11e2), SC_(0.67001715087890625e3), SC_(0.25017762515677812475654023661074854439693249674989e35),
SC_(0.11e2), SC_(0.8115838623046875e3), SC_(0.20605314678159576340073614574689144722841355692387e36),
SC_(0.11e2), SC_(0.826751708984375e3), SC_(0.25260305214286551864922726137009996295874170160231e36),
SC_(0.11e2), SC_(0.915013671875e3), SC_(0.77093737893405727479156012282524646171889099584724e36),
SC_(0.11e2), SC_(0.92977703857421875e3), SC_(0.91935474481359373814770652069446021505623126342922e36),
SC_(0.11e2), SC_(0.935389892578125e3), SC_(0.98228090806597754947655769132113085309480225491242e36),
SC_(0.11e2), SC_(0.93773553466796875e3), SC_(0.10097188855678660617518870586147923895925111174325e37),
SC_(0.11e2), SC_(0.9857625732421875e3), SC_(0.17490943550521460249490073361246584037466880560676e37),
SC_(0.11e2), SC_(0.99292266845703125e3), SC_(0.18940329136734281935082032957044303460975085779168e37),
SC_(0.12e2), SC_(-0.804919189453125e3), SC_(0.30294598540220804462044524153306777663509970628739e39),
SC_(0.12e2), SC_(-0.7460263671875e3), SC_(0.12172627264453841222828991650975850694842130932071e39),
SC_(0.12e2), SC_(-0.72904595947265625e3), SC_(0.92340425553097458791203508279141174969141820492299e38),
SC_(0.12e2), SC_(-0.623236083984375e3), SC_(0.14065466193476872965593557347378160930420069772452e38),
SC_(0.12e2), SC_(-0.557931884765625e3), SC_(0.37263880802028208129069576191917543233991535476065e37),
SC_(0.12e2), SC_(-0.4430035400390625e3), SC_(0.23397705973845936510794729346708943708034608906903e36),
SC_(0.12e2), SC_(-0.383665924072265625e3), SC_(0.41658278768991111298468308002249529032249010160273e35),
SC_(0.12e2), SC_(0.9376299285888671875e2), SC_(0.1884110327970735092254408128261723357492772304494e28),
SC_(0.12e2), SC_(0.944411773681640625e2), SC_(0.20544182415774952250997210456061363935901042940234e28),
SC_(0.12e2), SC_(0.264718536376953125e3), SC_(0.48480562600268824564698370021815193972032016354896e33),
SC_(0.12e2), SC_(0.62944732666015625e3), SC_(0.15842966193994215674176186033328108010563621242497e38),
SC_(0.12e2), SC_(0.67001715087890625e3), SC_(0.3352424919079377855427890512067629280453469707889e38),
SC_(0.12e2), SC_(0.8115838623046875e3), SC_(0.33445602459725757173093631890694210384349814179179e39),
SC_(0.12e2), SC_(0.826751708984375e3), SC_(0.4176766491784391607460244444090637220753635269242e39),
SC_(0.12e2), SC_(0.915013671875e3), SC_(0.14108272157517756411117655879591654342259860325597e40),
SC_(0.12e2), SC_(0.92977703857421875e3), SC_(0.17095789873049740244186014591319864325495552151212e40),
SC_(0.12e2), SC_(0.935389892578125e3), SC_(0.18376197146596820542876788527941003168360783639003e40),
SC_(0.12e2), SC_(0.93773553466796875e3), SC_(0.1893686713584800621262558335100385915682586408288e40),
SC_(0.12e2), SC_(0.9857625732421875e3), SC_(0.34483639865358422938227666676511723324380657223673e40),
SC_(0.12e2), SC_(0.99292266845703125e3), SC_(0.37612354466089752738688053508788073512368471136832e40),
SC_(0.14e2), SC_(-0.804919189453125e3), SC_(0.78509349018738235160733032424141654678585448892725e45),
SC_(0.14e2), SC_(-0.7460263671875e3), SC_(0.27098354215438353455074292442751387993705409786796e45),
SC_(0.14e2), SC_(-0.72904595947265625e3), SC_(0.1963140866469160283587538139069049517916547423808e45),
SC_(0.14e2), SC_(-0.623236083984375e3), SC_(0.21852711196938088461903329630489320958358132401565e44),
SC_(0.14e2), SC_(-0.557931884765625e3), SC_(0.46397330715580958030299464092581443527478590612547e43),
SC_(0.14e2), SC_(-0.4430035400390625e3), SC_(0.18366229244023923479459711102721222723014222612589e42),
SC_(0.14e2), SC_(-0.383665924072265625e3), SC_(0.2452623515231201706730966354471863727561067188341e41),
SC_(0.14e2), SC_(0.9376299285888671875e2), SC_(0.66162381135477581005495154141263686720850602513354e32),
SC_(0.14e2), SC_(0.944411773681640625e2), SC_(0.73191791295179938803853550797406604736335227799687e32),
SC_(0.14e2), SC_(0.264718536376953125e3), SC_(0.13586852786445215715633994918623748387323846205265e39),
SC_(0.14e2), SC_(0.62944732666015625e3), SC_(0.25107390168196177586150383676878149652976320263345e44),
SC_(0.14e2), SC_(0.67001715087890625e3), SC_(0.60197547505130410182245724063086619757439720128054e44),
SC_(0.14e2), SC_(0.8115838623046875e3), SC_(0.88116568941558811789182895851999922671272237353138e45),
SC_(0.14e2), SC_(0.826751708984375e3), SC_(0.11419377964091862944071723561627426135352077966224e46),
SC_(0.14e2), SC_(0.915013671875e3), SC_(0.47247899152452010973538576496340454153898147781107e46),
SC_(0.14e2), SC_(0.92977703857421875e3), SC_(0.59115384191612534464910943588501923979781137151048e46),
SC_(0.14e2), SC_(0.935389892578125e3), SC_(0.64312408439979544841727996206027907691861399699817e46),
SC_(0.14e2), SC_(0.93773553466796875e3), SC_(0.6660743304582574572302805211733148811292236266788e46),
SC_(0.14e2), SC_(0.9857625732421875e3), SC_(0.13403312883052399458307052679768402305161676649702e47),
SC_(0.14e2), SC_(0.99292266845703125e3), SC_(0.14832551222424115425011658642924351861903344306679e47),
SC_(0.17e2), SC_(-0.804919189453125e3), SC_(-0.32753153797495918082003912931285726506061176743964e55),
SC_(0.17e2), SC_(-0.7460263671875e3), SC_(-0.90007329480895899941888933327554774003263936965797e54),
SC_(0.17e2), SC_(-0.72904595947265625e3), SC_(-0.60853811902080657743899477322061605680407388628644e54),
SC_(0.17e2), SC_(-0.623236083984375e3), SC_(-0.42318271990511870201518687815721495653054465600729e53),
SC_(0.17e2), SC_(-0.557931884765625e3), SC_(-0.64460717395845550169248667399141161290740045059411e52),
SC_(0.17e2), SC_(-0.4430035400390625e3), SC_(-0.12772672712006258369520322740190661939797693301752e51),
SC_(0.17e2), SC_(-0.383665924072265625e3), SC_(-0.11079347177294102521393365342021901838709200618124e50),
SC_(0.17e2), SC_(0.9376299285888671875e2), SC_(0.43519374656033098836731300879764665651147065558436e39),
SC_(0.17e2), SC_(0.944411773681640625e2), SC_(0.49197114845678675190660148652415003678458303172232e39),
SC_(0.17e2), SC_(0.264718536376953125e3), SC_(0.20156840106065232860196226242061773336707200599203e47),
SC_(0.17e2), SC_(0.62944732666015625e3), SC_(0.50089312969909253100985667585549457957806648188064e53),
SC_(0.17e2), SC_(0.67001715087890625e3), SC_(0.14484542322921469021252847142515217054546111055271e54),
SC_(0.17e2), SC_(0.8115838623046875e3), SC_(0.37681912627369123156565537575498454914328631548362e55),
SC_(0.17e2), SC_(0.826751708984375e3), SC_(0.51623024126169573452382726948052946601408108701071e55),
SC_(0.17e2), SC_(0.915013671875e3), SC_(0.2895633337669055248580356708103410190763367894877e56),
SC_(0.17e2), SC_(0.92977703857421875e3), SC_(0.3801155621913868324726680029836865596398523401522e56),
SC_(0.17e2), SC_(0.935389892578125e3), SC_(0.42106739248936301791031860672266726247277487691351e56),
SC_(0.17e2), SC_(0.93773553466796875e3), SC_(0.43938243566475239425230868516223819196786547076179e56),
SC_(0.17e2), SC_(0.9857625732421875e3), SC_(0.10270913273877421296093041084504926541868918478653e57),
SC_(0.17e2), SC_(0.99292266845703125e3), SC_(0.11615615017858235461324853323128928576441231619921e57),
SC_(0.2e2), SC_(-0.804919189453125e3), SC_(0.13664125939696571321627792173825499772854104679616e65),
SC_(0.2e2), SC_(-0.7460263671875e3), SC_(0.29895741233874127495469956809930073866421954487847e64),
SC_(0.2e2), SC_(-0.72904595947265625e3), SC_(0.18863420002234182908461277048750351649649333505681e64),
SC_(0.2e2), SC_(-0.623236083984375e3), SC_(0.81949346219444618862653173904393894590758063374518e62),
SC_(0.2e2), SC_(-0.557931884765625e3), SC_(0.89555238442343089813862532910106267260245516404963e61),
SC_(0.2e2), SC_(-0.4430035400390625e3), SC_(0.88824671000905057725316145231689664346646310142073e59),
SC_(0.2e2), SC_(-0.383665924072265625e3), SC_(0.50047706031281686934185500483975552431695853442504e58),
SC_(0.2e2), SC_(0.9376299285888671875e2), SC_(0.28610882481879508349420844543142088727411910854846e46),
SC_(0.2e2), SC_(0.944411773681640625e2), SC_(0.33051957004017694649388986947888165210283009384182e46),
SC_(0.2e2), SC_(0.264718536376953125e3), SC_(0.29901855151764422494131549882514663732738129348024e55),
SC_(0.2e2), SC_(0.62944732666015625e3), SC_(0.99927183168358678754808761757157327216365777144205e62),
SC_(0.2e2), SC_(0.67001715087890625e3), SC_(0.34851895441504948247886064678376700332663758737157e63),
SC_(0.2e2), SC_(0.8115838623046875e3), SC_(0.16114073154440198981224756860557734867221327596599e65),
SC_(0.2e2), SC_(0.826751708984375e3), SC_(0.23336814692664616992187268964892147104007886493032e65),
SC_(0.2e2), SC_(0.915013671875e3), SC_(0.17746074449684933227630214006061794066505116427473e66),
SC_(0.2e2), SC_(0.92977703857421875e3), SC_(0.24441537589311671035327934989081469154090156736707e66),
SC_(0.2e2), SC_(0.935389892578125e3), SC_(0.27568060570403931616024471137057240588227997804305e66),
SC_(0.2e2), SC_(0.93773553466796875e3), SC_(0.28984143054751801100983111641098309458943114392562e66),
SC_(0.2e2), SC_(0.9857625732421875e3), SC_(0.78705296119546518418045335867325054394580461944723e66),
SC_(0.2e2), SC_(0.99292266845703125e3), SC_(0.90963378024910425574275540598584493435224094886741e66),
SC_(0.22e2), SC_(-0.804919189453125e3), SC_(0.35410549655517756288894933463443046263916370592399e71),
SC_(0.22e2), SC_(-0.7460263671875e3), SC_(0.66552086301142184824540948129935000740737930656653e70),
SC_(0.22e2), SC_(-0.72904595947265625e3), SC_(0.40102688572019492592353384325508110499649827819955e70),
SC_(0.22e2), SC_(-0.623236083984375e3), SC_(0.12731739462867210769929335621987129698264939626685e69),
SC_(0.22e2), SC_(-0.557931884765625e3), SC_(0.1115025363330833283360185086189456351576853382243e68),
SC_(0.22e2), SC_(-0.4430035400390625e3), SC_(0.69720842031752011420182341799620826445874423052258e65),
SC_(0.22e2), SC_(-0.383665924072265625e3), SC_(0.29463893441421178372847408123132239351850425649941e64),
SC_(0.22e2), SC_(0.9376299285888671875e2), SC_(0.1003782827805175100803910479602251404487037389062e51),
SC_(0.22e2), SC_(0.944411773681640625e2), SC_(0.11764679244687611821884729264491504501235806639058e51),
SC_(0.22e2), SC_(0.264718536376953125e3), SC_(0.8379145950216427011587973312320388548685225349241e60),
SC_(0.22e2), SC_(0.62944732666015625e3), SC_(0.15835797942946616484814881691459128287509909270475e69),
SC_(0.22e2), SC_(0.67001715087890625e3), SC_(0.62580409500666544589877458136886479113620166141142e69),
SC_(0.22e2), SC_(0.8115838623046875e3), SC_(0.42453999544876314526549365053968053544637180614368e71),
SC_(0.22e2), SC_(0.826751708984375e3), SC_(0.6380265423616569077424242322963862669375481451879e71),
SC_(0.22e2), SC_(0.915013671875e3), SC_(0.594301495455158980571773071367338948278658208606e72),
SC_(0.22e2), SC_(0.92977703857421875e3), SC_(0.84515399657972606106321594496701903669902755274213e72),
SC_(0.22e2), SC_(0.935389892578125e3), SC_(0.9648090657380372010046820149407771514227791651662e72),
SC_(0.22e2), SC_(0.93773553466796875e3), SC_(0.10194620842520108674666279682528872594917790291927e73),
SC_(0.22e2), SC_(0.9857625732421875e3), SC_(0.30591405911583021039789993837589816130948550568976e73),
SC_(0.22e2), SC_(0.99292266845703125e3), SC_(0.35871405411212380910164537165449077790291815793521e73),
SC_(0.35e2), SC_(-0.804919189453125e3), SC_(-0.17265543966226158832481036557708311109606127124495e113),
SC_(0.35e2), SC_(-0.7460263671875e3), SC_(-0.12084088507285694356128802551712858887746829960818e112),
SC_(0.35e2), SC_(-0.72904595947265625e3), SC_(-0.53979456945200833403000362177034133652140735259381e111),
SC_(0.35e2), SC_(-0.623236083984375e3), SC_(-0.22312994224945418486163982657597306470379988285216e109),
SC_(0.35e2), SC_(-0.557931884765625e3), SC_(-0.46342142799869242843524507994236576566424214389636e107),
SC_(0.35e2), SC_(-0.4430035400390625e3), SC_(-0.1444253157985643701034355053467664611143806193583e104),
SC_(0.35e2), SC_(-0.383665924072265625e3), SC_(-0.94088165704338497803214561361931665277258781819532e101),
SC_(0.35e2), SC_(0.9376299285888671875e2), SC_(0.34867964417713495790031091331083903141212636834345e80),
SC_(0.35e2), SC_(0.944411773681640625e2), SC_(0.44893689818357762545156808608435299085345232424014e80),
SC_(0.35e2), SC_(0.264718536376953125e3), SC_(0.21461397992635311594884111369449328695745329042721e96),
SC_(0.35e2), SC_(0.62944732666015625e3), SC_(0.31572029620004155645503713456510960829037485118449e109),
SC_(0.35e2), SC_(0.67001715087890625e3), SC_(0.28104070338817673160656082690105330768586005825238e110),
SC_(0.35e2), SC_(0.8115838623046875e3), SC_(0.23042138656363759346410653632368259132774527275621e113),
SC_(0.35e2), SC_(0.826751708984375e3), SC_(0.44054407432627688965463512998107242753350860065516e113),
SC_(0.35e2), SC_(0.915013671875e3), SC_(0.15341256810349040686982753469585076844343659132652e115),
SC_(0.35e2), SC_(0.92977703857421875e3), SC_(0.26863276202949674855940307716119052117849681722704e115),
SC_(0.35e2), SC_(0.935389892578125e3), SC_(0.33162382598046564424135108685347435914117320370668e115),
SC_(0.35e2), SC_(0.93773553466796875e3), SC_(0.36200618356985329660106920606060260999032636548302e115),
SC_(0.35e2), SC_(0.9857625732421875e3), SC_(0.2079448954791745442630733208937099187119527807451e116),
SC_(0.35e2), SC_(0.99292266845703125e3), SC_(0.26789135369462534563475801989659335410281343329047e116),
SC_(0.39e2), SC_(-0.804919189453125e3), SC_(-0.11594724610269376675133295994667648916340009156091e126),
SC_(0.39e2), SC_(-0.7460263671875e3), SC_(-0.59881631251408557205127311170851509987384503796021e124),
SC_(0.39e2), SC_(-0.72904595947265625e3), SC_(-0.24395429686140560929684017855836946012576141303362e124),
SC_(0.39e2), SC_(-0.623236083984375e3), SC_(-0.53852586791768825082912263464229497587060927002143e121),
SC_(0.39e2), SC_(-0.557931884765625e3), SC_(-0.718321662571676714076170854773512025550058778984e119),
SC_(0.39e2), SC_(-0.4430035400390625e3), SC_(-0.88967324101112965016069832261671747302656341584146e115),
SC_(0.39e2), SC_(-0.383665924072265625e3), SC_(-0.32602618395821624277606519061217455907925511708347e113),
SC_(0.39e2), SC_(0.9376299285888671875e2), SC_(0.42761721847707811157055723429059908203980837805154e89),
SC_(0.39e2), SC_(0.944411773681640625e2), SC_(0.56674218278399498664458556235088519034392334042743e89),
SC_(0.39e2), SC_(0.264718536376953125e3), SC_(0.16844681844036883180732006970124952352016202896335e107),
SC_(0.39e2), SC_(0.62944732666015625e3), SC_(0.79282992531231013164557766874391393793620400228182e121),
SC_(0.39e2), SC_(0.67001715087890625e3), SC_(0.90607106164123497973412471364934371536090344651122e122),
SC_(0.39e2), SC_(0.8115838623046875e3), SC_(0.15992937684273997816389764191323771941192143088137e126),
SC_(0.39e2), SC_(0.826751708984375e3), SC_(0.32927849440442967893014023065851364647504023336502e126),
SC_(0.39e2), SC_(0.915013671875e3), SC_(0.17204948941327849876886583966673548861348150480047e128),
SC_(0.39e2), SC_(0.92977703857421875e3), SC_(0.32118669970741829532274318795611234943703447184318e128),
SC_(0.39e2), SC_(0.935389892578125e3), SC_(0.40616281816935655137092990493617134292648729550904e128),
SC_(0.39e2), SC_(0.93773553466796875e3), SC_(0.44783848423962576280686207253637725919398807964991e128),
SC_(0.39e2), SC_(0.9857625732421875e3), SC_(0.31414121592483655223358586186570433075795817612805e129),
SC_(0.39e2), SC_(0.99292266845703125e3), SC_(0.41658940895066107629573195609678148243112628749343e129),
SC_(0.45e2), SC_(-0.804919189453125e3), SC_(-0.20177652617081516828796062978793212005967378239278e145),
SC_(0.45e2), SC_(-0.7460263671875e3), SC_(-0.66054362280026053027757226707948088361626920155376e143),
SC_(0.45e2), SC_(-0.72904595947265625e3), SC_(-0.23437762835351403192537934629393907610069449299426e143),
SC_(0.45e2), SC_(-0.623236083984375e3), SC_(-0.20191234366700387819456850806321219529162264687134e140),
SC_(0.45e2), SC_(-0.557931884765625e3), SC_(-0.13861566456362123983928798104717105733858371444012e138),
SC_(0.45e2), SC_(-0.4430035400390625e3), SC_(-0.4301086017862310895138269448383055939513087622341e133),
SC_(0.45e2), SC_(-0.383665924072265625e3), SC_(-0.66494301129444185596750408117972477105468841816721e130),
SC_(0.45e2), SC_(0.9376299285888671875e2), SC_(0.18333784965891816055634592173380010722775781361257e103),
SC_(0.45e2), SC_(0.944411773681640625e2), SC_(0.25377609054299635959133533485034878034770237870855e103),
SC_(0.45e2), SC_(0.264718536376953125e3), SC_(0.37031983921392566542882397192210777179841273988766e123),
SC_(0.45e2), SC_(0.62944732666015625e3), SC_(0.31548585244541078317730225584275069164749251087912e140),
SC_(0.45e2), SC_(0.67001715087890625e3), SC_(0.52449010750697955051865066615853016859407067184864e141),
SC_(0.45e2), SC_(0.8115838623046875e3), SC_(0.29243310998128485711320487541829024461612289350623e145),
SC_(0.45e2), SC_(0.826751708984375e3), SC_(0.67284470764543020205762565613634748045278625515089e145),
SC_(0.45e2), SC_(0.915013671875e3), SC_(0.64615138415071315639177660571353142846045239347149e147),
SC_(0.45e2), SC_(0.92977703857421875e3), SC_(0.13278465208846749403260592878660521765302807431305e148),
SC_(0.45e2), SC_(0.935389892578125e3), SC_(0.17409022045455533776480508364766372898141301944389e148),
SC_(0.45e2), SC_(0.93773553466796875e3), SC_(0.19485974768216439208285778668083407454632111197255e148),
SC_(0.45e2), SC_(0.9857625732421875e3), SC_(0.18445192865916870046874911219161320468109838186066e149),
SC_(0.45e2), SC_(0.99292266845703125e3), SC_(0.25546176490459737663363913718086950038159915308274e149),
SC_(0.51e2), SC_(-0.804919189453125e3), SC_(-0.35113067934471903608940090834892095681626290434468e164),
SC_(0.51e2), SC_(-0.7460263671875e3), SC_(-0.72861035303836242811895086171124040853873378556859e162),
SC_(0.51e2), SC_(-0.72904595947265625e3), SC_(-0.22516927484966890282733144933534878130289199412883e162),
SC_(0.51e2), SC_(-0.623236083984375e3), SC_(-0.75700551095940008948839545651408145857924835535314e158),
SC_(0.51e2), SC_(-0.557931884765625e3), SC_(-0.26747336473574897356349179458053032541482550593711e156),
SC_(0.51e2), SC_(-0.4430035400390625e3), SC_(-0.20791502822466935421380862320061247482854365500361e151),
SC_(0.51e2), SC_(-0.383665924072265625e3), SC_(-0.13560110864020767509838384997192616330691476967023e148),
SC_(0.51e2), SC_(0.9376299285888671875e2), SC_(0.7844280896526308516074269853664693048016422885788e116),
SC_(0.51e2), SC_(0.944411773681640625e2), SC_(0.11340516612470737945168942456374532537814010961263e117),
SC_(0.51e2), SC_(0.264718536376953125e3), SC_(0.8139158117208128107600789052906528734475559194321e139),
SC_(0.51e2), SC_(0.62944732666015625e3), SC_(0.12553360744823564136379193666030734806903596181629e159),
SC_(0.51e2), SC_(0.67001715087890625e3), SC_(0.30359521798851670232517253916274343728895102603204e160),
SC_(0.51e2), SC_(0.8115838623046875e3), SC_(0.53470343158952394904110199377387174554239573865167e164),
SC_(0.51e2), SC_(0.826751708984375e3), SC_(0.13748486014792215950745539075543408808157303622984e165),
SC_(0.51e2), SC_(0.915013671875e3), SC_(0.24266426827928055351392414540851775403703580214217e167),
SC_(0.51e2), SC_(0.92977703857421875e3), SC_(0.54894541709901192178430511542775801375289469157154e167),
SC_(0.51e2), SC_(0.935389892578125e3), SC_(0.74617320843153667181219888046018738983602740835413e167),
SC_(0.51e2), SC_(0.93773553466796875e3), SC_(0.84784013234216460630444016007134974974311144452262e167),
SC_(0.51e2), SC_(0.9857625732421875e3), SC_(0.10830124161130178144242398936552356375378307471608e169),
SC_(0.51e2), SC_(0.99292266845703125e3), SC_(0.15665189838824983265666665985359283999947248743347e169),
SC_(0.56e2), SC_(-0.804919189453125e3), SC_(0.37956952705673899523586509921906408164373807674842e180),
SC_(0.56e2), SC_(-0.7460263671875e3), SC_(0.53865761270243895218660088472139211384451502688444e178),
SC_(0.56e2), SC_(-0.72904595947265625e3), SC_(0.14836291945588844494615487801685475362266135705863e178),
SC_(0.56e2), SC_(-0.623236083984375e3), SC_(0.2277004071341410372485292551385366645114538651319e174),
SC_(0.56e2), SC_(-0.557931884765625e3), SC_(0.46254239457392849536097636343005820458364173895835e171),
SC_(0.56e2), SC_(-0.4430035400390625e3), SC_(0.11344322644944075407583022851137024031178340092676e166),
SC_(0.56e2), SC_(-0.383665924072265625e3), SC_(0.3604029445291060010597333365239904139445634244682e162),
SC_(0.56e2), SC_(0.9376299285888671875e2), SC_(0.17917836479447994128429607949378029035674025577673e128),
SC_(0.56e2), SC_(0.944411773681640625e2), SC_(0.26860211927393157242420521317036063000474023936209e128),
SC_(0.56e2), SC_(0.264718536376953125e3), SC_(0.33793221965866674010877371813884434555285225328484e153),
SC_(0.56e2), SC_(0.62944732666015625e3), SC_(0.3967908983994242852488795641829100505059948945886e174),
SC_(0.56e2), SC_(0.67001715087890625e3), SC_(0.13114336111849403294532365713586373376802346102155e176),
SC_(0.56e2), SC_(0.8115838623046875e3), SC_(0.60234123418783718853851595976503029458229189410396e180),
SC_(0.56e2), SC_(0.826751708984375e3), SC_(0.16990109127454550637210380678211174380489674917725e181),
SC_(0.56e2), SC_(0.915013671875e3), SC_(0.49799501294713322660639045532203723491746004194747e183),
SC_(0.56e2), SC_(0.92977703857421875e3), SC_(0.12204125317946036746710422027579851417765551382392e184),
SC_(0.56e2), SC_(0.935389892578125e3), SC_(0.17095713176585659186454296245218656651525776780725e184),
SC_(0.56e2), SC_(0.93773553466796875e3), SC_(0.19669819452346534508628039944949105246308228599223e184),
SC_(0.56e2), SC_(0.9857625732421875e3), SC_(0.32254166162174546082031232457620847112857288236855e185),
SC_(0.56e2), SC_(0.99292266845703125e3), SC_(0.48373153428656361382291434304002503158410721745942e185),
SC_(0.57e2), SC_(-0.804919189453125e3), SC_(-0.61101918351066762254837696533065612479073827625339e183),
SC_(0.57e2), SC_(-0.7460263671875e3), SC_(-0.80366512793162060755260340674092236229261177996538e181),
SC_(0.57e2), SC_(-0.72904595947265625e3), SC_(-0.21631537718132322785026887852553957902317657529606e181),
SC_(0.57e2), SC_(-0.623236083984375e3), SC_(-0.28380175897994405792364081835185957992965246876733e177),
SC_(0.57e2), SC_(-0.557931884765625e3), SC_(-0.51608787018272790263523340429339097513443327878663e174),
SC_(0.57e2), SC_(-0.4430035400390625e3), SC_(-0.10049715947268959326175464756561482222757046735464e169),
SC_(0.57e2), SC_(-0.383665924072265625e3), SC_(-0.27649604314284126019945358499982753402436545672245e165),
SC_(0.57e2), SC_(0.9376299285888671875e2), SC_(0.33493248264114118064961943143309153369336052283655e130),
SC_(0.57e2), SC_(0.944411773681640625e2), SC_(0.50574435912900833357638094070860620693483455185529e130),
SC_(0.57e2), SC_(0.264718536376953125e3), SC_(0.17884232906826524447185414852294643372537962801178e156),
SC_(0.57e2), SC_(0.62944732666015625e3), SC_(0.49948263676019952928838146649270004499157772826431e177),
SC_(0.57e2), SC_(0.67001715087890625e3), SC_(0.17572564071949802842269744081820746771877926177782e179),
SC_(0.57e2), SC_(0.8115838623046875e3), SC_(0.97765928672497151482926812987129698670202679297201e183),
SC_(0.57e2), SC_(0.826751708984375e3), SC_(0.28092052643116613825516813603329050857884446218931e184),
SC_(0.57e2), SC_(0.915013671875e3), SC_(0.91131401181535063754738627124893068439463063019439e186),
SC_(0.57e2), SC_(0.92977703857421875e3), SC_(0.22693495921347868926954075794146960262148934686144e187),
SC_(0.57e2), SC_(0.935389892578125e3), SC_(0.31981291103834949752057837490286659313504601339537e187),
SC_(0.57e2), SC_(0.93773553466796875e3), SC_(0.3688900263643316286828693487885916009055229488776e187),
SC_(0.57e2), SC_(0.9857625732421875e3), SC_(0.63588067294915941815083020546700816691123140834824e188),
SC_(0.57e2), SC_(0.99292266845703125e3), SC_(0.96058872887019210683457681330939837205699369069038e188),
SC_(0.58e2), SC_(-0.804919189453125e3), SC_(0.98359886093734917799148104471362134113448742301714e186),
SC_(0.58e2), SC_(-0.7460263671875e3), SC_(0.11990493446843606374834114171768752791672975254446e185),
SC_(0.58e2), SC_(-0.72904595947265625e3), SC_(0.31539079003887667778314531807612639455207724902675e184),
SC_(0.58e2), SC_(-0.623236083984375e3), SC_(0.35372503594266224135242856515913702867323328261754e180),
SC_(0.58e2), SC_(-0.557931884765625e3), SC_(0.57583102639847172932211962567906075469963542052781e177),
SC_(0.58e2), SC_(-0.4430035400390625e3), SC_(0.89028262292728150610074140793563782680236919953946e171),
SC_(0.58e2), SC_(-0.383665924072265625e3), SC_(0.21212313385377011281086353425598128241401586598077e168),
SC_(0.58e2), SC_(0.9376299285888671875e2), SC_(0.62604280620315333688059710381693364286527097504684e132),
SC_(0.58e2), SC_(0.944411773681640625e2), SC_(0.95219979030929997425749816310432879664361450597778e132),
SC_(0.58e2), SC_(0.264718536376953125e3), SC_(0.94647234913352100793292091066282848088891601986906e158),
SC_(0.58e2), SC_(0.62944732666015625e3), SC_(0.62875078668132942835299336264682658691294193188921e180),
SC_(0.58e2), SC_(0.67001715087890625e3), SC_(0.23546343591932925637627633040847742798191272458582e182),
SC_(0.58e2), SC_(0.8115838623046875e3), SC_(0.1586836332975899142098791524978601596019926315731e187),
SC_(0.58e2), SC_(0.826751708984375e3), SC_(0.4644836819071084866920807074412876527322435540979e187),
SC_(0.58e2), SC_(0.915013671875e3), SC_(0.16676727889331262695178791842169909031457948784922e190),
SC_(0.58e2), SC_(0.92977703857421875e3), SC_(0.4219839159500762095101501614050659421526810441788e190),
SC_(0.58e2), SC_(0.935389892578125e3), SC_(0.59828003988949705942467519636630498279885402269671e190),
SC_(0.58e2), SC_(0.93773553466796875e3), SC_(0.6918201486186995412987998601049879246333891924841e190),
SC_(0.58e2), SC_(0.9857625732421875e3), SC_(0.12536179671332495944243061484163599674602312949226e192),
SC_(0.58e2), SC_(0.99292266845703125e3), SC_(0.19075255025241690115123922486625852876773950080745e192),
SC_(0.63e2), SC_(-0.804919189453125e3), SC_(-0.10632339781549610479619041406969505999094943001127e203),
SC_(0.63e2), SC_(-0.7460263671875e3), SC_(-0.88642268599629660190193212265296202307985906354271e200),
SC_(0.63e2), SC_(-0.72904595947265625e3), SC_(-0.20780258561878800838820505487610226573992568239933e200),
SC_(0.63e2), SC_(-0.623236083984375e3), SC_(-0.10639249520755456192441242211860915411315791499976e196),
SC_(0.63e2), SC_(-0.557931884765625e3), SC_(-0.99573011685276296405964197038004635064052319284641e192),
SC_(0.63e2), SC_(-0.4430035400390625e3), SC_(-0.48571536473640903389946459864193429311269021644027e186),
SC_(0.63e2), SC_(-0.383665924072265625e3), SC_(-0.56371743060385144846172065591557429748970112940914e182),
SC_(0.63e2), SC_(0.9376299285888671875e2), SC_(0.14271302095518395281543621141977089654954772619788e144),
SC_(0.63e2), SC_(0.944411773681640625e2), SC_(0.22508389703746523206446686216061289081224009447363e144),
SC_(0.63e2), SC_(0.264718536376953125e3), SC_(0.39287053618749596805247838834868920108072746443261e172),
SC_(0.63e2), SC_(0.62944732666015625e3), SC_(0.19872890857509752124510053434485063729806672066544e196),
SC_(0.63e2), SC_(0.67001715087890625e3), SC_(0.10170865885145417099920546695659459436546383064557e198),
SC_(0.63e2), SC_(0.8115838623046875e3), SC_(0.17875171562625846347044457253137830450493155571305e203),
SC_(0.63e2), SC_(0.826751708984375e3), SC_(0.57398511841594632428896306873234439485078800626987e203),
SC_(0.63e2), SC_(0.915013671875e3), SC_(0.34223224444163024879350378835610921837107268568578e206),
SC_(0.63e2), SC_(0.92977703857421875e3), SC_(0.93813340474969400259457231849952645213403537063766e206),
SC_(0.63e2), SC_(0.935389892578125e3), SC_(0.13707031097909198997249615373069943591630589477967e207),
SC_(0.63e2), SC_(0.93773553466796875e3), SC_(0.16049849565534916612881402821512234443315362144539e207),
SC_(0.63e2), SC_(0.9857625732421875e3), SC_(0.37334450988860541714846867055901320093308859706429e208),
SC_(0.63e2), SC_(0.99292266845703125e3), SC_(0.58902181682496407079087992188679937502927943188616e208),
SC_(0.64e2), SC_(-0.804919189453125e3), SC_(0.17115516418393134930956957812660695576555555762758e206),
SC_(0.64e2), SC_(-0.7460263671875e3), SC_(0.13225145321763463912506947704427473546594227919316e204),
SC_(0.64e2), SC_(-0.72904595947265625e3), SC_(0.30297731266319142519300755555505275478042104969272e203),
SC_(0.64e2), SC_(-0.623236083984375e3), SC_(0.13260452858231441701364025090498088686052853448746e199),
SC_(0.64e2), SC_(-0.557931884765625e3), SC_(0.11109867155607531886714022377600211420414450985886e196),
SC_(0.64e2), SC_(-0.4430035400390625e3), SC_(0.43027816705124422567335810872343924647776816168804e189),
SC_(0.64e2), SC_(-0.383665924072265625e3), SC_(0.43246575293235977119550453324173254248977085615388e185),
SC_(0.64e2), SC_(0.9376299285888671875e2), SC_(0.26666169562221769162394467872454407158823797408949e146),
SC_(0.64e2), SC_(0.944411773681640625e2), SC_(0.42363701592310910625385021135765655947792198743379e146),
SC_(0.64e2), SC_(0.264718536376953125e3), SC_(0.20790668653430943824657625408670573026507147506956e175),
SC_(0.64e2), SC_(0.62944732666015625e3), SC_(0.25015886856901675365191238194104964033185766836862e199),
SC_(0.64e2), SC_(0.67001715087890625e3), SC_(0.13628352758104430128024379960258832981315670559497e201),
SC_(0.64e2), SC_(0.8115838623046875e3), SC_(0.29013013909125825894222647618781410860190657751511e206),
SC_(0.64e2), SC_(0.826751708984375e3), SC_(0.94904261445892845427164871048618979106779458453012e206),
SC_(0.64e2), SC_(0.915013671875e3), SC_(0.62627080118909857764651282371070544817106870626377e209),
SC_(0.64e2), SC_(0.92977703857421875e3), SC_(0.17444462292196609464011437538057068543663586540673e210),
SC_(0.64e2), SC_(0.935389892578125e3), SC_(0.2564191346937588459943377158334215703301569930735e210),
SC_(0.64e2), SC_(0.93773553466796875e3), SC_(0.30099950210351799644573209378329679609266360231058e210),
SC_(0.64e2), SC_(0.9857625732421875e3), SC_(0.7360342283709939198893572318455103257992843130489e211),
SC_(0.64e2), SC_(0.99292266845703125e3), SC_(0.11696688542326119628103847394518779891392342956315e212),
SC_(0.67e2), SC_(-0.804919189453125e3), SC_(-0.71395604865066606122013699661891426203463873068701e215),
SC_(0.67e2), SC_(-0.7460263671875e3), SC_(-0.439214716391687364187564024021732580606512402522e213),
SC_(0.67e2), SC_(-0.72904595947265625e3), SC_(-0.93904227402788407947934394389327512970670916128791e212),
SC_(0.67e2), SC_(-0.623236083984375e3), SC_(-0.25674209768421442693190102856604340847503916248831e208),
SC_(0.67e2), SC_(-0.557931884765625e3), SC_(-0.15431436217922364421260050431856648098623138071202e205),
SC_(0.67e2), SC_(-0.4430035400390625e3), SC_(-0.29911973822576646623652589847208017875520526334749e198),
SC_(0.67e2), SC_(-0.383665924072265625e3), SC_(-0.19526015822885353474843208279944006332888244454282e194),
SC_(0.67e2), SC_(0.9376299285888671875e2), SC_(0.17390093432109562491103911511920483031011929481849e153),
SC_(0.67e2), SC_(0.944411773681640625e2), SC_(0.28235446461762290115209086851319733390024540548019e153),
SC_(0.67e2), SC_(0.264718536376953125e3), SC_(0.30811073596496146740945598370500903220318751173999e183),
SC_(0.67e2), SC_(0.62944732666015625e3), SC_(0.498973159123135317026153053869666153823987778347e208),
SC_(0.67e2), SC_(0.67001715087890625e3), SC_(0.3278662999965262740459597303725252570646839606698e210),
SC_(0.67e2), SC_(0.8115838623046875e3), SC_(0.12405627888491721174744514866737147152869324775397e216),
SC_(0.67e2), SC_(0.826751708984375e3), SC_(0.42898198132773354897094247581039524281956225063702e216),
SC_(0.67e2), SC_(0.915013671875e3), SC_(0.3837817535891570776096316064925826289234604649913e219),
SC_(0.67e2), SC_(0.92977703857421875e3), SC_(0.11215923554489890999502780719902857630724401847727e220),
SC_(0.67e2), SC_(0.935389892578125e3), SC_(0.16786882000412698244055579620069098918136636351948e220),
SC_(0.67e2), SC_(0.93773553466796875e3), SC_(0.19854032506834645795880992848204146407286886570974e220),
SC_(0.67e2), SC_(0.9857625732421875e3), SC_(0.56397700344853850069466092015119332034498084181404e221),
SC_(0.67e2), SC_(0.99292266845703125e3), SC_(0.91591725002034144260314292567223030779705284774582e221),
SC_(0.68e2), SC_(-0.804919189453125e3), SC_(0.11492944165481977844160639042749889711435705439192e219),
SC_(0.68e2), SC_(-0.7460263671875e3), SC_(0.65529207072689878516628373246771524546998394796728e216),
SC_(0.68e2), SC_(-0.72904595947265625e3), SC_(0.13691236470932295418206009271231802321826433996401e216),
SC_(0.68e2), SC_(-0.623236083984375e3), SC_(0.31999427611473638064153349246682256767532212572302e211),
SC_(0.68e2), SC_(-0.557931884765625e3), SC_(0.1721752728616940687565723581862597609692534907115e208),
SC_(0.68e2), SC_(-0.4430035400390625e3), SC_(0.26497695928277797274126269348797127034206387419765e201),
SC_(0.68e2), SC_(-0.383665924072265625e3), SC_(0.14979523193992880308778135191580896285724901609253e197),
SC_(0.68e2), SC_(0.9376299285888671875e2), SC_(0.32486210198364986836850518198819815917013154840805e155),
SC_(0.68e2), SC_(0.944411773681640625e2), SC_(0.53130717007794880022412938335190211916976004706358e155),
SC_(0.68e2), SC_(0.264718536376953125e3), SC_(0.16304722685276499354792918086631605049027512979648e186),
SC_(0.68e2), SC_(0.62944732666015625e3), SC_(0.62810152575355789173710546297818953525375445861782e211),
SC_(0.68e2), SC_(0.67001715087890625e3), SC_(0.43931930018461310588579182708322391145380014657504e213),
SC_(0.68e2), SC_(0.8115838623046875e3), SC_(0.20135390598861294342717207643575046227436307960836e219),
SC_(0.68e2), SC_(0.826751708984375e3), SC_(0.70928840597252373257415593809153908579367912600248e219),
SC_(0.68e2), SC_(0.915013671875e3), SC_(0.70230300036076744196859829023426726976063282233909e222),
SC_(0.68e2), SC_(0.92977703857421875e3), SC_(0.2085580812121490632054276902743441722437005132514e223),
SC_(0.68e2), SC_(0.935389892578125e3), SC_(0.31403357047962017949167805427442757459524063192189e223),
SC_(0.68e2), SC_(0.93773553466796875e3), SC_(0.37234244977852621303836114362570239474544522838737e223),
SC_(0.68e2), SC_(0.9857625732421875e3), SC_(0.11118565108245626237683701654760798812770117180759e225),
SC_(0.68e2), SC_(0.99292266845703125e3), SC_(0.18188081940210288468029442085277750466942046125126e225),
SC_(0.69e2), SC_(-0.804919189453125e3), SC_(-0.1850081162399338654500028296297913252183226453783e222),
SC_(0.69e2), SC_(-0.7460263671875e3), SC_(-0.97767059274089595678968982337826854278140139586519e219),
SC_(0.69e2), SC_(-0.72904595947265625e3), SC_(-0.19961804161143040928554705782175334155063670416805e219),
SC_(0.69e2), SC_(-0.623236083984375e3), SC_(-0.39882904216104119883607723276479909045844467958239e214),
SC_(0.69e2), SC_(-0.557931884765625e3), SC_(-0.19210316224226509857981603548527956113322666380888e211),
SC_(0.69e2), SC_(-0.4430035400390625e3), SC_(-0.23473078169771562662136461616843138538409966193101e204),
SC_(0.69e2), SC_(-0.383665924072265625e3), SC_(-0.11491609678618516149736741904351620655468528386497e200),
SC_(0.69e2), SC_(0.9376299285888671875e2), SC_(0.60683580626155093065325198848663480816576016092558e157),
SC_(0.69e2), SC_(0.944411773681640625e2), SC_(0.99970547300737778074794585861930502873180772144862e157),
SC_(0.69e2), SC_(0.264718536376953125e3), SC_(0.86281343445478761898014189584430395982291880632205e188),
SC_(0.69e2), SC_(0.62944732666015625e3), SC_(0.79064579216384384919861590442204758056478775930199e214),
SC_(0.69e2), SC_(0.67001715087890625e3), SC_(0.58865834185481932389898790561772677853802379658932e216),
SC_(0.69e2), SC_(0.8115838623046875e3), SC_(0.32681428977081852902063701892528533163973331914428e222),
SC_(0.69e2), SC_(0.826751708984375e3), SC_(0.11727524620517137714481833672797036884220596207432e223),
SC_(0.69e2), SC_(0.915013671875e3), SC_(0.1285181499939382408174721290089724705670081991561e226),
SC_(0.69e2), SC_(0.92977703857421875e3), SC_(0.38780977658427262634355280276612655888568370486454e226),
SC_(0.69e2), SC_(0.935389892578125e3), SC_(0.58746482535419337038893161712202335100520637411516e226),
SC_(0.69e2), SC_(0.93773553466796875e3), SC_(0.69829049096108586661576816358605949519674563343367e226),
SC_(0.69e2), SC_(0.9857625732421875e3), SC_(0.21919763695005329034056321076749362840532324690225e228),
SC_(0.69e2), SC_(0.99292266845703125e3), SC_(0.36117472060917448197562379204160182702204274274195e228),
};
#undef SC_

285
test/laguerre2.ipp Normal file
View File

@ -0,0 +1,285 @@
#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
static const boost::array<boost::array<T, 3>, 280> laguerre2 = {
SC_(0.5e1), SC_(0.9754039764404296875e2), SC_(-0.56218428868911115998451316426215010600803852349048e8),
SC_(0.5e1), SC_(0.12698681640625e3), SC_(-0.2243354877625806499089339248835065869040287604245e9),
SC_(0.5e1), SC_(0.1354770050048828125e3), SC_(-0.31418973293934559300911242611564538290439848722478e9),
SC_(0.5e1), SC_(0.1883819732666015625e3), SC_(-0.17256344438562512861154328485542977773202418102338e10),
SC_(0.5e1), SC_(0.2210340576171875e3), SC_(-0.39170586692926680364193521563384606561329196831404e10),
SC_(0.5e1), SC_(0.27849822998046875e3), SC_(-0.12743797194803555297871516510157023166259117561797e11),
SC_(0.5e1), SC_(0.30816705322265625e3), SC_(-0.21330001890239721242857731991140245635183835676285e11),
SC_(0.5e1), SC_(0.5468814697265625e3), SC_(-0.38928352555423736374909603306210170085670252415611e12),
SC_(0.5e1), SC_(0.5472205810546875e3), SC_(-0.39050320967058708332723880470821630124002299400132e12),
SC_(0.5e1), SC_(0.6323592529296875e3), SC_(-0.8097387851220286833483200510030936982898650914701e12),
SC_(0.5e1), SC_(0.81472369384765625e3), SC_(-0.29004794312410106580901353153584987792805041014836e13),
SC_(0.5e1), SC_(0.835008544921875e3), SC_(-0.32824640180206380842810590985413965806061220575884e13),
SC_(0.5e1), SC_(0.90579193115234375e3), SC_(-0.49421323240476384503475902217971923134518824327159e13),
SC_(0.5e1), SC_(0.9133758544921875e3), SC_(-0.51537136874727263493269087352302138644536549927366e13),
SC_(0.5e1), SC_(0.9575068359375e3), SC_(-0.65333402285178696166233025823588675962128036189824e13),
SC_(0.5e1), SC_(0.96488848876953125e3), SC_(-0.67904577991104770306176706554532355404413293600378e13),
SC_(0.5e1), SC_(0.9676949462890625e3), SC_(-0.68903095684447650874743766361869788199054585412876e13),
SC_(0.5e1), SC_(0.9688677978515625e3), SC_(-0.69323852072435892067304941218115151610034557760898e13),
SC_(0.5e1), SC_(0.99288128662109375e3), SC_(-0.78400756116163888448805990221667549169323386803558e13),
SC_(0.5e1), SC_(0.9964613037109375e3), SC_(-0.79831715395647963750699081595768764433417262009011e13),
SC_(0.6e1), SC_(0.9754039764404296875e2), SC_(0.80820995722555766966204481326428921093819853380883e9),
SC_(0.6e1), SC_(0.12698681640625e3), SC_(0.43287285333593211699487383676400548034517465653989e10),
SC_(0.6e1), SC_(0.1354770050048828125e3), SC_(0.65078719322668723671436292885961437403753159577959e10),
SC_(0.6e1), SC_(0.1883819732666015625e3), SC_(0.50975971206548972048503974573840505796401940705308e11),
SC_(0.6e1), SC_(0.2210340576171875e3), SC_(0.13704228670315682904098855918609456694715553605731e12),
SC_(0.6e1), SC_(0.27849822998046875e3), SC_(0.56796012600833411397117536544899859778691289306697e12),
SC_(0.6e1), SC_(0.30816705322265625e3), SC_(0.10561318402049538938483073960821297722447423948919e13),
SC_(0.6e1), SC_(0.5468814697265625e3), SC_(0.34765288907987505446684019181571310232694381424255e14),
SC_(0.6e1), SC_(0.5472205810546875e3), SC_(0.34896286395332650547095052626160857783947143332365e14),
SC_(0.6e1), SC_(0.6323592529296875e3), SC_(0.83851035075753307874674729684024391015233495095035e14),
SC_(0.6e1), SC_(0.81472369384765625e3), SC_(0.38851567401648686934604173193933429726823924901636e15),
SC_(0.6e1), SC_(0.835008544921875e3), SC_(0.45077984162776358272899308358214843622672411937698e15),
SC_(0.6e1), SC_(0.90579193115234375e3), SC_(0.73700705849391831486587833923818658629022423687651e15),
SC_(0.6e1), SC_(0.9133758544921875e3), SC_(0.77507405395421988441046439866170936792437945158589e15),
SC_(0.6e1), SC_(0.9575068359375e3), SC_(0.10306131640131364207923517549718197693249532864712e16),
SC_(0.6e1), SC_(0.96488848876953125e3), SC_(0.10795269882491233868704393921117749304908016202882e16),
SC_(0.6e1), SC_(0.9676949462890625e3), SC_(0.10986241099950023947147288133858596641922819961585e16),
SC_(0.6e1), SC_(0.9688677978515625e3), SC_(0.11066879989104805588335103036958066630483588267248e16),
SC_(0.6e1), SC_(0.99288128662109375e3), SC_(0.12829707187512957309933510816037300428272415242332e16),
SC_(0.6e1), SC_(0.9964613037109375e3), SC_(0.13111507527148485594511524621819926397653608283432e16),
SC_(0.7e1), SC_(0.9754039764404296875e2), SC_(-0.97127257986443053526417273414388194974570607385935e10),
SC_(0.7e1), SC_(0.12698681640625e3), SC_(-0.70295995953992755265946027355243029063331213138355e11),
SC_(0.7e1), SC_(0.1354770050048828125e3), SC_(-0.11359707497453571901517561189586228142270903451764e12),
SC_(0.7e1), SC_(0.1883819732666015625e3), SC_(-0.12757018018175550435561074775586631022961625260251e13),
SC_(0.7e1), SC_(0.2210340576171875e3), SC_(-0.40694229451399857384340512241235666223436876850873e13),
SC_(0.7e1), SC_(0.27849822998046875e3), SC_(-0.21530849338789697137868260826250260284211997386438e14),
SC_(0.7e1), SC_(0.30816705322265625e3), SC_(-0.44515334725225153366608120310697334717448915933102e14),
SC_(0.7e1), SC_(0.5468814697265625e3), SC_(-0.26511725480730864342211918127699219873844104369464e16),
SC_(0.7e1), SC_(0.5472205810546875e3), SC_(-0.26628530536439102004691253957341772339263353080574e16),
SC_(0.7e1), SC_(0.6323592529296875e3), SC_(-0.74184365727412655859533662592614553371253178512618e16),
SC_(0.7e1), SC_(0.81472369384765625e3), SC_(-0.44494974059088898431029461327818954373425462460445e17),
SC_(0.7e1), SC_(0.835008544921875e3), SC_(-0.52932169558920439326767431099304484428916542881846e17),
SC_(0.7e1), SC_(0.90579193115234375e3), SC_(-0.93994900318821345331729187319793077343112028474933e17),
SC_(0.7e1), SC_(0.9133758544921875e3), SC_(-0.99689577334518532843192829626785299168262387676718e17),
SC_(0.7e1), SC_(0.9575068359375e3), SC_(-0.13905456836803030189577542899606637451372078172117e18),
SC_(0.7e1), SC_(0.96488848876953125e3), SC_(-0.14679265295479813112392016144737523708985227232103e18),
SC_(0.7e1), SC_(0.9676949462890625e3), SC_(-0.1498299348323053192424220347660666492880084886241e18),
SC_(0.7e1), SC_(0.9688677978515625e3), SC_(-0.1511151180165814270743545859553488460065643424192e18),
SC_(0.7e1), SC_(0.99288128662109375e3), SC_(-0.17958742259050562450977760208841036922467251612191e18),
SC_(0.7e1), SC_(0.9964613037109375e3), SC_(-0.18420258994246922874363794194214384956627167378336e18),
SC_(0.9e1), SC_(0.9754039764404296875e2), SC_(-0.88182421198196903206078231205307338249650868832064e12),
SC_(0.9e1), SC_(0.12698681640625e3), SC_(-0.11916795524742195589589499951943501492084977319524e14),
SC_(0.9e1), SC_(0.1354770050048828125e3), SC_(-0.22344296397638552568674348465205379613306362764566e14),
SC_(0.9e1), SC_(0.1883819732666015625e3), SC_(-0.52450137180856257840726851581544345839939827576715e15),
SC_(0.9e1), SC_(0.2210340576171875e3), SC_(-0.23696400879105564578477838259302061169946747558952e16),
SC_(0.9e1), SC_(0.27849822998046875e3), SC_(-0.2057154069965741250232756687863533313808633945305e17),
SC_(0.9e1), SC_(0.30816705322265625e3), SC_(-0.52706299238279057416545711578165684905744102859115e17),
SC_(0.9e1), SC_(0.5468814697265625e3), SC_(-0.10373504112979138086350224207396056466588729804516e20),
SC_(0.9e1), SC_(0.5472205810546875e3), SC_(-0.10432528153473136570046121526504633952860788360435e20),
SC_(0.9e1), SC_(0.6323592529296875e3), SC_(-0.39130711594017381807257779551743819698560088375668e20),
SC_(0.9e1), SC_(0.81472369384765625e3), SC_(-0.39417960379424891896054061064677368280593070059738e21),
SC_(0.9e1), SC_(0.835008544921875e3), SC_(-0.49304936215932770879646299983700202838606715074253e21),
SC_(0.9e1), SC_(0.90579193115234375e3), SC_(-0.10334424643188761615583739852552783075006729859411e22),
SC_(0.9e1), SC_(0.9133758544921875e3), SC_(-0.11148197370742169335891238953970561388157054787912e22),
SC_(0.9e1), SC_(0.9575068359375e3), SC_(-0.17117643007530823467479808245288438345428761729566e22),
SC_(0.9e1), SC_(0.96488848876953125e3), SC_(-0.18354699865344307677650783008677515871579118218563e22),
SC_(0.9e1), SC_(0.9676949462890625e3), SC_(-0.18845473402555581720266649838772564615998761460957e22),
SC_(0.9e1), SC_(0.9688677978515625e3), SC_(-0.19054005396362814451214549815853296627845049820834e22),
SC_(0.9e1), SC_(0.99288128662109375e3), SC_(-0.2379990415149925129095832370169236951708289834945e22),
SC_(0.9e1), SC_(0.9964613037109375e3), SC_(-0.2459080438944659678243208011185696524084223075751e22),
SC_(0.1e2), SC_(0.9754039764404296875e2), SC_(0.68363285133790726530343716793230261010875353582126e13),
SC_(0.1e2), SC_(0.12698681640625e3), SC_(0.12780346463262387447059318050624889749180569846779e15),
SC_(0.1e2), SC_(0.1354770050048828125e3), SC_(0.25872514080382692007093467972049926364267470684414e15),
SC_(0.1e2), SC_(0.1883819732666015625e3), SC_(0.88592647116085797035522910089956721973984668164933e16),
SC_(0.1e2), SC_(0.2210340576171875e3), SC_(0.47780583657418526717172656140732828044696456184005e17),
SC_(0.1e2), SC_(0.27849822998046875e3), SC_(0.5331900363941173927045807539300156181950112131739e18),
SC_(0.1e2), SC_(0.30816705322265625e3), SC_(0.1522625182085023713301500547784155501632626718952e19),
SC_(0.1e2), SC_(0.5468814697265625e3), SC_(0.54743944979053298043671516089410722749901760176246e21),
SC_(0.1e2), SC_(0.5472205810546875e3), SC_(0.55090819795558138013756209863788327369928434403532e21),
SC_(0.1e2), SC_(0.6323592529296875e3), SC_(0.23996032369722453090472613853380539435510387147265e22),
SC_(0.1e2), SC_(0.81472369384765625e3), SC_(0.3136180217844875856210532455123015078868701049189e23),
SC_(0.1e2), SC_(0.835008544921875e3), SC_(0.40228366570492581887821535861784155838787837068917e23),
SC_(0.1e2), SC_(0.90579193115234375e3), SC_(0.91635424833598371783927550180351600428358564325103e23),
SC_(0.1e2), SC_(0.9133758544921875e3), SC_(0.99696710750634214960945727157571811141128625200737e23),
SC_(0.1e2), SC_(0.9575068359375e3), SC_(0.16063550635202090204108065161018414051528464203492e24),
SC_(0.1e2), SC_(0.96488848876953125e3), SC_(0.17359930740134722080034670472759394163212119095913e24),
SC_(0.1e2), SC_(0.9676949462890625e3), SC_(0.17876999613951749665069145752320997385967469183553e24),
SC_(0.1e2), SC_(0.9688677978515625e3), SC_(0.18097164614992113510626725680969708377447448480682e24),
SC_(0.1e2), SC_(0.99288128662109375e3), SC_(0.23176305706781278086716530835422934581699500133195e24),
SC_(0.1e2), SC_(0.9964613037109375e3), SC_(0.24034525959278928207216174690071010414578307080004e24),
SC_(0.12e2), SC_(0.9754039764404296875e2), SC_(0.28423596453596289989288243804391945134145720558303e15),
SC_(0.12e2), SC_(0.12698681640625e3), SC_(0.10459814166195030538123822665486701112739697771504e17),
SC_(0.12e2), SC_(0.1354770050048828125e3), SC_(0.24809961434471699525764703789755549215916991317009e17),
SC_(0.12e2), SC_(0.1883819732666015625e3), SC_(0.18432001419367650072987948319941023048367873500947e19),
SC_(0.12e2), SC_(0.2210340576171875e3), SC_(0.1425973246788753700961735353907762908357118808801e20),
SC_(0.12e2), SC_(0.27849822998046875e3), SC_(0.2648612039362625663502673525170355605919867648175e21),
SC_(0.12e2), SC_(0.30816705322265625e3), SC_(0.94207669859466343227329712354536538487224976251934e21),
SC_(0.12e2), SC_(0.5468814697265625e3), SC_(0.11416571288332122735760393265732692757218749094333e25),
SC_(0.12e2), SC_(0.5472205810546875e3), SC_(0.11503772311632575693339455966945777225801334633802e25),
SC_(0.12e2), SC_(0.6323592529296875e3), SC_(0.67682817776609426691165241302499154756436610551448e25),
SC_(0.12e2), SC_(0.81472369384765625e3), SC_(0.14925113607158546323278613008648061457814853288569e27),
SC_(0.12e2), SC_(0.835008544921875e3), SC_(0.20137386892159007353644931592676274228203562748065e27),
SC_(0.12e2), SC_(0.90579193115234375e3), SC_(0.5420836690576459643271287711084458171666413772841e27),
SC_(0.12e2), SC_(0.9133758544921875e3), SC_(0.59993957244253616872158941998241312745401619591825e27),
SC_(0.12e2), SC_(0.9575068359375e3), SC_(0.10647596238911981020997681650094944029068747024397e28),
SC_(0.12e2), SC_(0.96488848876953125e3), SC_(0.11689245133960734996588218891178658140879248121018e28),
SC_(0.12e2), SC_(0.9676949462890625e3), SC_(0.1210919349676828488255310851429670495905368349189e28),
SC_(0.12e2), SC_(0.9688677978515625e3), SC_(0.12288756773958775796104364572786513910596933472569e28),
SC_(0.12e2), SC_(0.99288128662109375e3), SC_(0.16546282318562297815258073400590724827059252937711e28),
SC_(0.12e2), SC_(0.9964613037109375e3), SC_(0.17285799188257724376176157543505720262452819750787e28),
SC_(0.13e2), SC_(0.9754039764404296875e2), SC_(-0.15428758327644125855292818843401569330741211168799e16),
SC_(0.13e2), SC_(0.12698681640625e3), SC_(-0.80932019891477222056421384256018993299108719527302e17),
SC_(0.13e2), SC_(0.1354770050048828125e3), SC_(-0.20837410443315613138060768891043617064680947230019e18),
SC_(0.13e2), SC_(0.1883819732666015625e3), SC_(-0.23041054581252941723867939936368964100938528845819e20),
SC_(0.13e2), SC_(0.2210340576171875e3), SC_(-0.21423018746076790532404088387932487576331298937838e21),
SC_(0.13e2), SC_(0.27849822998046875e3), SC_(-0.51532533774072113882814592946620765040457802277968e22),
SC_(0.13e2), SC_(0.30816705322265625e3), SC_(-0.20483743080238166781000622328713314260809968894106e23),
SC_(0.13e2), SC_(0.5468814697265625e3), SC_(-0.45807365658624583832010377136032803302289663432229e26),
SC_(0.13e2), SC_(0.5472205810546875e3), SC_(-0.46187271245529335025545254036134744857983676852153e26),
SC_(0.13e2), SC_(0.6323592529296875e3), SC_(-0.31609066199338067621059954633340634981067166015523e27),
SC_(0.13e2), SC_(0.81472369384765625e3), SC_(-0.90646159399960206374430498227033140094018657322162e28),
SC_(0.13e2), SC_(0.835008544921875e3), SC_(-0.12544525904974860594398806285643930469586501530176e29),
SC_(0.13e2), SC_(0.90579193115234375e3), SC_(-0.36721114150131761392182317349435587031972338255613e29),
SC_(0.13e2), SC_(0.9133758544921875e3), SC_(-0.40990368279471938330945117709437735030275122009372e29),
SC_(0.13e2), SC_(0.9575068359375e3), SC_(-0.76363964177698049737267049485284900489556590512731e29),
SC_(0.13e2), SC_(0.96488848876953125e3), SC_(-0.84498458446138963220029970565385666164418294081343e29),
SC_(0.13e2), SC_(0.9676949462890625e3), SC_(-0.87795611207460053386552725647471806319942125987039e29),
SC_(0.13e2), SC_(0.9688677978515625e3), SC_(-0.8920838990438100428530933894339887359239837726742e29),
SC_(0.13e2), SC_(0.99288128662109375e3), SC_(-0.12317215421451917683521586907330444625122803485384e30),
SC_(0.13e2), SC_(0.9964613037109375e3), SC_(-0.12915328980215273183944018711642638080541797445587e30),
SC_(0.22e2), SC_(0.9754039764404296875e2), SC_(0.53519155913211797117581773427472182753318968475881e20),
SC_(0.22e2), SC_(0.12698681640625e3), SC_(0.1482457856077086365579374192841961715732300978721e24),
SC_(0.22e2), SC_(0.1354770050048828125e3), SC_(0.89811862298211814442148491712564277702535951184385e24),
SC_(0.22e2), SC_(0.1883819732666015625e3), SC_(0.53105205911452770051774832885086163468318926564375e28),
SC_(0.22e2), SC_(0.2210340576171875e3), SC_(0.29181385527902060628744587044238065323351755162445e30),
SC_(0.22e2), SC_(0.27849822998046875e3), SC_(0.81926383490939917849013990628644623870335123644678e32),
SC_(0.22e2), SC_(0.30816705322265625e3), SC_(0.92559256235836508755914064074846859174102223189673e33),
SC_(0.22e2), SC_(0.5468814697265625e3), SC_(0.60582355648139314032220922737227351534361291594301e39),
SC_(0.22e2), SC_(0.5472205810546875e3), SC_(0.61450841386618840767372822554085603258088547262603e39),
SC_(0.22e2), SC_(0.6323592529296875e3), SC_(0.16828697247343434191793544661262546124370931417734e41),
SC_(0.22e2), SC_(0.81472369384765625e3), SC_(0.53252364000408391115685655166260738513117912209307e43),
SC_(0.22e2), SC_(0.835008544921875e3), SC_(0.92881368091496514903641566811539878316737606628203e43),
SC_(0.22e2), SC_(0.90579193115234375e3), SC_(0.58353032082389612678363416640153420485594909764931e44),
SC_(0.22e2), SC_(0.9133758544921875e3), SC_(0.70428883480642630449395417614259444733071066152224e44),
SC_(0.22e2), SC_(0.9575068359375e3), SC_(0.20403604900694297028065932589821789954408762498582e45),
SC_(0.22e2), SC_(0.96488848876953125e3), SC_(0.24257231813723197693329702291105633653538223754681e45),
SC_(0.22e2), SC_(0.9676949462890625e3), SC_(0.25897178141402988728665269659702809950051225843733e45),
SC_(0.22e2), SC_(0.9688677978515625e3), SC_(0.26613428214690454856359092251155501252760949702349e45),
SC_(0.22e2), SC_(0.99288128662109375e3), SC_(0.46186282958538147848573463412585781275986740408896e45),
SC_(0.22e2), SC_(0.9964613037109375e3), SC_(0.50083750837345646151818682810006338938882917955936e45),
SC_(0.26e2), SC_(0.9754039764404296875e2), SC_(0.21972677691719817441756091279246498916850254461527e21),
SC_(0.26e2), SC_(0.12698681640625e3), SC_(0.1075388630949279748826454068162739903189328481612e26),
SC_(0.26e2), SC_(0.1354770050048828125e3), SC_(0.10649057118439433153896298751085699481345412933801e27),
SC_(0.26e2), SC_(0.1883819732666015625e3), SC_(0.5116947616838569524143836973058866982145398777318e31),
SC_(0.26e2), SC_(0.2210340576171875e3), SC_(0.67598194000593044124785906843654997129153545590891e33),
SC_(0.26e2), SC_(0.27849822998046875e3), SC_(0.61788821894450276203672680235188870492927609213655e36),
SC_(0.26e2), SC_(0.30816705322265625e3), SC_(0.1143466221863025445538605244032140245989208384596e38),
SC_(0.26e2), SC_(0.5468814697265625e3), SC_(0.10365782377701183452195461556076353497800893592323e45),
SC_(0.26e2), SC_(0.5472205810546875e3), SC_(0.10543127968944428085136728714429047403339769641033e45),
SC_(0.26e2), SC_(0.6323592529296875e3), SC_(0.54336316553928368949063555184249670518669259521127e46),
SC_(0.26e2), SC_(0.81472369384765625e3), SC_(0.51097552617218427263241448611405994401811535704536e49),
SC_(0.26e2), SC_(0.835008544921875e3), SC_(0.98954520453823509774054797214466944211629878869384e49),
SC_(0.26e2), SC_(0.90579193115234375e3), SC_(0.87786375743747677334359888017430029312432056322196e50),
SC_(0.26e2), SC_(0.9133758544921875e3), SC_(0.10975609743646233178198950358966597197707924620818e51),
SC_(0.26e2), SC_(0.9575068359375e3), SC_(0.38807135479289092313349072980539966631345258500198e51),
SC_(0.26e2), SC_(0.96488848876953125e3), SC_(0.47654821142237731628816607894656922038832987256136e51),
SC_(0.26e2), SC_(0.9676949462890625e3), SC_(0.51503194237863964904639112627180500133770486086125e51),
SC_(0.26e2), SC_(0.9688677978515625e3), SC_(0.53198500654007856666562730301281355378772116339286e51),
SC_(0.26e2), SC_(0.99288128662109375e3), SC_(0.10235016527486692862890189415524722222034128311139e52),
SC_(0.26e2), SC_(0.9964613037109375e3), SC_(0.11268082142512355561240466068867830761377375700468e52),
SC_(0.32e2), SC_(0.9754039764404296875e2), SC_(0.57896844151857557407003122100491148696303115075994e20),
SC_(0.32e2), SC_(0.12698681640625e3), SC_(0.42245682831545366496930901995710141383069638790405e27),
SC_(0.32e2), SC_(0.1354770050048828125e3), SC_(0.12500869474828256329426453946772458815922358559551e29),
SC_(0.32e2), SC_(0.1883819732666015625e3), SC_(0.28266779160071220855863136752236809118289513550655e35),
SC_(0.32e2), SC_(0.2210340576171875e3), SC_(0.16043258633437377313296386512455676335765088879499e38),
SC_(0.32e2), SC_(0.27849822998046875e3), SC_(0.98152083075443552200456383499687746658509404557554e41),
SC_(0.32e2), SC_(0.30816705322265625e3), SC_(0.39660303068870304789061389710467952730805922359184e43),
SC_(0.32e2), SC_(0.5468814697265625e3), SC_(0.2124691778655363299602608193872213697408649234399e52),
SC_(0.32e2), SC_(0.5472205810546875e3), SC_(0.21701146117737990401627817320898898731158045140974e52),
SC_(0.32e2), SC_(0.6323592529296875e3), SC_(0.29453956822267682637622660585710995711330784866261e54),
SC_(0.32e2), SC_(0.81472369384765625e3), SC_(0.14579187010342463619209867543395472012389261100613e58),
SC_(0.32e2), SC_(0.835008544921875e3), SC_(0.33104915961295333458609667123641141490590693664242e58),
SC_(0.32e2), SC_(0.90579193115234375e3), SC_(0.49617254391613681021336977691940022261460402301085e59),
SC_(0.32e2), SC_(0.9133758544921875e3), SC_(0.65447509655180124047279400990868215055245034097822e59),
SC_(0.32e2), SC_(0.9575068359375e3), SC_(0.31314186002835766887651202030265122705420348145384e60),
SC_(0.32e2), SC_(0.96488848876953125e3), SC_(0.40390183129399277888276794404622531827627609452775e60),
SC_(0.32e2), SC_(0.9676949462890625e3), SC_(0.44470349220352623223005295792036557179541953880227e60),
SC_(0.32e2), SC_(0.9688677978515625e3), SC_(0.46291347880797126364720392445817548485904681626203e60),
SC_(0.32e2), SC_(0.99288128662109375e3), SC_(0.10414215853249607927566783846023113314868365327492e61),
SC_(0.32e2), SC_(0.9964613037109375e3), SC_(0.11731839293063017507522289233426225751615807834469e61),
SC_(0.33e2), SC_(0.9754039764404296875e2), SC_(-0.15519766552964914960282162902087252393890944756729e21),
SC_(0.33e2), SC_(0.12698681640625e3), SC_(-0.49834394329409786429107636406724247060325054488444e27),
SC_(0.33e2), SC_(0.1354770050048828125e3), SC_(-0.19840581047253598115611184022145906036118542457808e29),
SC_(0.33e2), SC_(0.1883819732666015625e3), SC_(-0.98212428153399951310107146404282928611923578181199e35),
SC_(0.33e2), SC_(0.2210340576171875e3), SC_(-0.72578044049144687694845377262857641629094641588691e38),
SC_(0.33e2), SC_(0.27849822998046875e3), SC_(-0.62057397100619303564513894784492557621908539158042e42),
SC_(0.33e2), SC_(0.30816705322265625e3), SC_(-0.28714296782385167119124999018599500804762523101335e44),
SC_(0.33e2), SC_(0.5468814697265625e3), SC_(-0.30888931981090919336348667046948287489524269522361e53),
SC_(0.33e2), SC_(0.5472205810546875e3), SC_(-0.31571691597216716720754649436373448511713945451381e53),
SC_(0.33e2), SC_(0.6323592529296875e3), SC_(-0.50478315840421718669131419020872977517323737909924e55),
SC_(0.33e2), SC_(0.81472369384765625e3), SC_(-0.33062025262205293767486203308022299641518265442287e59),
SC_(0.33e2), SC_(0.835008544921875e3), SC_(-0.77112383731383286471230156867910260520520657245124e59),
SC_(0.33e2), SC_(0.90579193115234375e3), SC_(-0.1262346064599467935961005524047195599692654321956e61),
SC_(0.33e2), SC_(0.9133758544921875e3), SC_(-0.16801567279045565630405655696613192336457136904877e61),
SC_(0.33e2), SC_(0.9575068359375e3), SC_(-0.84582529186776869237021206078881700754491798000552e61),
SC_(0.33e2), SC_(0.96488848876953125e3), SC_(-0.11000226620410340743835989544374720411357868296468e62),
SC_(0.33e2), SC_(0.9676949462890625e3), SC_(-0.12149322908840894133499880791452022966588461024746e62),
SC_(0.33e2), SC_(0.9688677978515625e3), SC_(-0.12663293722507282266407117288015925037770799060973e62),
SC_(0.33e2), SC_(0.99288128662109375e3), SC_(-0.29247499878319565468778047006263649127299274582216e62),
SC_(0.33e2), SC_(0.9964613037109375e3), SC_(-0.33075364818279888462182974219279083273759877224615e62),
SC_(0.36e2), SC_(0.9754039764404296875e2), SC_(-0.14202381258875603292784398243371786895083677644968e21),
SC_(0.36e2), SC_(0.12698681640625e3), SC_(-0.99689260408784512857796674097683890787134923850651e23),
SC_(0.36e2), SC_(0.1354770050048828125e3), SC_(0.33085802053384704162061389949004801316875589574167e29),
SC_(0.36e2), SC_(0.1883819732666015625e3), SC_(0.29691002837109064218075098689453177656242661416649e37),
SC_(0.36e2), SC_(0.2210340576171875e3), SC_(0.50722869577926074483465513588442579657337298353026e40),
SC_(0.36e2), SC_(0.27849822998046875e3), SC_(0.12276018084343264808614960453898425578975135870535e45),
SC_(0.36e2), SC_(0.30816705322265625e3), SC_(0.86176792520194608969749051518980054897501919421191e46),
SC_(0.36e2), SC_(0.5468814697265625e3), SC_(0.77496906300517296899212867022166471009005365376408e56),
SC_(0.36e2), SC_(0.5472205810546875e3), SC_(0.79380346709534996703125888877181202810222361959297e56),
SC_(0.36e2), SC_(0.6323592529296875e3), SC_(0.20837628323063930783612574671644907853428390635937e59),
SC_(0.36e2), SC_(0.81472369384765625e3), SC_(0.31805284832302734783735872178451062267986916005535e63),
SC_(0.36e2), SC_(0.835008544921875e3), SC_(0.80427224577995045297081384061933456722295034711368e63),
SC_(0.36e2), SC_(0.90579193115234375e3), SC_(0.17180125938368536870586199334103942944296763636498e65),
SC_(0.36e2), SC_(0.9133758544921875e3), SC_(0.2349585543781729049082862094571853647181110727758e65),
SC_(0.36e2), SC_(0.9575068359375e3), SC_(0.13788032216346989091599957999852901194859847097388e66),
SC_(0.36e2), SC_(0.96488848876953125e3), SC_(0.18383754088256510557951005527578044897458936835611e66),
SC_(0.36e2), SC_(0.9676949462890625e3), SC_(0.20496108373672385020966386552222912655862108987654e66),
SC_(0.36e2), SC_(0.9688677978515625e3), SC_(0.21447176171446511024838576925006696393416059852805e66),
SC_(0.36e2), SC_(0.99288128662109375e3), SC_(0.53619191227443818889184097649341805455543103147757e66),
SC_(0.36e2), SC_(0.9964613037109375e3), SC_(0.6134634193224111642857607073780448563124536964454e66),
SC_(0.38e2), SC_(0.9754039764404296875e2), SC_(0.13026109621262939918139850088931337407072881569374e21),
SC_(0.38e2), SC_(0.12698681640625e3), SC_(-0.39045802697684580087249595226480504736900650572604e27),
SC_(0.38e2), SC_(0.1354770050048828125e3), SC_(0.4703084156408515882792903403585270483597230661564e28),
SC_(0.38e2), SC_(0.1883819732666015625e3), SC_(0.21811950666425589665298269088166544127028329061958e38),
SC_(0.38e2), SC_(0.2210340576171875e3), SC_(0.68226335876612312689262066243026383595759661918497e41),
SC_(0.38e2), SC_(0.27849822998046875e3), SC_(0.3417431296914681619225852746415756851618849310483e46),
SC_(0.38e2), SC_(0.30816705322265625e3), SC_(0.31970819524145633109548465679514234447503951190819e48),
SC_(0.38e2), SC_(0.5468814697265625e3), SC_(0.12178742579145686663348414006307088453127654992376e59),
SC_(0.38e2), SC_(0.5472205810546875e3), SC_(0.12492841620300639426815182320836485753685517201536e59),
SC_(0.38e2), SC_(0.6323592529296875e3), SC_(0.45810661530573839216333825165973798523285084973924e61),
SC_(0.38e2), SC_(0.81472369384765625e3), SC_(0.12351347140304796554466586331231292139128275112892e66),
SC_(0.38e2), SC_(0.835008544921875e3), SC_(0.32975853153845151581573454625890910497305801446349e66),
SC_(0.38e2), SC_(0.90579193115234375e3), SC_(0.84216312274962467518837779101216307869158288654706e67),
SC_(0.38e2), SC_(0.9133758544921875e3), SC_(0.11729374185740406136241147249355309364674121773484e68),
SC_(0.38e2), SC_(0.9575068359375e3), SC_(0.76287452793236059887210998415733522854114359820263e68),
SC_(0.38e2), SC_(0.96488848876953125e3), SC_(0.10342759141411866835170522110986503338234205828331e69),
SC_(0.38e2), SC_(0.9676949462890625e3), SC_(0.11604186211493955868813819686880547173842867350967e69),
SC_(0.38e2), SC_(0.9688677978515625e3), SC_(0.12174646477307642518592858476271949696633470067733e69),
SC_(0.38e2), SC_(0.99288128662109375e3), SC_(0.32098315809650975303906367704092470560267558301581e69),
SC_(0.38e2), SC_(0.9964613037109375e3), SC_(0.37011679718261969297940214190611219199030995011675e69),
SC_(0.39e2), SC_(0.9754039764404296875e2), SC_(-0.81788056310459660065120382039447835033044197049489e20),
SC_(0.39e2), SC_(0.12698681640625e3), SC_(0.22229715039776080683928576767759683825519547792559e27),
SC_(0.39e2), SC_(0.1354770050048828125e3), SC_(0.15550461280029801190156888344119462891700106953436e29),
SC_(0.39e2), SC_(0.1883819732666015625e3), SC_(-0.54226895058411233344275595074274527247091920347531e38),
SC_(0.39e2), SC_(0.2210340576171875e3), SC_(-0.23342183174200163814210714804874246930233709812346e42),
SC_(0.39e2), SC_(0.27849822998046875e3), SC_(-0.17013038203469478431364477259901167967979013129897e47),
SC_(0.39e2), SC_(0.30816705322265625e3), SC_(-0.18429253515276943444879261921619357066598024943888e49),
SC_(0.39e2), SC_(0.5468814697265625e3), SC_(-0.14577093593047894021012074885872239431277128765197e60),
SC_(0.39e2), SC_(0.5472205810546875e3), SC_(-0.14963982369811780116397608759812127691336981298577e60),
SC_(0.39e2), SC_(0.6323592529296875e3), SC_(-0.6492862403071900096406830281442380096038500168606e62),
SC_(0.39e2), SC_(0.81472369384765625e3), SC_(-0.23301820931113238390488179765094297019115309966495e67),
SC_(0.39e2), SC_(0.835008544921875e3), SC_(-0.6393122118320767120277111175042508309950280050084e67),
SC_(0.39e2), SC_(0.90579193115234375e3), SC_(-0.1785926484809201389439108598459489796533771170743e69),
SC_(0.39e2), SC_(0.9133758544921875e3), SC_(-0.25102368049271316850934544583200188325859894245069e69),
SC_(0.39e2), SC_(0.9575068359375e3), SC_(-0.17191430467481203804500407886563167282958450012617e70),
SC_(0.39e2), SC_(0.96488848876953125e3), SC_(-0.2350360204862166230883463530178770075607651772555e70),
SC_(0.39e2), SC_(0.9676949462890625e3), SC_(-0.26453813089044823183666856904573749479668606778886e70),
SC_(0.39e2), SC_(0.9688677978515625e3), SC_(-0.27790958611107454497958236687689216620181150284596e70),
SC_(0.39e2), SC_(0.99288128662109375e3), SC_(-0.75250430660256030378942490914723092683335523198301e70),
SC_(0.39e2), SC_(0.9964613037109375e3), SC_(-0.87109521955089946525219892186343098358449543636311e70),
};
#undef SC_

2245
test/laguerre3.ipp Normal file

File diff suppressed because it is too large Load Diff

145
test/legendre_p.ipp Normal file
View File

@ -0,0 +1,145 @@
#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
static const boost::array<boost::array<T, 4>, 140> legendre_p = {
SC_(3), SC_(-0.804919183254241943359375), SC_(-0.09637879251279735399302410605920296560178428535437), SC_(-0.84585603807674271376114723023136351467791030262194),
SC_(3), SC_(-0.74602639675140380859375), SC_(0.081027074619746344180737168075984167003866787126753), SC_(-0.80282652754865351221792807765781454966620965987346),
SC_(3), SC_(-0.72904598712921142578125), SC_(0.12483445078630286253952851342405305778981983166886), SC_(-0.77778604740049228448138273219369426999256253154477),
SC_(3), SC_(-0.62323606014251708984375), SC_(0.32965574890576083785628027375894100181596968468511), SC_(-0.54513199810739721932916528089324249381856320981233),
SC_(3), SC_(-0.5579319000244140625), SC_(0.40270407973501426077134190961714921286329627037048), SC_(-0.36518655840013507868281802164420656404202160032323),
SC_(3), SC_(-0.44300353527069091796875), SC_(0.44715433191447753543307951822408097264371917844983), SC_(-0.036791936427532285617966259083782977179826877960429),
SC_(3), SC_(-0.38366591930389404296875), SC_(0.43431026413595020613207998332397363761003816762241), SC_(0.12305391050245773781086426664843252339855233834581),
SC_(3), SC_(0.09376299381256103515625), SC_(-0.13858369755095318860018104847528497280961801152444), SC_(0.63165561565784611978985918320060987131739507929363),
SC_(3), SC_(0.0944411754608154296875), SC_(-0.13955592906053357908142302859499928047171124489978), SC_(0.63114960637026901412475946814198954544987429570206),
SC_(3), SC_(0.264718532562255859375), SC_(-0.35070182432271000038054645231433426033618161454797), SC_(0.39637508312826953308089998658220280933868101174524),
SC_(3), SC_(0.62944734096527099609375), SC_(-0.32069719648529449984920462269136209876307930244366), SC_(-0.561319593950734471650860089348537659182887471015),
SC_(3), SC_(0.67001712322235107421875), SC_(-0.25306053375130974366335052634993663112084050226258), SC_(-0.66081564793406011705012545543655510789740391137235),
SC_(3), SC_(0.81158387660980224609375), SC_(0.11903579598709513016345544955329471825677956076106), SC_(-0.84529721625683760880474150426292608647145977571808),
SC_(3), SC_(0.826751708984375), SC_(0.1726224256643575927228084765374660491943359375), SC_(-0.83881729781391507585288129748948101183986537673708),
SC_(3), SC_(0.91501367092132568359375), SC_(0.54271752467888026988712457448701953488523486157646), SC_(-0.58117864722536578272928121147096403274716994164107),
SC_(3), SC_(0.92977702617645263671875), SC_(0.61478093203605979210896718576903619002393952541752), SC_(-0.47601316933958185359002896997987802108555441085956),
SC_(3), SC_(0.93538987636566162109375), SC_(0.6429734865180513243156944550547871042311953715398), SC_(-0.42776266738524467923677588882284251961316602328383),
SC_(3), SC_(0.93773555755615234375), SC_(0.65488632484399120345028300071987814590102061629295), SC_(-0.40599139678289761995855284290619999445381396586062),
SC_(3), SC_(0.98576259613037109375), SC_(0.91608863936432686136610015203984858089825138449669), SC_(0.49911743300628611193386173368321463301956284745397),
SC_(3), SC_(0.99292266368865966796875), SC_(0.95791076106518834501582130387317692843396343960194), SC_(0.90345674705561627727354266945334737890516023119515),
SC_(5), SC_(-0.804919183254241943359375), SC_(0.39312973382980111956333250391790337182567613112521), SC_(-0.30797722800923861903533473474484308050729533072248),
SC_(5), SC_(-0.74602639675140380859375), SC_(0.4144532363564166856565791456062465926118819061177), SC_(0.036750999302184486102911681342167235245694654813727),
SC_(5), SC_(-0.72904598712921142578125), SC_(0.40170549167165668611417028849058086074027575851596), SC_(0.12520396031165822675600338672833850727710544023424),
SC_(5), SC_(-0.62323606014251708984375), SC_(0.20914641668663499200234579439954172182527145448352), SC_(0.50490192751447088632949650396821036768725468002192),
SC_(5), SC_(-0.5579319000244140625), SC_(0.047804048918209109846499488120279081448233535491368), SC_(0.58010824986594190037517814500067698165903587991196),
SC_(5), SC_(-0.44300353527069091796875), SC_(-0.20426834340719068505951661242682923196540890996203), SC_(0.46263002281764960331577712774593562735119375851165),
SC_(5), SC_(-0.38366591930389404296875), SC_(-0.29067957811088193540744987867754401309946084909752), SC_(0.31516732667905959819121026003137539434799697742685),
SC_(5), SC_(0.09376299381256103515625), SC_(0.16864990731338440263027533820227754755159887863031), SC_(-0.46423435769108284256474941359029876833900529649787),
SC_(5), SC_(0.0944411754608154296875), SC_(0.1697659485252767697264924108060913297868060247664), SC_(-0.46324927263674125093814131181689301223878566421762),
SC_(5), SC_(0.264718532562255859375), SC_(0.34426832813003273714672924371824224133559143244821), SC_(-0.049432441822728069543372084272506540578906568566679),
SC_(5), SC_(0.62944734096527099609375), SC_(-0.22382279528405448977447983371074041669623686569369), SC_(0.49147664711760436466007581944059038967809611892101),
SC_(5), SC_(0.67001712322235107421875), SC_(-0.31223652976417549895070288708720094161868379195206), SC_(0.37610337461310797969209584800253042022904925554525),
SC_(5), SC_(0.81158387660980224609375), SC_(-0.38292680966875416452976755202641274083447045975907), SC_(-0.34885118284757894374218709400505373551960888245662),
SC_(5), SC_(0.826751708984375), SC_(-0.35269763131671469331857533366092200943081591546502), SC_(-0.44136440965471238150156372311112451085353528866709),
SC_(5), SC_(0.91501367092132568359375), SC_(0.063446713438062204473932078136911612759332109107889), SC_(-0.82663633769127728796241230589411701186971587004582),
SC_(5), SC_(0.92977702617645263671875), SC_(0.18225073809630641977015280395310276646936069311641), SC_(-0.82168035297079603201814519993667772968868461426771),
SC_(5), SC_(0.93538987636566162109375), SC_(0.23180510604150429189260138185795569842018206442858), SC_(-0.80887163427971286589959630152315983255456115675709),
SC_(5), SC_(0.93773555755615234375), SC_(0.25325565314935514475658826960850521331006389130604), SC_(-0.80136139259062971113064196979296442577453518790514),
SC_(5), SC_(0.98576259613037109375), SC_(0.79688047965898906667942422168075865228912496237335), SC_(-0.050056541330186097160719119175881895101011997635397),
SC_(5), SC_(0.99292266368865966796875), SC_(0.89644489554848727542361918961404754824639399670787), SC_(0.37903738567797794270627705612855765856516256104433),
SC_(6), SC_(-0.804919183254241943359375), SC_(-0.39836758461472829348998598547346973134856336403357), SC_(-0.11186770789341157073263552304164952167231422725269),
SC_(6), SC_(-0.74602639675140380859375), SC_(-0.26942943612721316815918357350921061418816560550185), SC_(-0.42602747957292468844799426387152791743497741383254),
SC_(6), SC_(-0.72904598712921142578125), SC_(-0.21840146170346573698680050916460454542235139698046), SC_(-0.48296923649820365053381714059193346150823509339657),
SC_(6), SC_(-0.62323606014251708984375), SC_(0.11229562713036701432807908627179645376710821780817), SC_(-0.52579618536742217260788491630929608589881417853436),
SC_(6), SC_(-0.5579319000244140625), SC_(0.25809538238812630583446736370855025636974655379774), SC_(-0.35443454005327430793711175663169328286248363280561),
SC_(6), SC_(-0.44300353527069091796875), SC_(0.32627027269443981686050692334106934126675080884247), SC_(0.076978364356597061911602221500765420329999192593694),
SC_(6), SC_(-0.38366591930389404296875), SC_(0.27296210523874472670236080623125046782530388804834), SC_(0.27741174731966691723650037805968774957839220262642),
SC_(6), SC_(0.09376299381256103515625), SC_(-0.25631763331851885315854599502995062449465614809422), SC_(-0.28268746516151787527692774690914081177303614109476),
SC_(6), SC_(0.0944411754608154296875), SC_(-0.25552408862019782534903797380377055156453603599383), SC_(-0.28448177559590539095516583083575884593430785034601),
SC_(6), SC_(0.264718532562255859375), SC_(0.055663225234594337836693345273561919051283660765644), SC_(-0.49211101331909515135704356361137060677480116821877),
SC_(6), SC_(0.62944734096527099609375), SC_(0.095034738211053556569114686960941777812118998024525), SC_(0.53595663488501203764878594691541436002403012434814),
SC_(6), SC_(0.67001712322235107421875), SC_(-0.027907528859134634498084497388775217092645960712684), SC_(0.56739928086411463246848716706273921826782270933536),
SC_(6), SC_(0.81158387660980224609375), SC_(-0.40564261599347283927948120545903068249295719183982), SC_(0.065698612969198511696728446106187822049301308842024),
SC_(6), SC_(0.826751708984375), SC_(-0.41441668785915980661759850483046331378288487166901), SC_(-0.046051089316127435599875211778830659378778305951565),
SC_(6), SC_(0.91501367092132568359375), SC_(-0.14534417319305000517260528484257988550512306946976), SC_(-0.73321199968869349837797508987098833755655170036581),
SC_(6), SC_(0.92977702617645263671875), SC_(-0.02497873763140766287065827948618680160671583843944), SC_(-0.80187400193518611909857727430796462753119035734657),
SC_(6), SC_(0.93538987636566162109375), SC_(0.028201141383986142054022312024873160606967286580461), SC_(-0.81740119198478364508466660088619509288367234232148),
SC_(6), SC_(0.93773555755615234375), SC_(0.051703886374808225952970501830818053254301264204132), SC_(-0.82169997971024778036115328485043201232954643879117),
SC_(6), SC_(0.98576259613037109375), SC_(0.72170038823497209265542323838206061870527088205587), SC_(-0.25448294588059600387767244854330786413565245709897),
SC_(6), SC_(0.99292266368865966796875), SC_(0.85656129838850274253099953133227725425228299308345), SC_(0.17625410031563921455149796282056956604031098075843),
SC_(13), SC_(-0.804919183254241943359375), SC_(-0.021346989675489582899777513316783512919027984178499), SC_(-0.44112202059370695044753367609499513618897172902607),
SC_(13), SC_(-0.74602639675140380859375), SC_(0.24666838562906154791363844279971485004009388494544), SC_(-0.1559921230869429475133589681910169153699159544855),
SC_(13), SC_(-0.72904598712921142578125), SC_(0.26205171362935296430727406212496048008100313584788), SC_(-0.017605179298092333976782550762974395271667547123874),
SC_(13), SC_(-0.62323606014251708984375), SC_(-0.080372069801645230864998901272264760659582933477599), SC_(0.36425485923732018458592174575151844471405378913141),
SC_(13), SC_(-0.5579319000244140625), SC_(-0.23583528015736737224719659667717786026703268284614), SC_(0.053245393722305081751995109192359134354871591534969),
SC_(13), SC_(-0.44300353527069091796875), SC_(0.018972604977717555259851272576261414873385597702604), SC_(-0.35886939657929715282594368713239077257966834584912),
SC_(13), SC_(-0.38366591930389404296875), SC_(0.18550250811451569348004068552647395938057310465493), SC_(-0.20246148054258569990560069049122417793152050446365),
SC_(13), SC_(0.09376299381256103515625), SC_(0.20769838303968474575312727060982309147206670120161), SC_(-0.10173158142023370803559517312227984933062321078173),
SC_(13), SC_(0.0944411754608154296875), SC_(0.20829227701017635616317556146048162430074934166827), SC_(-0.098728123460385300129782227650749493941872811511327),
SC_(13), SC_(0.264718532562255859375), SC_(-0.1016381458266690823353213981274025318520849829061), SC_(0.30835386562966326517046404619145380164126531151263),
SC_(13), SC_(0.62944734096527099609375), SC_(0.055159037199559177575178459223260433973722342159236), SC_(0.37691576754738027132316322394241161656121459482015),
SC_(13), SC_(0.67001712322235107421875), SC_(-0.11980080975332609846766208424077118471193674213212), SC_(0.34804362893711095691292965673736967284289808313288),
SC_(13), SC_(0.81158387660980224609375), SC_(0.064420961086402494165295142893303224035523617990131), SC_(-0.43419593067780672264639624363068831709493843634964),
SC_(13), SC_(0.826751708984375), SC_(0.16013654257672660076220863480719945813853670795106), SC_(-0.37830883499601794980891054166266352530711732686068),
SC_(13), SC_(0.91501367092132568359375), SC_(0.02981406506695430902920205723465070991144692911286), SC_(0.53391573874244763290223203488170268282792221646375),
SC_(13), SC_(0.92977702617645263671875), SC_(-0.14928783504228836625545729908131879929441545864731), SC_(0.5094824048642415323846575901763459962675439032328),
SC_(13), SC_(0.93538987636566162109375), SC_(-0.21821472006169780300413719938049820079476182672815), SC_(0.45809358526457816919278185678834785451752393960047),
SC_(13), SC_(0.93773555755615234375), SC_(-0.24593495540807619378595982256918019147674926458319), SC_(0.42889513803137504816802334074350455620384537313833),
SC_(13), SC_(0.98576259613037109375), SC_(0.06582920955682109946957491732104452005420774878568), SC_(-0.81713360182404631829162888606556475045158637145556),
SC_(13), SC_(0.99292266368865966796875), SC_(0.45168281361591264659940935116533646174194486856019), SC_(-0.66523405291864568469611605694139032227348875420525),
SC_(16), SC_(-0.804919183254241943359375), SC_(-0.24617676998426440746802697580367697602069689994431), SC_(-0.10342588249052076335368259863624425129111161555058),
SC_(16), SC_(-0.74602639675140380859375), SC_(0.05589693997183205349782501045594495596630477937041), SC_(-0.36756591277520722601404123599925254242454264467136),
SC_(16), SC_(-0.72904598712921142578125), SC_(0.1435839632236998433207972126531002284333052188772), SC_(-0.29678713314015209268198753833877314533807120416601),
SC_(16), SC_(-0.62323606014251708984375), SC_(0.025006544465484963551355899284888512107603542872025), SC_(0.34655424303519465823894024987098609170947386899599),
SC_(16), SC_(-0.5579319000244140625), SC_(-0.20273668414164894060160750060929827332311158866899), SC_(0.1149894928335745044316704348175343096216902152789),
SC_(16), SC_(-0.44300353527069091796875), SC_(0.0568430344346968196836808967847074379571404518767), SC_(-0.31329734713414163463145524081279862392937646591181),
SC_(16), SC_(-0.38366591930389404296875), SC_(0.19955350157037941974526184597940130951592808285846), SC_(-0.069121706148999889753860133645349635646774147838909),
SC_(16), SC_(0.09376299381256103515625), SC_(0.004077511401713283600036273485948150451706308548591), SC_(0.3090887073999325166929620341518083398087059069866),
SC_(16), SC_(0.0944411754608154296875), SC_(0.0018646455756569841632128890021862805086238621865179), SC_(0.30915113128562592599142879370578903469780546339442),
SC_(16), SC_(0.264718532562255859375), SC_(-0.057138811421491531852629180943328986609990232285623), SC_(-0.30102711196776165823913047161703041527490961215075),
SC_(16), SC_(0.62944734096527099609375), SC_(0.053905813652862864225047719177357021912552840167578), SC_(-0.3394893321631230893291882500714616497801870033187),
SC_(16), SC_(0.67001712322235107421875), SC_(0.20571755182888692558409436652095184688145604215735), SC_(-0.15400029036097541197972382773740560927016105513573),
SC_(16), SC_(0.81158387660980224609375), SC_(-0.25610293236665229776934216307688324622589786937523), SC_(0.029961309199690485279175505247898935243066233951638),
SC_(16), SC_(0.826751708984375), SC_(-0.24467257950234667771221825741251222771947492803914), SC_(-0.14584909786233540893014977656569646339205583145946),
SC_(16), SC_(0.91501367092132568359375), SC_(0.30042521371658467516725427482154698462078838756), SC_(0.11242410274334292000251659391599358954645603738835),
SC_(16), SC_(0.92977702617645263671875), SC_(0.20912498055485121957345853172873004479220934035096), SC_(0.38711457227561848903449378495312209659537067985191),
SC_(16), SC_(0.93538987636566162109375), SC_(0.14228176834914109691746234218230423568131480850111), SC_(0.46724475576348077611133336497614776597835295379528),
SC_(16), SC_(0.93773555755615234375), SC_(0.10947822546659067656059296835577708662292349876443), SC_(0.49345958632627785174194039683464075153298036877136),
SC_(16), SC_(0.98576259613037109375), SC_(-0.18053759743174070857427031356500616942177764243751), SC_(-0.69129540587532453519248426712601771804500778047449),
SC_(16), SC_(0.99292266368865966796875), SC_(0.24467850628321941403216962899355195806033451938156), SC_(-0.79611153201220615596111924787398204555433320171123),
SC_(18), SC_(-0.804919183254241943359375), SC_(-0.0091062060443244939758547861277241601517458288228401), SC_(-0.37780874716766649794749661161502596284251171176729),
SC_(18), SC_(-0.74602639675140380859375), SC_(0.22554068680311218202775373160884926839138620763174), SC_(0.043450468136242147653982143862844811198611491554443),
SC_(18), SC_(-0.72904598712921142578125), SC_(0.18653718888369370131458265584018026946159296567964), SC_(0.19518736469516489835563573974741507967360934238079),
SC_(18), SC_(-0.62323606014251708984375), SC_(-0.20837325214812717413067018822585361068165851336255), SC_(-0.037088866497216472583736911887498188987603773369659),
SC_(18), SC_(-0.5579319000244140625), SC_(0.0083537300257362812848909087265145663947906734657682), SC_(-0.31950967163170480424900959261902943297087436887194),
SC_(18), SC_(-0.44300353527069091796875), SC_(0.11695183881480336805185423703698692829975597728824), SC_(0.24681367379374692383023201907678584193776277803732),
SC_(18), SC_(-0.38366591930389404296875), SC_(-0.10358901613970675221183097893317277350294739582856), SC_(0.25578907869474625948919953810862798903271057530686),
SC_(18), SC_(0.09376299381256103515625), SC_(0.030899020693203570750329014297680833991336820156792), SC_(-0.28791754441150052849520877694768651589010597918611),
SC_(18), SC_(0.0944411754608154296875), SC_(0.033208344966164570458319052396398896477890882959009), SC_(-0.28729203288102887394022408730410045130704945170246),
SC_(18), SC_(0.264718532562255859375), SC_(-0.045964012675459912647004385671790829004749499845969), SC_(0.28775273984847125983134846044367147353322574723096),
SC_(18), SC_(0.62944734096527099609375), SC_(-0.21025192720175270695719746239016794207250758550671), SC_(-0.011451910307176188739521846496709015868005938376706),
SC_(18), SC_(0.67001712322235107421875), SC_(-0.11209473575977880537554630008831322938651681961203), SC_(-0.28861574077574071045967706163764266303939167641235),
SC_(18), SC_(0.81158387660980224609375), SC_(-0.059414308841952830929071045427642264332649709039605), SC_(0.36941533931174362399141104265754795528484218175544),
SC_(18), SC_(0.826751708984375), SC_(-0.1661861116384618036402153021294856784649918532195), SC_(0.28742497280291907514593608858531889117823779493292),
SC_(18), SC_(0.91501367092132568359375), SC_(0.24104179066621669826861428047478740284125071072384), SC_(-0.25816581242891276150855737931173321477113736399573),
SC_(18), SC_(0.92977702617645263671875), SC_(0.30345956430814040115575308179633295683878952009221), SC_(0.053205379543234927660568467761641814470230916738039),
SC_(18), SC_(0.93538987636566162109375), SC_(0.28695924419323148602457516358630434274549630594269), SC_(0.19040502613280754358590157800975680518526525190133),
SC_(18), SC_(0.93773555755615234375), SC_(0.27214637032176476176235696410333280489913435468021), SC_(0.24695230662862708114901251701483136230530918002153),
SC_(18), SC_(0.98576259613037109375), SC_(-0.30043454768104230746662772278855454488514250456508), SC_(-0.52586497321495004128692505709794988132542865806662),
SC_(18), SC_(0.99292266368865966796875), SC_(0.10905904618186494808823511070262036756283922080124), SC_(-0.8190043052645567950966181297246945012178431035647),
SC_(19), SC_(-0.804919183254241943359375), SC_(-0.13197080377202665736616914483295430386103226798339), SC_(0.30439185079461838727386102511417679445130143697504),
SC_(19), SC_(-0.74602639675140380859375), SC_(-0.145888472515752488322967820082056444353328274887), SC_(-0.26146280837274387072049326070853702574943967213499),
SC_(19), SC_(-0.72904598712921142578125), SC_(-0.049543273739376098938164118341034405465324305394334), SC_(-0.33399130950651187664252780722066231231086715215037),
SC_(19), SC_(-0.62323606014251708984375), SC_(0.108462474462736719241499115773313996144190665045), SC_(0.27188868340165133975799203281538322711757069710654),
SC_(19), SC_(-0.5579319000244140625), SC_(-0.16898700597587011902855624616392747901805702881528), SC_(0.16296957620279172219978419815087191821651266886829),
SC_(19), SC_(-0.44300353527069091796875), SC_(0.086774244261237041187502205186727910747248943821998), SC_(-0.2669005399736008170995423913834449884708993279043),
SC_(19), SC_(-0.38366591930389404296875), SC_(0.18518233719073980253783272267881493406790394149709), SC_(0.050815807727239433167794934837935315089529954541468),
SC_(19), SC_(0.09376299381256103515625), SC_(-0.1749285947092888721974786955725138685456169025118), SC_(-0.073354024188019371331713593919507214584741353774141),
SC_(19), SC_(0.0944411754608154296875), SC_(-0.17429825143908666454510603569046385180196182465626), SC_(-0.077001126265999192631865199712139132518527301044888),
SC_(19), SC_(0.264718532562255859375), SC_(0.16022500206625985912825819052448183125933330717671), SC_(0.14198924834209712722889554522828334583526568794205),
SC_(19), SC_(0.62944734096527099609375), SC_(-0.13438326361094362774586020859943409104199788819994), SC_(0.24300673266449070282404274854258133237165626165118),
SC_(19), SC_(0.67001712322235107421875), SC_(-0.20602713406941943301157630033028134054188569383329), SC_(-0.060940372673870113382880029493240963759634545830116),
SC_(19), SC_(0.81158387660980224609375), SC_(0.086971455844324875234132438927179131969983584970598), SC_(0.34508503887069582338167006750623249283260807122053),
SC_(19), SC_(0.826751708984375), SC_(-0.033442914793680897952010218712581529745899360903155), SC_(0.37454337915916963566398826067574338174597268932648),
SC_(19), SC_(0.91501367092132568359375), SC_(0.15007656103598576739971044779394255546718356845339), SC_(-0.37908868831917397336990106081043384870642885722423),
SC_(19), SC_(0.92977702617645263671875), SC_(0.28693501649909716776829384064013974960722420152263), SC_(-0.12313038336912701300360856578205807776474791522058),
SC_(19), SC_(0.93538987636566162109375), SC_(0.30324802829239922164147482899163792077902516015462), SC_(0.017801725881771420248228319415115282604840122400748),
SC_(19), SC_(0.93773555755615234375), SC_(0.30185089350015097041813236342216465473811492066808), SC_(0.080512539757557010183574032982523614885735562454396),
SC_(19), SC_(0.98576259613037109375), SC_(-0.34396150797274909426987918450335894287593307514199), SC_(-0.42686745322594445556165789826564473675847159812306),
SC_(19), SC_(0.99292266368865966796875), SC_(0.043969381393564338898972458003559718667557179801894), SC_(-0.81279540498362619452519349374691829897388634698573),
};
#undef SC_

165
test/legendre_p_large.ipp Normal file
View File

@ -0,0 +1,165 @@
#define SC_(x) static_cast<T>(BOOST_JOIN(x, L))
static const boost::array<boost::array<T, 4>, 160> legendre_p_large = {
SC_(29), SC_(-0.74602639675140380859375), SC_(0.050915219643735786802064817454102557266509665552523), SC_(-0.27118035040452065163236941090242943684321195237749),
SC_(29), SC_(-0.72904598712921142578125), SC_(0.15209960929167220423613043592541930303920942697128), SC_(-0.1438359066051312703697159687668902900032679225431),
SC_(29), SC_(-0.5579319000244140625), SC_(0.15849246733249484229246386045081847903407720368835), SC_(-0.046562152771403674797644638451970346262085750814402),
SC_(29), SC_(-0.38366591930389404296875), SC_(0.12421123432704035296982084866318407821031736589989), SC_(-0.13993608234219292039527623183264127314107515942999),
SC_(29), SC_(0.264718532562255859375), SC_(0.14939214703729469665461134129487953904270632801499), SC_(0.011880798886655750194841085329195617037793542295307),
SC_(29), SC_(0.62944734096527099609375), SC_(0.15752641351603055527713997332857496041323176430518), SC_(-0.085333543185746265108134728242042619782666873361817),
SC_(29), SC_(0.67001712322235107421875), SC_(0.054837169775284662482177068305626352949947763721645), SC_(0.25355488589896471253311476119270056443895635234837),
SC_(29), SC_(0.81158387660980224609375), SC_(0.063381360227496634467950288363046198618583970049264), SC_(0.28493842219370104406874711812243725560916796813782),
SC_(29), SC_(0.826751708984375), SC_(-0.08420018636937566660354955907203801287585967235842), SC_(0.27769559592859630765679556893873497642068025145103),
SC_(29), SC_(0.93773555755615234375), SC_(-0.24176816577505910452921016056528287088649954762181), SC_(0.094296671036158090707906492415425184420130303729612),
SC_(32), SC_(-0.74602639675140380859375), SC_(-0.10624862108385367062544557604098705758947684718283), SC_(-0.21143967375447832725357384431573889445833865564692),
SC_(32), SC_(-0.72904598712921142578125), SC_(0.025162565093345926014241859993355739041989277225088), SC_(-0.26274148479323222549160374105375114037174210402628),
SC_(32), SC_(-0.5579319000244140625), SC_(0.14211456817063838568644446010057604214542220046016), SC_(-0.09163254161603810457705450004999666401809984055068),
SC_(32), SC_(-0.38366591930389404296875), SC_(0.14171288019304087574298677776314705938680717437038), SC_(-0.052711866447932948820821929976771090258669811818703),
SC_(32), SC_(0.264718532562255859375), SC_(-0.10746376970464863575465113222711354062288152228845), SC_(0.14703447108655800801097998317667773187484429086529),
SC_(32), SC_(0.62944734096527099609375), SC_(-0.15721886386953844900014008976876572130375292635363), SC_(-0.03463115417113285817814346783115703627607698101613),
SC_(32), SC_(0.67001712322235107421875), SC_(0.048628774250235041116639532793364743422360425715375), SC_(-0.24343097490553436355382554969125452470269482841518),
SC_(32), SC_(0.81158387660980224609375), SC_(0.14709429758897851782623104453504062279048901484918), SC_(-0.17120780885496551232352932901235943774904473019944),
SC_(32), SC_(0.826751708984375), SC_(0.18197608635110136442722424209924919380946511973609), SC_(0.064598428569533734464113024874557402334768980022172),
SC_(32), SC_(0.93773555755615234375), SC_(-0.061512016664104396409494145001588438528631649237376), SC_(0.36010369834698605740012216441227373597825633684005),
SC_(33), SC_(-0.74602639675140380859375), SC_(-0.010238220971698350467857407217583972140726845648941), SC_(0.26483415891807978747956511959896313413438051711664),
SC_(33), SC_(-0.72904598712921142578125), SC_(-0.1308485763851203410864936505227876528881511136519), SC_(0.16199934006548616731309863119775152390583901324519),
SC_(33), SC_(-0.5579319000244140625), SC_(-0.12577548566890528018101278253700971908249029962743), SC_(-0.13213214605592102018000812058769351569734360406003),
SC_(33), SC_(-0.38366591930389404296875), SC_(-0.084070866208971510118625762007538569384131026389396), SC_(-0.18256278466727144314587766075483055968035831220494),
SC_(33), SC_(0.264718532562255859375), SC_(0.060892666049180052331868898508597370624428803024817), SC_(0.19866890409777954034785008801181600022935344886198),
SC_(33), SC_(0.62944734096527099609375), SC_(-0.11433728271514716149262038842691043741855456620044), SC_(0.16755876228487195768012212741139439591382292792337),
SC_(33), SC_(0.67001712322235107421875), SC_(-0.081236062053488889130078168052517557727777089991736), SC_(-0.21649027108290998691804424765459226889986656795972),
SC_(33), SC_(0.81158387660980224609375), SC_(0.054836608100875136695247613465739163323207341583917), SC_(-0.26983701252599468973584716961923532939147494467454),
SC_(33), SC_(0.826751708984375), SC_(0.17096451544704338934795787534509579387648987239154), SC_(-0.10583253904494668067403419241018401345294284279768),
SC_(33), SC_(0.93773555755615234375), SC_(0.021689551526675134145413087356244487320455743955836), SC_(0.36566095216176988383802606024502153062571425905414),
SC_(38), SC_(-0.74602639675140380859375), SC_(-0.084123836557398448368713685848077796605866311328419), SC_(0.20927452879651299362933031503631704855861507328485),
SC_(38), SC_(-0.72904598712921142578125), SC_(-0.15529625891826503441381053635222357317586896447525), SC_(0.0095728141123042996678374510905606631222574103483576),
SC_(38), SC_(-0.5579319000244140625), SC_(0.098453621336514494698473554065871517874604718865768), SC_(-0.15887228344501787123307716070402047502579097616639),
SC_(38), SC_(-0.38366591930389404296875), SC_(0.1142998723616291395401060145662954970184529162179), SC_(0.10927652072714659779878476348183517273638952750771),
SC_(38), SC_(0.264718532562255859375), SC_(0.082342405948218235800013849335056084637027957309688), SC_(0.15992426917043357157539330709673818274284050011282),
SC_(38), SC_(0.62944734096527099609375), SC_(-0.068455729281013919450961847170789295612305662562268), SC_(-0.20232791952033959865517436817152841139901171805722),
SC_(38), SC_(0.67001712322235107421875), SC_(0.14923503774161864776328729535793778940014260423005), SC_(-0.00081555462858474175721539924197608607382214710104177),
SC_(38), SC_(0.81158387660980224609375), SC_(-0.054544375275263481570647398342926037642622621118648), SC_(0.24995338198241340981855015694448657310842038102797),
SC_(38), SC_(0.826751708984375), SC_(-0.16721624694409901980215061835708625790102572947942), SC_(0.059275472334568365380770389586353873529433513464428),
SC_(38), SC_(0.93773555755615234375), SC_(0.20855301957399606773775871068964050472366514949047), SC_(-0.10030484670657737103060450542322599342156588398843),
SC_(42), SC_(-0.74602639675140380859375), SC_(0.049566019304086784068530075774279790089365026819016), SC_(-0.2223326328142980698042327834311390349548637605267),
SC_(42), SC_(-0.72904598712921142578125), SC_(0.14591441453221755504339013126253144361512927416181), SC_(-0.03816847032424030854934985301169674005663852971074),
SC_(42), SC_(-0.5579319000244140625), SC_(-0.13430204358943900275964577227355331227334636201161), SC_(0.0051973684528497691222879613574650304460896053520729),
SC_(42), SC_(-0.38366591930389404296875), SC_(0.065763896800574200794337123835235188691341407252599), SC_(-0.1713134367479732947155934942710203117432539046046),
SC_(42), SC_(0.264718532562255859375), SC_(-0.047554509216288149280305803250205697401306151867419), SC_(0.18095441384071096874666701309266904943143926028736),
SC_(42), SC_(0.62944734096527099609375), SC_(0.10935216508815166523730605326515550073363675346191), SC_(0.1343668237290581228732195022404437327151868599812),
SC_(42), SC_(0.67001712322235107421875), SC_(-0.13896760821264559453299826838169576033084249809532), SC_(0.046166285445723758516981086429175967795330032118854),
SC_(42), SC_(0.81158387660980224609375), SC_(0.13257761059856394025891806012454608734090842373859), SC_(-0.14099679657580961322235886444766213263432122864624),
SC_(42), SC_(0.826751708984375), SC_(0.14083726257982003772240761087663193372628899052788), SC_(0.12939522669379464935358907263220136856872326106689),
SC_(42), SC_(0.93773555755615234375), SC_(-0.030227297367381724405890694551090646808341233639839), SC_(-0.32263036348629243619745931620595788155104891833781),
SC_(47), SC_(-0.74602639675140380859375), SC_(0.10555867750979365926641158999955582823336205722782), SC_(-0.14886382691569576113160226420850148145570650896964),
SC_(47), SC_(-0.72904598712921142578125), SC_(0.12518796913926798559687521769888776380193823473818), SC_(0.098180244656107285818363063590386661434884234727998),
SC_(47), SC_(-0.5579319000244140625), SC_(0.019958376774871797942991524370694468827252910590651), SC_(-0.19713453245538155745224332261651795745681090546712),
SC_(47), SC_(-0.38366591930389404296875), SC_(-0.017374612252196858651395396286373314512171227712276), SC_(0.18725030551272538736891544492946995866076663640595),
SC_(47), SC_(0.264718532562255859375), SC_(-0.018801793887180091986096938136652872878107965315931), SC_(0.1828072182041642441226028996345379902315722570693),
SC_(47), SC_(0.62944734096527099609375), SC_(-0.10497355122531684338594399243517694074545593042325), SC_(0.12395441308292615650354652321967372630461017577647),
SC_(47), SC_(0.67001712322235107421875), SC_(0.042375691594523493089898030922098260697978949901084), SC_(-0.20027976349819205062196975868907081288964978457637),
SC_(47), SC_(0.81158387660980224609375), SC_(-0.12720249332232236538255468589569255750641552199498), SC_(0.12911204921470701304207453622146811162549192306205),
SC_(47), SC_(0.826751708984375), SC_(-0.11972156572489977935845748400575031716451757509736), SC_(-0.15299307930087258161082851169709559917733372444518),
SC_(47), SC_(0.93773555755615234375), SC_(-0.18448824265114203879229766781768231984156422989655), SC_(0.10574076834730194623398317285604209247245691580845),
SC_(50), SC_(-0.74602639675140380859375), SC_(-0.015930599657360476251420277903683541838529410897537), SC_(-0.21465912896739233133099578206788459237386714150655),
SC_(50), SC_(-0.72904598712921142578125), SC_(0.12409002491708828479268113070514774903536846383229), SC_(-0.086287169891479867966715770145964370224141052863963),
SC_(50), SC_(-0.5579319000244140625), SC_(-0.005798165247856899753189081564247189672477629817479), SC_(-0.19337852580649058999917721542653095981057374271772),
SC_(50), SC_(-0.38366591930389404296875), SC_(-0.059497023650103635064046099627669865791536750381894), SC_(0.15794384507010689572165607053156094367974620258235),
SC_(50), SC_(0.264718532562255859375), SC_(-0.065209573905631036859687403696160942576965840778783), SC_(-0.14751871407424188124249576268838594921576865374728),
SC_(50), SC_(0.62944734096527099609375), SC_(0.1254648614906361354063479552814166773167878049504), SC_(-0.034440129398110338581115403924597511980186351811602),
SC_(50), SC_(0.67001712322235107421875), SC_(-0.10619347339517479426067516348745796102076178371881), SC_(0.11862572725603045508458932631769711812763534799817),
SC_(50), SC_(0.81158387660980224609375), SC_(0.11273074165283415173181149763996018303702643671155), SC_(0.14790659055314203028889130297212665219056965725573),
SC_(50), SC_(0.826751708984375), SC_(-0.066592210444900044500145874300565502648306521922739), SC_(0.21057227237727695731942424868416443302373930752217),
SC_(50), SC_(0.93773555755615234375), SC_(-0.02964420684396612633089666751568875846128660261089), SC_(0.29554119190479578704553201067740518317569997711165),
SC_(74), SC_(-0.74602639675140380859375), SC_(-0.11276175922769771071169791815382160822979193457584), SC_(-0.016948886125033992210699876903298192468926010338659),
SC_(74), SC_(-0.72904598712921142578125), SC_(0.043325082362381951121810614501313351872910740229927), SC_(-0.16177588767320896275870106383776756479873939526599),
SC_(74), SC_(-0.5579319000244140625), SC_(-0.10080435030792016569597859069478841148013073447729), SC_(0.018251782587574233476818350810881185458410525739317),
SC_(74), SC_(-0.38366591930389404296875), SC_(0.046884436541549348713098747004974391148402679382921), SC_(-0.13193735158761539160783845591049668332581458959337),
SC_(74), SC_(0.264718532562255859375), SC_(-0.041828012721919454058249300993966878486562319326719), SC_(-0.13246532996002790918584053275877515690218265371078),
SC_(74), SC_(0.62944734096527099609375), SC_(-0.094030311892407800682586230577407806078989970029721), SC_(-0.072919542245915760263666497413547057327808714299635),
SC_(74), SC_(0.67001712322235107421875), SC_(0.029245586267240350595851651237554590988267446471066), SC_(0.16214505190101967431610553130957058464946341991298),
SC_(74), SC_(0.81158387660980224609375), SC_(-0.017184547316074253794515299386081262373448628108694), SC_(-0.18803727598401509696193566641796932606576440421714),
SC_(74), SC_(0.826751708984375), SC_(0.11918365992241106370554467669124109309788511498893), SC_(0.049271190137184585759693541797865288317081249630842),
SC_(74), SC_(0.93773555755615234375), SC_(0.13720035943050209633696665899170965118560455647167), SC_(-0.11934635271777084702112356352205097073497522539851),
SC_(83), SC_(-0.74602639675140380859375), SC_(0.099722551700102296576333533087493494141629020623715), SC_(0.060920145263796023814234079688232261856372810771644),
SC_(83), SC_(-0.72904598712921142578125), SC_(-0.082673563441569816515278309758665439909493115318683), SC_(0.10304666821416430755952808837580442197138532186102),
SC_(83), SC_(-0.5579319000244140625), SC_(-0.071469557226080465580663942218061835065596029503675), SC_(0.10032073353554464505277586981830025137954384680805),
SC_(83), SC_(-0.38366591930389404296875), SC_(0.090342825331683058526707865550737058600999436851883), SC_(0.015229849936687863148217151178879823068202772258005),
SC_(83), SC_(0.264718532562255859375), SC_(0.032973965659052868308616011181565750057675408468301), SC_(-0.12971015008879036949215807951525454450331853071241),
SC_(83), SC_(0.62944734096527099609375), SC_(-0.029540121157521228269021443084960584105688041972903), SC_(0.14851201098143861160585951812951951622661772174285),
SC_(83), SC_(0.67001712322235107421875), SC_(0.10122142405146658235259251832888419156202562486693), SC_(0.0077420083935597411748271095780871224198331320212672),
SC_(83), SC_(0.81158387660980224609375), SC_(0.057246164186558041309336522292709213691507098187941), SC_(-0.15527890012859959180010630068393674149758957305009),
SC_(83), SC_(0.826751708984375), SC_(0.046180391617246980558614459450209311982173717330398), SC_(0.16785562098976736293735241808043927696415685748103),
SC_(83), SC_(0.93773555755615234375), SC_(-0.12572490913391149598157598741888682182134531126631), SC_(0.12308046852619065606878331099164630107367082534757),
SC_(101), SC_(-0.74602639675140380859375), SC_(0.058653496347056952338276621328805913660326830178208), SC_(0.12145297221972220508843876281155663375125894189862),
SC_(101), SC_(-0.72904598712921142578125), SC_(-0.090473034865819302928187941359278959062428518755725), SC_(-0.049121669560248310898765467668228847931197026959131),
SC_(101), SC_(-0.5579319000244140625), SC_(0.032856366144512093838472879802827945157670404434094), SC_(0.12642835711847836774479013663589314743072554059549),
SC_(101), SC_(-0.38366591930389404296875), SC_(-0.063163736094262211023950792526928416942278796176713), SC_(0.08315035982603328572025956598160739433185168321863),
SC_(101), SC_(0.264718532562255859375), SC_(0.071163045255901039101130479356531344296261959626307), SC_(0.059605104967104404152251553269156920601599226776817),
SC_(101), SC_(0.62944734096527099609375), SC_(-0.0007727131004341142524741554693628840685676674658113), SC_(-0.14111849131537663857555529499523590733520446597943),
SC_(101), SC_(0.67001712322235107421875), SC_(-0.070407995641034625719001861506953232343608676996959), SC_(-0.092817700559800711222725905975289230096607292859021),
SC_(101), SC_(0.81158387660980224609375), SC_(0.099307321362112185306610136683788343902740025414221), SC_(0.046418617748086995449796412250804429903067746389578),
SC_(101), SC_(0.826751708984375), SC_(-0.1041094321529210978436084887455176793203883621926), SC_(0.027652245608769378268189646446135419146885683214923),
SC_(101), SC_(0.93773555755615234375), SC_(-0.10613119080999585675059148209842336075096154309699), SC_(0.12944930189574758589151748582113145300025202556463),
SC_(103), SC_(-0.74602639675140380859375), SC_(-0.069509159753968058194042786081992949167966470822951), SC_(0.1042540571293701201528028813211055287246877892261),
SC_(103), SC_(-0.72904598712921142578125), SC_(0.025263082930279778421327606486190138820142052030236), SC_(-0.14351968257852565285920081107438326042937783381617),
SC_(103), SC_(-0.5579319000244140625), SC_(-0.086090797701103710780927800364190497383336250842762), SC_(0.73563687415286537614692801503996295947038747498055e-4),
SC_(103), SC_(-0.38366591930389404296875), SC_(0.0069903138700112647861271558581807248069002924998414), SC_(-0.12772502121884169194613640292720812041466814164591),
SC_(103), SC_(0.264718532562255859375), SC_(-0.041410666477160831448449369636364604203824717736859), SC_(-0.10726985707386768666039161492413816004770025158786),
SC_(103), SC_(0.62944734096527099609375), SC_(-0.086869296604861708037479158615097773729001515720048), SC_(0.030189104543447976063127397009596619632060749539848),
SC_(103), SC_(0.67001712322235107421875), SC_(-0.05108553281416170397625929563635477985617692288556), SC_(0.11834130734691348519983812797384944794665350021719),
SC_(103), SC_(0.81158387660980224609375), SC_(0.058956687321621474446809458105596372447480179278297), SC_(-0.131908419975604481181323208249846590177155219106),
SC_(103), SC_(0.826751708984375), SC_(-0.021621095970943942775281831322383200051308475737036), SC_(0.16069626010796515826935041981775936523380391638463),
SC_(103), SC_(0.93773555755615234375), SC_(-0.026566877946901700789372137814260494007273459963555), SC_(0.20481046345010719355266366241281814363105606775192),
SC_(110), SC_(-0.74602639675140380859375), SC_(-0.033942958151465668508584449603964158663794075720858), SC_(-0.13602869614463514275977560482278281839843937232776),
SC_(110), SC_(-0.72904598712921142578125), SC_(0.061608143475272538317308473633212181102846034412592), SC_(0.10678453148405205098663916975358345244841432153652),
SC_(110), SC_(-0.5579319000244140625), SC_(0.070207133539044196827310003993778517549356416945079), SC_(0.070477582350084174929316416542386486473261420732256),
SC_(110), SC_(-0.38366591930389404296875), SC_(-0.070383145106891206011892398176473132776246310124518), SC_(-0.056304633257010713541779389121079213335581039992689),
SC_(110), SC_(0.264718532562255859375), SC_(0.018413502281400223048564975179622159141770330579945), SC_(0.1179172684960028730149587291496622038750077559426),
SC_(110), SC_(0.62944734096527099609375), SC_(-0.084946393685047629698742653748849213204262536726215), SC_(0.02212137389603911574713594832891805519677492495707),
SC_(110), SC_(0.67001712322235107421875), SC_(-0.075205818842405280724589166472562327621104655346223), SC_(0.072065721597278484368730413339141193881824291866732),
SC_(110), SC_(0.81158387660980224609375), SC_(0.057209406868467160414288975624360868544196124966652), SC_(0.12749587894184737263697744890517205077643805330212),
SC_(110), SC_(0.826751708984375), SC_(-0.074856792842343494297327888969538339348549563347874), SC_(-0.10696602381164176466519470638170406570388141831222),
SC_(110), SC_(0.93773555755615234375), SC_(0.097528283970739845680724641236094845179184947489201), SC_(-0.13210730523293428301663298753017310169984684526741),
SC_(111), SC_(-0.74602639675140380859375), SC_(-0.032200675894540407249249527986931235112743426249519), SC_(0.13636975986133435085016449724426916756505823281803),
SC_(111), SC_(-0.72904598712921142578125), SC_(0.0016092508123221426259782618321854563885148486902523), SC_(-0.14344152276755107203423370387654056491916060539013),
SC_(111), SC_(-0.5579319000244140625), SC_(-0.0019266546022300930027573050620657297985689216768549), SC_(-0.13025449845936477071498681592486478446863468033711),
SC_(111), SC_(-0.38366591930389404296875), SC_(-0.00607083307494418231810803422278831700786776274005), SC_(0.12314301905657725821736747827712979258060988004664),
SC_(111), SC_(0.264718532562255859375), SC_(0.076917600598861354810476795406500521438714159220046), SC_(0.0033075920020254493876180380438220398526976541180716),
SC_(111), SC_(0.62944734096527099609375), SC_(-0.042334521409296933382182292266822707946314463083643), SC_(0.11707980002880993162285312441701953239742048843854),
SC_(111), SC_(0.67001712322235107421875), SC_(-0.01625732237213437043904647280255024284754469471479), SC_(0.13536990666014865190613699141291179267903978819174),
SC_(111), SC_(0.81158387660980224609375), SC_(0.093429234850716867173081121412126317601100287085826), SC_(0.050740491224134820431672350744872870880796379842562),
SC_(111), SC_(0.826751708984375), SC_(-0.099746842249768677069851749588989036311889774927283), SC_(-0.02218254391038425158040959896075971134469612198156),
SC_(111), SC_(0.93773555755615234375), SC_(0.061960098625334578699531381570226002216446334987954), SC_(-0.17630158114468011704453109150917307426932700963538),
SC_(115), SC_(-0.74602639675140380859375), SC_(0.011659882634088537821264971193347238274907192891989), SC_(-0.1417288093884680768867130033428123726827027042855),
SC_(115), SC_(-0.72904598712921142578125), SC_(0.0097131893606856202751128572690136150201795716231646), SC_(0.14012961153023905234915467648238152308202483249179),
SC_(115), SC_(-0.5579319000244140625), SC_(-0.055599872031625140506136394171510860309410123809349), SC_(0.093594483130628843819694780782575925754784924670163),
SC_(115), SC_(-0.38366591930389404296875), SC_(0.077050446497529102420650609981634503271775399693683), SC_(0.0088565512206407663055683543736671275288183109816667),
SC_(115), SC_(0.264718532562255859375), SC_(0.034359839114246272577599724967370326173387403660347), SC_(0.10578248128418573373870536860675213912264059240692),
SC_(115), SC_(0.62944734096527099609375), SC_(0.0082643990325571512244908953318239675941855106132265), SC_(-0.13165640504236233394765218021604504786233485133267),
SC_(115), SC_(0.67001712322235107421875), SC_(-0.0015721055642368064825337799606692523719130974520218), SC_(-0.1353286900783831392195565600906463227612561145681),
SC_(115), SC_(0.81158387660980224609375), SC_(-0.054210930576897856499034808655933306801074683806062), SC_(-0.12659507936588546926051398902517626516964689218928),
SC_(115), SC_(0.826751708984375), SC_(0.06212883372643213611372963364539976692767234086995), SC_(0.12103709534949250997508001328034108589273615963615),
SC_(115), SC_(0.93773555755615234375), SC_(-0.09980919675793132053530446510639647979845319955803), SC_(-0.12070840338940873219064713828143611372512223844091),
SC_(116), SC_(-0.74602639675140380859375), SC_(-0.068487247444151474237653315277483909414503521300912), SC_(0.093133560384715286625946002729620416337163521029867),
SC_(116), SC_(-0.72904598712921142578125), SC_(0.053747789206590672037151315696697693783833792642693), SC_(-0.11211897478819628686868719378051029417346515093252),
SC_(116), SC_(-0.5579319000244140625), SC_(0.080122819627702864075844102189789799443576781457988), SC_(0.020173351559352067990742477146036299831908728103273),
SC_(116), SC_(-0.38366591930389404296875), SC_(-0.024249827411491278686372542928360990815946534826784), SC_(-0.11467110049800068759284312552536360348652573880772),
SC_(116), SC_(0.264718532562255859375), SC_(0.073718014154393579573780297435185676405997097861731), SC_(-0.023941183188976671650101777466534611583995107650774),
SC_(116), SC_(0.62944734096527099609375), SC_(-0.059668625982518363289929597563274657874779402078409), SC_(-0.09255759087664323717343674706577199358384636772319),
SC_(116), SC_(0.67001712322235107421875), SC_(-0.064729455762043452505626574517572044801030359192088), SC_(-0.088456402518418445483355798933259689021877395507254),
SC_(116), SC_(0.81158387660980224609375), SC_(-0.09069070444539916571162153776802786573166522696411), SC_(-0.0527625562114936996735580314666853717965865324919),
SC_(116), SC_(0.826751708984375), SC_(0.094306540731834905126868750171910154657206855132072), SC_(0.044969460070177494430473922626932676591613349156668),
SC_(116), SC_(0.93773555755615234375), SC_(-0.11977051432565183689355134402005152657631906753244), SC_(-0.058477756477300972556925093606746906197796783801524),
SC_(119), SC_(-0.74602639675140380859375), SC_(0.0087647065593993755222972658179029408444330186700542), SC_(0.13981912827212672744690925773170472610548387878822),
SC_(119), SC_(-0.72904598712921142578125), SC_(-0.020501605529893412888893201088044338252329402923723), SC_(-0.13478486824495203061528622211548575586334551817436),
SC_(119), SC_(-0.5579319000244140625), SC_(0.080036079293206370171512732389414344286704185353321), SC_(-0.0057776707755366365863380008852867161540142918927643),
SC_(119), SC_(-0.38366591930389404296875), SC_(0.0052218893934731418741815240011222420959400585517152), SC_(-0.11902359008249444427689952801477258632653373728298),
SC_(119), SC_(0.264718532562255859375), SC_(-0.041958445146548813480092404170567661553263062970998), SC_(0.096369084287714671301426340819694101521306372531871),
SC_(119), SC_(0.62944734096527099609375), SC_(0.026043742963778131871545929796683083958834802939707), SC_(0.12346064721462223505658160979882243719998039566685),
SC_(119), SC_(0.67001712322235107421875), SC_(0.018730148385420890536233247762177938725955754094692), SC_(0.12977342706190187482418503847938799787319981967217),
SC_(119), SC_(0.81158387660980224609375), SC_(-0.0051210369574630302606435588094752910907524904265636), SC_(0.14977897540214287229711857221722487285805056065051),
SC_(119), SC_(0.826751708984375), SC_(0.0070994904638281005505473502488606481760552210237098), SC_(-0.15244878741668898076438519389186244649902911784835),
SC_(119), SC_(0.93773555755615234375), SC_(-0.089511411656126705336943924861664813522610049042024), SC_(0.13442707735952316190476066030580938662981623871763),
};
#undef SC_

1005
test/spherical_harmonic.ipp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -18,6 +18,10 @@
#include <boost/math/distributions/lognormal.hpp>
#include <boost/math/special_functions/digamma.hpp>
#include <boost/math/special_functions/cbrt.hpp>
#include <boost/math/special_functions/legendre.hpp>
#include <boost/math/special_functions/laguerre.hpp>
#include <boost/math/special_functions/hermite.hpp>
#include <boost/math/special_functions/spherical_harmonic.hpp>
//
// The purpose of this test is to verify that our code compiles
@ -269,6 +273,19 @@ void test_functions()
boost::math::cbrt(v1);
boost::math::sqrt1pm1(v1);
boost::math::powm1(v1, v2);
boost::math::legendre_p(1, v1);
boost::math::legendre_p(1, 0, v1);
boost::math::legendre_q(1, v1);
boost::math::legendre_next(2, v1, v2, v3);
boost::math::legendre_next(2, 2, v1, v2, v3);
boost::math::laguerre(1, v1);
boost::math::laguerre(2, 1, v1);
boost::math::laguerre_next(2, v1, v2, v3);
boost::math::laguerre_next(2, 1, v1, v2, v3);
boost::math::hermite(1, v1);
boost::math::hermite_next(2, v1, v2, v3);
boost::math::spherical_harmonic_r(2, 1, v1, v2);
boost::math::spherical_harmonic_i(2, 1, v1, v2);
}

190
test/test_hermite.cpp Normal file
View File

@ -0,0 +1,190 @@
// (C) Copyright John Maddock 2006.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#include <boost/math/concepts/real_concept.hpp>
#include <boost/test/included/test_exec_monitor.hpp>
#include <boost/test/floating_point_comparison.hpp>
#include <boost/math/special_functions/hermite.hpp>
#include <boost/math/constants/constants.hpp>
#include <boost/array.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include "handle_test_result.hpp"
#include "test_legendre_hooks.hpp"
//
// DESCRIPTION:
// ~~~~~~~~~~~~
//
// This file tests the Hermite polynomials.
// There are two sets of tests, spot
// tests which compare our results with selected values computed
// using the online special function calculator at
// functions.wolfram.com, while the bulk of the accuracy tests
// use values generated with NTL::RR at 1000-bit precision
// and our generic versions of these functions.
//
// Note that when this file is first run on a new platform many of
// these tests will fail: the default accuracy is 1 epsilon which
// is too tight for most platforms. In this situation you will
// need to cast a human eye over the error rates reported and make
// a judgement as to whether they are acceptable. Either way please
// report the results to the Boost mailing list. Acceptable rates of
// error are marked up below as a series of regular expressions that
// identify the compiler/stdlib/platform/data-type/test-data/test-function
// along with the maximum expected peek and RMS mean errors for that
// test.
//
void expected_results()
{
//
// Define the max and mean errors expected for
// various compilers and platforms.
//
const char* largest_type;
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
if(boost::math::tools::digits<double>() == boost::math::tools::digits<long double>())
{
largest_type = "(long\\s+)?double";
}
else
{
largest_type = "long double";
}
#else
largest_type = "(long\\s+)?double";
#endif
//
// Catch all cases come last:
//
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
largest_type, // test type(s)
".*", // test data group
"boost::math::hermite", 10, 5); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
"real_concept", // test type(s)
".*", // test data group
"boost::math::hermite", 10, 5); // test function
//
// Finish off by printing out the compiler/stdlib/platform names,
// we do this to make it easier to mark up expected error rates.
//
std::cout << "Tests run with " << BOOST_COMPILER << ", "
<< BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
}
template <class T>
void do_test_hermite(const T& data, const char* type_name, const char* test_name)
{
typedef typename T::value_type row_type;
typedef typename row_type::value_type value_type;
typedef value_type (*pg)(unsigned, value_type);
pg funcp = boost::math::hermite;
typedef unsigned (*cast_t)(value_type);
cast_t rc = &boost::math::tools::real_cast<unsigned, value_type>;
boost::math::tools::test_result<value_type> result;
std::cout << "Testing " << test_name << " with type " << type_name
<< "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
//
// test hermite against data:
//
result = boost::math::tools::test(
data,
boost::lambda::bind(funcp,
boost::lambda::ret<int>(
boost::lambda::bind(
rc,
boost::lambda::ret<value_type>(boost::lambda::_1[0]))),
boost::lambda::ret<value_type>(boost::lambda::_1[1])),
boost::lambda::ret<value_type>(boost::lambda::_1[2]));
handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::hermite", test_name);
std::cout << std::endl;
}
template <class T>
void test_hermite(T, const char* name)
{
//
// The actual test data is rather verbose, so it's in a separate file
//
// The contents are as follows, each row of data contains
// three items, input value a, input value b and erf(a, b):
//
# include "hermite.ipp"
do_test_hermite(hermite, name, "Hermite Polynomials");
}
template <class T>
void test_spots(T, const char* t)
{
std::cout << "Testing basic sanity checks for type " << t << std::endl;
//
// basic sanity checks, tolerance is 100 epsilon:
// These spots were generated by MathCAD, precision is
// 14-16 digits.
//
T tolerance = (std::max)(boost::math::tools::epsilon<T>() * 100, static_cast<T>(1e-14));
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(0, static_cast<T>(1)), static_cast<T>(1.L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(1, static_cast<T>(1)), static_cast<T>(2.L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(1, static_cast<T>(2)), static_cast<T>(4.L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(1, static_cast<T>(10)), static_cast<T>(20), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(1, static_cast<T>(100)), static_cast<T>(200), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(1, static_cast<T>(1e6)), static_cast<T>(2e6), tolerance);
if(std::numeric_limits<T>::max_exponent >= std::numeric_limits<double>::max_exponent)
{
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(1, static_cast<T>(1e307)), static_cast<T>(2e307), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(99, static_cast<T>(100)), static_cast<T>(4.967223743011310E+227L), tolerance);
}
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(10, static_cast<T>(30)), static_cast<T>(5.896624628001300E+17L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(10, static_cast<T>(1000)), static_cast<T>(1.023976960161280E+33L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(10, static_cast<T>(10)), static_cast<T>(8.093278209760000E+12L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(10, static_cast<T>(-10)), static_cast<T>(8.093278209760000E+12L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(3, static_cast<T>(-10)), static_cast<T>(-7.880000000000000E+3L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(3, static_cast<T>(-1000)), static_cast<T>(-7.999988000000000E+9L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::hermite(3, static_cast<T>(-1000000)), static_cast<T>(-7.999999999988000E+18L), tolerance);
}
int test_main(int, char* [])
{
test_spots(0.0F, "float");
test_spots(0.0, "double");
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
test_spots(0.0L, "long double");
test_spots(boost::math::concepts::real_concept(0.1), "real_concept");
#endif
expected_results();
test_hermite(0.1F, "float");
test_hermite(0.1, "double");
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
test_hermite(0.1L, "long double");
test_hermite(boost::math::concepts::real_concept(0.1), "real_concept");
#else
std::cout << "<note>The long double tests have been disabled on this platform "
"either because the long double overloads of the usual math functions are "
"not available at all, or because they are too inaccurate for these tests "
"to pass.</note>" << std::cout;
#endif
return 0;
}

266
test/test_laguerre.cpp Normal file
View File

@ -0,0 +1,266 @@
// (C) Copyright John Maddock 2006.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#include <boost/math/concepts/real_concept.hpp>
#include <boost/test/included/test_exec_monitor.hpp>
#include <boost/test/floating_point_comparison.hpp>
#include <boost/math/special_functions/laguerre.hpp>
#include <boost/math/constants/constants.hpp>
#include <boost/array.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include "handle_test_result.hpp"
#include "test_legendre_hooks.hpp"
//
// DESCRIPTION:
// ~~~~~~~~~~~~
//
// This file tests the Laguerre polynomials.
// There are two sets of tests, spot
// tests which compare our results with selected values computed
// using the online special function calculator at
// functions.wolfram.com, while the bulk of the accuracy tests
// use values generated with NTL::RR at 1000-bit precision
// and our generic versions of these functions.
//
// Note that when this file is first run on a new platform many of
// these tests will fail: the default accuracy is 1 epsilon which
// is too tight for most platforms. In this situation you will
// need to cast a human eye over the error rates reported and make
// a judgement as to whether they are acceptable. Either way please
// report the results to the Boost mailing list. Acceptable rates of
// error are marked up below as a series of regular expressions that
// identify the compiler/stdlib/platform/data-type/test-data/test-function
// along with the maximum expected peek and RMS mean errors for that
// test.
//
void expected_results()
{
//
// Define the max and mean errors expected for
// various compilers and platforms.
//
const char* largest_type;
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
if(boost::math::tools::digits<double>() == boost::math::tools::digits<long double>())
{
largest_type = "(long\\s+)?double";
}
else
{
largest_type = "long double";
}
#else
largest_type = "(long\\s+)?double";
#endif
//
// Linux special cases, error rates seem to be much higer here
// even though the implementation contains nothing but basic
// arithmetic?
//
if((std::numeric_limits<long double>::digits <= 64)
&& (std::numeric_limits<long double>::digits != std::numeric_limits<double>::digits))
{
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
"double", // test type(s)
".*", // test data group
".*", 10, 5); // test function
}
add_expected_result(
".*", // compiler
".*", // stdlib
"linux.*", // platform
largest_type, // test type(s)
".*", // test data group
".*", 40000, 1000); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
"linux.*", // platform
"real_concept", // test type(s)
".*", // test data group
".*", 40000, 1000); // test function
//
// Catch all cases come last:
//
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
largest_type, // test type(s)
".*", // test data group
".*", 4000, 500); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
"real_concept", // test type(s)
".*", // test data group
".*", 4000, 500); // test function
//
// Finish off by printing out the compiler/stdlib/platform names,
// we do this to make it easier to mark up expected error rates.
//
std::cout << "Tests run with " << BOOST_COMPILER << ", "
<< BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
}
template <class T>
void do_test_laguerre2(const T& data, const char* type_name, const char* test_name)
{
typedef typename T::value_type row_type;
typedef typename row_type::value_type value_type;
typedef value_type (*pg)(unsigned, value_type);
pg funcp = boost::math::laguerre;
typedef unsigned (*cast_t)(value_type);
cast_t rc = &boost::math::tools::real_cast<unsigned, value_type>;
boost::math::tools::test_result<value_type> result;
std::cout << "Testing " << test_name << " with type " << type_name
<< "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
//
// test laguerre against data:
//
result = boost::math::tools::test(
data,
boost::lambda::bind(funcp,
boost::lambda::ret<unsigned>(
boost::lambda::bind(
rc,
boost::lambda::ret<value_type>(boost::lambda::_1[0]))),
boost::lambda::ret<value_type>(boost::lambda::_1[1])),
boost::lambda::ret<value_type>(boost::lambda::_1[2]));
handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::laguerre(n, x)", test_name);
std::cout << std::endl;
}
template <class T>
void do_test_laguerre3(const T& data, const char* type_name, const char* test_name)
{
typedef typename T::value_type row_type;
typedef typename row_type::value_type value_type;
typedef value_type (*pg)(unsigned, unsigned, value_type);
pg funcp = boost::math::laguerre;
typedef unsigned (*cast_t)(value_type);
cast_t rc = &boost::math::tools::real_cast<unsigned, value_type>;
boost::math::tools::test_result<value_type> result;
std::cout << "Testing " << test_name << " with type " << type_name
<< "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
//
// test laguerre against data:
//
result = boost::math::tools::test(
data,
boost::lambda::bind(funcp,
boost::lambda::ret<unsigned>(
boost::lambda::bind(
rc,
boost::lambda::ret<value_type>(boost::lambda::_1[0]))),
boost::lambda::ret<unsigned>(
boost::lambda::bind(
rc,
boost::lambda::ret<value_type>(boost::lambda::_1[1]))),
boost::lambda::ret<value_type>(boost::lambda::_1[2])),
boost::lambda::ret<value_type>(boost::lambda::_1[3]));
handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::laguerre(n, m, x)", test_name);
std::cout << std::endl;
}
template <class T>
void test_laguerre(T, const char* name)
{
//
// The actual test data is rather verbose, so it's in a separate file
//
// The contents are as follows, each row of data contains
// three items, input value a, input value b and erf(a, b):
//
# include "laguerre2.ipp"
do_test_laguerre2(laguerre2, name, "Laguerre Polynomials");
# include "laguerre3.ipp"
do_test_laguerre3(laguerre3, name, "Associated Laguerre Polynomials");
}
template <class T>
void test_spots(T, const char* t)
{
std::cout << "Testing basic sanity checks for type " << t << std::endl;
//
// basic sanity checks, tolerance is 100 epsilon:
//
T tolerance = boost::math::tools::epsilon<T>() * 100;
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(1, static_cast<T>(0.5L)), static_cast<T>(0.5L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(4, static_cast<T>(0.5L)), static_cast<T>(-0.3307291666666666666666666666666666666667L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(7, static_cast<T>(0.5L)), static_cast<T>(-0.5183392237103174603174603174603174603175L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(20, static_cast<T>(0.5L)), static_cast<T>(0.3120174870800154148915399248893113634676L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(50, static_cast<T>(0.5L)), static_cast<T>(-0.3181388060269979064951118308575628226834L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(1, static_cast<T>(-0.5L)), static_cast<T>(1.5L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(4, static_cast<T>(-0.5L)), static_cast<T>(3.835937500000000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(7, static_cast<T>(-0.5L)), static_cast<T>(7.950934709821428571428571428571428571429L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(20, static_cast<T>(-0.5L)), static_cast<T>(76.12915699869631476833699787070874048223L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(50, static_cast<T>(-0.5L)), static_cast<T>(2307.428631277506570629232863491518399720L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(1, static_cast<T>(4.5L)), static_cast<T>(-3.500000000000000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(4, static_cast<T>(4.5L)), static_cast<T>(0.08593750000000000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(7, static_cast<T>(4.5L)), static_cast<T>(-1.036928013392857142857142857142857142857L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(20, static_cast<T>(4.5L)), static_cast<T>(1.437239150257817378525582974722170737587L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(50, static_cast<T>(4.5L)), static_cast<T>(-0.7795068145562651416494321484050019245248L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(4, 5, static_cast<T>(0.5L)), static_cast<T>(88.31510416666666666666666666666666666667L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(10, 0, static_cast<T>(2.5L)), static_cast<T>(-0.8802526766660982969576719576719576719577L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(10, 1, static_cast<T>(4.5L)), static_cast<T>(1.564311458042689732142857142857142857143L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(10, 6, static_cast<T>(8.5L)), static_cast<T>(20.51596541066649098875661375661375661376L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(10, 12, static_cast<T>(12.5L)), static_cast<T>(-199.5560968456234671241181657848324514991L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::laguerre(50, 40, static_cast<T>(12.5L)), static_cast<T>(-4.996769495006119488583146995907246595400e16L), tolerance);
}
int test_main(int, char* [])
{
test_spots(0.0F, "float");
test_spots(0.0, "double");
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
test_spots(0.0L, "long double");
test_spots(boost::math::concepts::real_concept(0.1), "real_concept");
#endif
expected_results();
test_laguerre(0.1F, "float");
test_laguerre(0.1, "double");
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
test_laguerre(0.1L, "long double");
test_laguerre(boost::math::concepts::real_concept(0.1), "real_concept");
#else
std::cout << "<note>The long double tests have been disabled on this platform "
"either because the long double overloads of the usual math functions are "
"not available at all, or because they are too inaccurate for these tests "
"to pass.</note>" << std::cout;
#endif
return 0;
}

401
test/test_legendre.cpp Normal file
View File

@ -0,0 +1,401 @@
// (C) Copyright John Maddock 2006.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#include <boost/math/concepts/real_concept.hpp>
#include <boost/test/included/test_exec_monitor.hpp>
#include <boost/test/floating_point_comparison.hpp>
#include <boost/math/special_functions/legendre.hpp>
#include <boost/math/constants/constants.hpp>
#include <boost/array.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include "handle_test_result.hpp"
#include "test_legendre_hooks.hpp"
//
// DESCRIPTION:
// ~~~~~~~~~~~~
//
// This file tests the legendre polynomials.
// There are two sets of tests, spot
// tests which compare our results with selected values computed
// using the online special function calculator at
// functions.wolfram.com, while the bulk of the accuracy tests
// use values generated with NTL::RR at 1000-bit precision
// and our generic versions of these functions.
//
// Note that when this file is first run on a new platform many of
// these tests will fail: the default accuracy is 1 epsilon which
// is too tight for most platforms. In this situation you will
// need to cast a human eye over the error rates reported and make
// a judgement as to whether they are acceptable. Either way please
// report the results to the Boost mailing list. Acceptable rates of
// error are marked up below as a series of regular expressions that
// identify the compiler/stdlib/platform/data-type/test-data/test-function
// along with the maximum expected peek and RMS mean errors for that
// test.
//
void expected_results()
{
//
// Define the max and mean errors expected for
// various compilers and platforms.
//
const char* largest_type;
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
if(boost::math::tools::digits<double>() == boost::math::tools::digits<long double>())
{
largest_type = "(long\\s+)?double";
}
else
{
largest_type = "long double";
}
#else
largest_type = "(long\\s+)?double";
#endif
//
// Linux:
//
if((std::numeric_limits<long double>::digits <= 64)
&& (std::numeric_limits<long double>::digits != std::numeric_limits<double>::digits))
{
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
"double", // test type(s)
".*", // test data group
".*", 10, 5); // test function
}
add_expected_result(
".*", // compiler
".*", // stdlib
"linux.*", // platform
largest_type, // test type(s)
"Legendre Polynomials.*Large.*", // test data group
"boost::math::legendre_p", 1000, 200); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
"linux.*", // platform
largest_type, // test type(s)
"Legendre Polynomials.*Large.*", // test data group
"boost::math::legendre_q", 7000, 1000); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
"linux.*", // platform
"real_concept", // test type(s)
"Legendre Polynomials.*Large.*", // test data group
"boost::math::legendre_p", 1000, 200); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
"linux.*", // platform
"real_concept", // test type(s)
"Legendre Polynomials.*Large.*", // test data group
"boost::math::legendre_q", 7000, 1000); // test function
//
// Catch all cases come last:
//
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
largest_type, // test type(s)
"Legendre Polynomials.*Large.*", // test data group
"boost::math::legendre_p", 400, 200); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
largest_type, // test type(s)
"Legendre Polynomials.*Large.*", // test data group
"boost::math::legendre_q", 5000, 500); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
largest_type, // test type(s)
"Legendre Polynomials.*", // test data group
"boost::math::legendre_p", 300, 80); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
largest_type, // test type(s)
"Legendre Polynomials.*", // test data group
"boost::math::legendre_q", 100, 50); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
largest_type, // test type(s)
"Associated Legendre Polynomials.*", // test data group
".*", 200, 20); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
"real_concept", // test type(s)
"Legendre Polynomials.*Large.*", // test data group
"boost::math::legendre_p", 400, 200); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
"real_concept", // test type(s)
"Legendre Polynomials.*Large.*", // test data group
"boost::math::legendre_q", 5000, 500); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
"real_concept", // test type(s)
"Legendre Polynomials.*", // test data group
"boost::math::legendre_p", 300, 80); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
"real_concept", // test type(s)
"Legendre Polynomials.*", // test data group
"boost::math::legendre_q", 100, 50); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
"real_concept", // test type(s)
"Associated Legendre Polynomials.*", // test data group
".*", 200, 20); // test function
//
// Finish off by printing out the compiler/stdlib/platform names,
// we do this to make it easier to mark up expected error rates.
//
std::cout << "Tests run with " << BOOST_COMPILER << ", "
<< BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
}
template <class T>
void do_test_legendre_p(const T& data, const char* type_name, const char* test_name)
{
typedef typename T::value_type row_type;
typedef typename row_type::value_type value_type;
typedef value_type (*pg)(int, value_type);
pg funcp = boost::math::legendre_p;
typedef int (*cast_t)(value_type);
cast_t rc = &boost::math::tools::real_cast<int, value_type>;
boost::math::tools::test_result<value_type> result;
std::cout << "Testing " << test_name << " with type " << type_name
<< "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
//
// test legendre_p against data:
//
result = boost::math::tools::test(
data,
boost::lambda::bind(funcp,
boost::lambda::ret<int>(
boost::lambda::bind(
rc,
boost::lambda::ret<value_type>(boost::lambda::_1[0]))),
boost::lambda::ret<value_type>(boost::lambda::_1[1])),
boost::lambda::ret<value_type>(boost::lambda::_1[2]));
handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::legendre_p", test_name);
#ifdef TEST_OTHER
if(::boost::is_floating_point<value_type>::value){
funcp = other::legendre_p;
result = boost::math::tools::test(
data,
boost::lambda::bind(funcp,
boost::lambda::ret<int>(
boost::lambda::bind(
rc,
boost::lambda::ret<value_type>(boost::lambda::_1[0]))),
boost::lambda::ret<value_type>(boost::lambda::_1[1])),
boost::lambda::ret<value_type>(boost::lambda::_1[2]));
print_test_result(result, data[result.worst()], result.worst(), type_name, "other::legendre_p");
}
#endif
typedef value_type (*pg2)(unsigned, value_type);
pg2 funcp2 = boost::math::legendre_q;
//
// test legendre_q against data:
//
result = boost::math::tools::test(
data,
boost::lambda::bind(funcp2,
boost::lambda::ret<int>(
boost::lambda::bind(
rc,
boost::lambda::ret<value_type>(boost::lambda::_1[0]))),
boost::lambda::ret<value_type>(boost::lambda::_1[1])),
boost::lambda::ret<value_type>(boost::lambda::_1[3]));
handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::legendre_q", test_name);
#ifdef TEST_OTHER
if(::boost::is_floating_point<value_type>::value){
funcp = other::legendre_q;
result = boost::math::tools::test(
data,
boost::lambda::bind(funcp2,
boost::lambda::ret<int>(
boost::lambda::bind(
rc,
boost::lambda::ret<value_type>(boost::lambda::_1[0]))),
boost::lambda::ret<value_type>(boost::lambda::_1[1])),
boost::lambda::ret<value_type>(boost::lambda::_1[3]));
print_test_result(result, data[result.worst()], result.worst(), type_name, "other::legendre_q");
}
#endif
std::cout << std::endl;
}
template <class T>
void do_test_assoc_legendre_p(const T& data, const char* type_name, const char* test_name)
{
typedef typename T::value_type row_type;
typedef typename row_type::value_type value_type;
typedef value_type (*pg)(int, int, value_type);
pg funcp = boost::math::legendre_p;
typedef int (*cast_t)(value_type);
cast_t rc = &boost::math::tools::real_cast<int, value_type>;
boost::math::tools::test_result<value_type> result;
std::cout << "Testing " << test_name << " with type " << type_name
<< "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
//
// test legendre_p against data:
//
result = boost::math::tools::test(
data,
boost::lambda::bind(funcp,
boost::lambda::ret<int>(
boost::lambda::bind(
rc,
boost::lambda::ret<value_type>(boost::lambda::_1[0]))),
boost::lambda::ret<int>(
boost::lambda::bind(
rc,
boost::lambda::ret<value_type>(boost::lambda::_1[1]))),
boost::lambda::ret<value_type>(boost::lambda::_1[2])),
boost::lambda::ret<value_type>(boost::lambda::_1[3]));
handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::legendre_p", test_name);
std::cout << std::endl;
}
template <class T>
void test_legendre_p(T, const char* name)
{
//
// The actual test data is rather verbose, so it's in a separate file
//
// The contents are as follows, each row of data contains
// three items, input value a, input value b and erf(a, b):
//
# include "legendre_p.ipp"
do_test_legendre_p(legendre_p, name, "Legendre Polynomials: Small Values");
# include "legendre_p_large.ipp"
do_test_legendre_p(legendre_p_large, name, "Legendre Polynomials: Large Values");
# include "assoc_legendre_p.ipp"
do_test_assoc_legendre_p(assoc_legendre_p, name, "Associated Legendre Polynomials: Small Values");
}
template <class T>
void test_spots(T, const char* t)
{
std::cout << "Testing basic sanity checks for type " << t << std::endl;
//
// basic sanity checks, tolerance is 100 epsilon:
//
T tolerance = boost::math::tools::epsilon<T>() * 100;
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(1, static_cast<T>(0.5L)), static_cast<T>(0.5L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-1, static_cast<T>(0.5L)), static_cast<T>(1L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(4, static_cast<T>(0.5L)), static_cast<T>(-0.2890625000000000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-4, static_cast<T>(0.5L)), static_cast<T>(-0.4375000000000000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(7, static_cast<T>(0.5L)), static_cast<T>(0.2231445312500000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-7, static_cast<T>(0.5L)), static_cast<T>(0.3232421875000000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(40, static_cast<T>(0.5L)), static_cast<T>(-0.09542943523261546936538467572384923220258L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-40, static_cast<T>(0.5L)), static_cast<T>(-0.1316993126940266257030910566308990611306L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(4, 2, static_cast<T>(0.5L)), static_cast<T>(4.218750000000000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-4, 2, static_cast<T>(0.5L)), static_cast<T>(5.625000000000000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(7, 5, static_cast<T>(0.5L)), static_cast<T>(-5696.789530152175143607977274672800795328L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-7, 4, static_cast<T>(0.5L)), static_cast<T>(465.1171875000000000000000000000000000000L), tolerance);
if(std::numeric_limits<T>::max_exponent > std::numeric_limits<float>::max_exponent)
{
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(40, 30, static_cast<T>(0.5L)), static_cast<T>(-7.855722083232252643913331343916012143461e45L), tolerance);
}
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-40, 20, static_cast<T>(0.5L)), static_cast<T>(4.966634149702370788037088925152355134665e30L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(4, 2, static_cast<T>(-0.5L)), static_cast<T>(4.218750000000000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-4, 2, static_cast<T>(-0.5L)), static_cast<T>(-5.625000000000000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(7, 5, static_cast<T>(-0.5L)), static_cast<T>(-5696.789530152175143607977274672800795328L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-7, 4, static_cast<T>(-0.5L)), static_cast<T>(465.1171875000000000000000000000000000000L), tolerance);
if(std::numeric_limits<T>::max_exponent > std::numeric_limits<float>::max_exponent)
{
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(40, 30, static_cast<T>(-0.5L)), static_cast<T>(-7.855722083232252643913331343916012143461e45L), tolerance);
}
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-40, 20, static_cast<T>(-0.5L)), static_cast<T>(-4.966634149702370788037088925152355134665e30L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(4, -2, static_cast<T>(0.5L)), static_cast<T>(0.01171875000000000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-4, -2, static_cast<T>(0.5L)), static_cast<T>(0.04687500000000000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(7, -5, static_cast<T>(0.5L)), static_cast<T>(0.00002378609812640364935569308025139290054701L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-7, -4, static_cast<T>(0.5L)), static_cast<T>(0.0002563476562500000000000000000000000000000L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(40, -30, static_cast<T>(0.5L)), static_cast<T>(-2.379819988646847616996471299410611801239e-48L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_p(-40, -20, static_cast<T>(0.5L)), static_cast<T>(4.356454600748202401657099008867502679122e-33L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_q(1, static_cast<T>(0.5L)), static_cast<T>(-0.7253469278329725771511886907693685738381L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_q(4, static_cast<T>(0.5L)), static_cast<T>(0.4401745259867706044988642951843745400835L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_q(7, static_cast<T>(0.5L)), static_cast<T>(-0.3439152932669753451878700644212067616780L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::legendre_q(40, static_cast<T>(0.5L)), static_cast<T>(0.1493671665503550095010454949479907886011L), tolerance);
}
int test_main(int, char* [])
{
test_spots(0.0F, "float");
test_spots(0.0, "double");
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
test_spots(0.0L, "long double");
test_spots(boost::math::concepts::real_concept(0.1), "real_concept");
#endif
expected_results();
test_legendre_p(0.1F, "float");
test_legendre_p(0.1, "double");
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
test_legendre_p(0.1L, "long double");
test_legendre_p(boost::math::concepts::real_concept(0.1), "real_concept");
#else
std::cout << "<note>The long double tests have been disabled on this platform "
"either because the long double overloads of the usual math functions are "
"not available at all, or because they are too inaccurate for these tests "
"to pass.</note>" << std::cout;
#endif
return 0;
}

View File

@ -0,0 +1,41 @@
// (C) Copyright John Maddock 2006.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_MATH_TEST_LEGENDRE_OTHER_HOOKS_HPP
#define BOOST_MATH_TEST_LEGENDRE_OTHER_HOOKS_HPP
#ifdef TEST_GSL
#include <gsl/gsl_sf_legendre.h>
namespace other{
inline float legendre_p(int l, float a)
{ return (float)gsl_sf_legendre_Pl (l, a); }
inline double legendre_p(int l, double a)
{ return gsl_sf_legendre_Pl (l, a); }
inline long double legendre_p(int l, long double a)
{ return gsl_sf_legendre_Pl (l, a); }
inline float legendre_q(int l, float a)
{ return (float)gsl_sf_legendre_Ql (l, a); }
inline double legendre_q(int l, double a)
{ return gsl_sf_legendre_Ql (l, a); }
inline long double legendre_q(int l, long double a)
{ return gsl_sf_legendre_Ql (l, a); }
}
#define TEST_OTHER
#endif
#ifdef TEST_OTHER
namespace other{
boost::math::concepts::real_concept legendre_p(int, boost::math::concepts::real_concept){ return 0; }
boost::math::concepts::real_concept legendre_q(int, boost::math::concepts::real_concept){ return 0; }
}
#endif
#endif

View File

@ -0,0 +1,323 @@
// (C) Copyright John Maddock 2006.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#include <boost/math/concepts/real_concept.hpp>
#include <boost/test/included/test_exec_monitor.hpp>
#include <boost/test/floating_point_comparison.hpp>
#include <boost/math/special_functions/spherical_harmonic.hpp>
#include <boost/math/constants/constants.hpp>
#include <boost/array.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include "handle_test_result.hpp"
//
// DESCRIPTION:
// ~~~~~~~~~~~~
//
// This file tests the Spherical Harmonic Functions.
// There are two sets of tests, spot
// tests which compare our results with selected values computed
// using the online special function calculator at
// functions.wolfram.com, while the bulk of the accuracy tests
// use values generated with NTL::RR at 1000-bit precision
// and our generic versions of these functions.
//
// Note that when this file is first run on a new platform many of
// these tests will fail: the default accuracy is 1 epsilon which
// is too tight for most platforms. In this situation you will
// need to cast a human eye over the error rates reported and make
// a judgement as to whether they are acceptable. Either way please
// report the results to the Boost mailing list. Acceptable rates of
// error are marked up below as a series of regular expressions that
// identify the compiler/stdlib/platform/data-type/test-data/test-function
// along with the maximum expected peek and RMS mean errors for that
// test.
//
void expected_results()
{
//
// Define the max and mean errors expected for
// various compilers and platforms.
//
const char* largest_type;
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
if(boost::math::tools::digits<double>() == boost::math::tools::digits<long double>())
{
largest_type = "(long\\s+)?double";
}
else
{
largest_type = "long double";
}
#else
largest_type = "(long\\s+)?double";
#endif
if((std::numeric_limits<long double>::digits <= 64) &&
(std::numeric_limits<long double>::digits != std::numeric_limits<double>::digits))
{
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
"double", // test type(s)
".*", // test data group
".*", 10, 5); // test function
}
//
// Catch all cases come last:
//
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
largest_type, // test type(s)
".*", // test data group
".*", 30000, 1000); // test function
add_expected_result(
".*", // compiler
".*", // stdlib
".*", // platform
"real_concept", // test type(s)
".*", // test data group
".*", 30000, 1000); // test function
//
// Finish off by printing out the compiler/stdlib/platform names,
// we do this to make it easier to mark up expected error rates.
//
std::cout << "Tests run with " << BOOST_COMPILER << ", "
<< BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
}
template <class T>
void do_test_spherical_harmonic(const T& data, const char* type_name, const char* test_name)
{
typedef typename T::value_type row_type;
typedef typename row_type::value_type value_type;
typedef value_type (*pg)(unsigned, int, value_type, value_type);
pg funcp = boost::math::spherical_harmonic_r;
typedef unsigned (*cast_t)(value_type);
cast_t cf = &boost::math::tools::real_cast<unsigned, value_type>;
boost::math::tools::test_result<value_type> result;
std::cout << "Testing " << test_name << " with type " << type_name
<< "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
//
// test Spheric Harmonic against data:
//
result = boost::math::tools::test(
data,
boost::lambda::bind(funcp,
boost::lambda::ret<unsigned>(
boost::lambda::bind(
cf,
boost::lambda::ret<value_type>(boost::lambda::_1[0]))),
boost::lambda::ret<unsigned>(
boost::lambda::bind(
cf,
boost::lambda::ret<value_type>(boost::lambda::_1[1]))),
boost::lambda::ret<value_type>(boost::lambda::_1[2]),
boost::lambda::ret<value_type>(boost::lambda::_1[3])),
boost::lambda::ret<value_type>(boost::lambda::_1[4]));
handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::spherical_harmonic_r", test_name);
funcp = boost::math::spherical_harmonic_i;
//
// test Spheric Harmonic against data:
//
result = boost::math::tools::test(
data,
boost::lambda::bind(funcp,
boost::lambda::ret<unsigned>(
boost::lambda::bind(
cf,
boost::lambda::ret<value_type>(boost::lambda::_1[0]))),
boost::lambda::ret<unsigned>(
boost::lambda::bind(
cf,
boost::lambda::ret<value_type>(boost::lambda::_1[1]))),
boost::lambda::ret<value_type>(boost::lambda::_1[2]),
boost::lambda::ret<value_type>(boost::lambda::_1[3])),
boost::lambda::ret<value_type>(boost::lambda::_1[5]));
handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::spherical_harmonic_i", test_name);
std::cout << std::endl;
}
template <class T>
void test_complex_spherical_harmonic(const T& data, const char* name, boost::mpl::true_ const &)
{
typedef typename T::value_type row_type;
typedef typename row_type::value_type value_type;
for(unsigned i = 0; i < sizeof(data) / sizeof(data[0]); ++i)
{
//
// Sanity check that the complex version does the same thing as the real
// and imaginary versions:
//
std::complex<value_type> r = boost::math::spherical_harmonic(
boost::math::tools::real_cast<unsigned>(data[i][0]),
boost::math::tools::real_cast<unsigned>(data[i][1]),
data[i][2],
data[i][3]);
value_type re = boost::math::spherical_harmonic_r(
boost::math::tools::real_cast<unsigned>(data[i][0]),
boost::math::tools::real_cast<unsigned>(data[i][1]),
data[i][2],
data[i][3]);
value_type im = boost::math::spherical_harmonic_i(
boost::math::tools::real_cast<unsigned>(data[i][0]),
boost::math::tools::real_cast<unsigned>(data[i][1]),
data[i][2],
data[i][3]);
BOOST_CHECK_CLOSE_FRACTION(std::real(r), re, value_type(5));
BOOST_CHECK_CLOSE_FRACTION(std::imag(r), im, value_type(5));
}
}
template <class T>
void test_complex_spherical_harmonic(const T& data, const char* name, boost::mpl::false_ const &)
{
// T is not a built in type, can't use std::complex with it...
}
template <class T>
void test_spherical_harmonic(T, const char* name)
{
//
// The actual test data is rather verbose, so it's in a separate file
//
// The contents are as follows, each row of data contains
// three items, input value a, input value b and erf(a, b):
//
# include "spherical_harmonic.ipp"
do_test_spherical_harmonic(spherical_harmonic, name, "Spherical Harmonics");
test_complex_spherical_harmonic(spherical_harmonic, name, boost::is_floating_point<T>());
}
template <class T>
void test_spots(T, const char* t)
{
std::cout << "Testing basic sanity checks for type " << t << std::endl;
//
// basic sanity checks, tolerance is 100 epsilon:
//
T tolerance = boost::math::tools::epsilon<T>() * 100;
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(3, 2, static_cast<T>(0.5), static_cast<T>(0)), static_cast<T>(0.2061460599687871330692286791802688341213L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 10, static_cast<T>(0.75), static_cast<T>(-0.25)), static_cast<T>(0.06197787102219208244041677775577045124092L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 10, static_cast<T>(0.75), static_cast<T>(-0.25)), static_cast<T>(0.04629885158895932341185988759669916977920L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(40, 15, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(0.2806904825045745687343492963236868973484L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(40, 15, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(-0.2933918444656603582282372590387544902135L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(40, 15, static_cast<T>(-0.75), static_cast<T>(-2.25)), static_cast<T>(0.2806904825045745687343492963236868973484L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(40, 15, static_cast<T>(-0.75), static_cast<T>(-2.25)), static_cast<T>(0.2933918444656603582282372590387544902135L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(40, 15, static_cast<T>(0.75), static_cast<T>(-2.25)), static_cast<T>(-0.2806904825045745687343492963236868973484L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(40, 15, static_cast<T>(0.75), static_cast<T>(-2.25)), static_cast<T>(-0.2933918444656603582282372590387544902135L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(40, 15, static_cast<T>(0.75), static_cast<T>(2.25)), static_cast<T>(-0.2806904825045745687343492963236868973484L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(40, 15, static_cast<T>(0.75), static_cast<T>(2.25)), static_cast<T>(0.2933918444656603582282372590387544902135L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 14, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(0.3479218186133435466692822481919867452442L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 14, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(0.0293201066685263879566422194539567289974L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 14, static_cast<T>(-0.75), static_cast<T>(-2.25)), static_cast<T>(0.3479218186133435466692822481919867452442L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 14, static_cast<T>(-0.75), static_cast<T>(-2.25)), static_cast<T>(-0.0293201066685263879566422194539567289974L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 14, static_cast<T>(0.75), static_cast<T>(-2.25)), static_cast<T>(0.3479218186133435466692822481919867452442L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 14, static_cast<T>(0.75), static_cast<T>(-2.25)), static_cast<T>(-0.0293201066685263879566422194539567289974L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 14, static_cast<T>(0.75), static_cast<T>(2.25)), static_cast<T>(0.3479218186133435466692822481919867452442L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 14, static_cast<T>(0.75), static_cast<T>(2.25)), static_cast<T>(0.0293201066685263879566422194539567289974L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(39, 15, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(0.1757594233240278196989039119899901986211L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(39, 15, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(-0.1837126108841860058078729532035715580790L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(39, 15, static_cast<T>(-0.75), static_cast<T>(-2.25)), static_cast<T>(0.1757594233240278196989039119899901986211L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(39, 15, static_cast<T>(-0.75), static_cast<T>(-2.25)), static_cast<T>(0.1837126108841860058078729532035715580790L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(39, 15, static_cast<T>(0.75), static_cast<T>(-2.25)), static_cast<T>(-0.1757594233240278196989039119899901986211L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(39, 15, static_cast<T>(0.75), static_cast<T>(-2.25)), static_cast<T>(-0.1837126108841860058078729532035715580790L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(39, 15, static_cast<T>(0.75), static_cast<T>(2.25)), static_cast<T>(-0.1757594233240278196989039119899901986211L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(39, 15, static_cast<T>(0.75), static_cast<T>(2.25)), static_cast<T>(0.1837126108841860058078729532035715580790L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(19, 14, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(0.2341701030303444033808969389588343934828L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(19, 14, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(0.0197340092863212879172432610952871202640L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(19, 14, static_cast<T>(-0.75), static_cast<T>(-2.25)), static_cast<T>(0.2341701030303444033808969389588343934828L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(19, 14, static_cast<T>(-0.75), static_cast<T>(-2.25)), static_cast<T>(-0.0197340092863212879172432610952871202640L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(19, 14, static_cast<T>(0.75), static_cast<T>(-2.25)), static_cast<T>(0.2341701030303444033808969389588343934828L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(19, 14, static_cast<T>(0.75), static_cast<T>(-2.25)), static_cast<T>(-0.0197340092863212879172432610952871202640L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(19, 14, static_cast<T>(0.75), static_cast<T>(2.25)), static_cast<T>(0.2341701030303444033808969389588343934828L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(19, 14, static_cast<T>(0.75), static_cast<T>(2.25)), static_cast<T>(0.0197340092863212879172432610952871202640L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(40, -15, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(-0.2806904825045745687343492963236868973484L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(40, -15, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(-0.2933918444656603582282372590387544902135L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(40, -15, static_cast<T>(-0.75), static_cast<T>(-2.25)), static_cast<T>(-0.2806904825045745687343492963236868973484L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(40, -15, static_cast<T>(-0.75), static_cast<T>(-2.25)), static_cast<T>(0.2933918444656603582282372590387544902135L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(40, -15, static_cast<T>(0.75), static_cast<T>(-2.25)), static_cast<T>(0.2806904825045745687343492963236868973484L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(40, -15, static_cast<T>(0.75), static_cast<T>(-2.25)), static_cast<T>(-0.2933918444656603582282372590387544902135L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(40, -15, static_cast<T>(0.75), static_cast<T>(2.25)), static_cast<T>(0.2806904825045745687343492963236868973484L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(40, -15, static_cast<T>(0.75), static_cast<T>(2.25)), static_cast<T>(0.2933918444656603582282372590387544902135L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, -14, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(0.3479218186133435466692822481919867452442L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, -14, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(-0.0293201066685263879566422194539567289974L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, -14, static_cast<T>(-0.75), static_cast<T>(-2.25)), static_cast<T>(0.3479218186133435466692822481919867452442L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, -14, static_cast<T>(-0.75), static_cast<T>(-2.25)), static_cast<T>(0.0293201066685263879566422194539567289974L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, -14, static_cast<T>(0.75), static_cast<T>(-2.25)), static_cast<T>(0.3479218186133435466692822481919867452442L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, -14, static_cast<T>(0.75), static_cast<T>(-2.25)), static_cast<T>(0.0293201066685263879566422194539567289974L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, -14, static_cast<T>(0.75), static_cast<T>(2.25)), static_cast<T>(0.3479218186133435466692822481919867452442L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, -14, static_cast<T>(0.75), static_cast<T>(2.25)), static_cast<T>(-0.0293201066685263879566422194539567289974L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 14, static_cast<T>(-4), static_cast<T>(2.25)), static_cast<T>(0.5253373768014719124617844890495875474590L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 14, static_cast<T>(-4), static_cast<T>(2.25)), static_cast<T>(0.0442712905622650144694916590407495495699L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 14, static_cast<T>(-4), static_cast<T>(-2.25)), static_cast<T>(0.5253373768014719124617844890495875474590L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 14, static_cast<T>(-4), static_cast<T>(-2.25)), static_cast<T>(-0.0442712905622650144694916590407495495699L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 14, static_cast<T>(4), static_cast<T>(-2.25)), static_cast<T>(0.5253373768014719124617844890495875474590L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 14, static_cast<T>(4), static_cast<T>(-2.25)), static_cast<T>(-0.0442712905622650144694916590407495495699L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 14, static_cast<T>(4), static_cast<T>(2.25)), static_cast<T>(0.5253373768014719124617844890495875474590L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 14, static_cast<T>(4), static_cast<T>(2.25)), static_cast<T>(0.0442712905622650144694916590407495495699L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 15, static_cast<T>(-4), static_cast<T>(2.25)), static_cast<T>(-0.2991140325667575801827063718821420263438L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 15, static_cast<T>(-4), static_cast<T>(2.25)), static_cast<T>(0.3126490678888350710506307405826667514065L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 15, static_cast<T>(-4), static_cast<T>(-2.25)), static_cast<T>(-0.2991140325667575801827063718821420263438L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 15, static_cast<T>(-4), static_cast<T>(-2.25)), static_cast<T>(-0.3126490678888350710506307405826667514065L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 15, static_cast<T>(4), static_cast<T>(-2.25)), static_cast<T>(0.2991140325667575801827063718821420263438L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 15, static_cast<T>(4), static_cast<T>(-2.25)), static_cast<T>(0.3126490678888350710506307405826667514065L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(20, 15, static_cast<T>(4), static_cast<T>(2.25)), static_cast<T>(0.2991140325667575801827063718821420263438L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(20, 15, static_cast<T>(4), static_cast<T>(2.25)), static_cast<T>(-0.3126490678888350710506307405826667514065L), tolerance);
BOOST_CHECK_EQUAL(::boost::math::spherical_harmonic_r(10, 15, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(0));
BOOST_CHECK_EQUAL(::boost::math::spherical_harmonic_i(10, 15, static_cast<T>(-0.75), static_cast<T>(2.25)), static_cast<T>(0));
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_r(53, 42, static_cast<T>(-8.75), static_cast<T>(-2.25)), static_cast<T>(-0.0008147976618889536159592309471859037113647L), tolerance);
BOOST_CHECK_CLOSE_FRACTION(::boost::math::spherical_harmonic_i(53, 42, static_cast<T>(-8.75), static_cast<T>(-2.25)), static_cast<T>(0.0002099802242493057018193798824353982612756L), tolerance);
}
int test_main(int, char* [])
{
test_spots(0.0F, "float");
test_spots(0.0, "double");
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
test_spots(0.0L, "long double");
test_spots(boost::math::concepts::real_concept(0.1), "real_concept");
#endif
expected_results();
test_spherical_harmonic(0.1F, "float");
test_spherical_harmonic(0.1, "double");
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
test_spherical_harmonic(0.1L, "long double");
test_spherical_harmonic(boost::math::concepts::real_concept(0.1), "real_concept");
#else
std::cout << "<note>The long double tests have been disabled on this platform "
"either because the long double overloads of the usual math functions are "
"not available at all, or because they are too inaccurate for these tests "
"to pass.</note>" << std::cout;
#endif
return 0;
}

69
tools/hermite_data.cpp Normal file
View File

@ -0,0 +1,69 @@
#include <boost/math/tools/ntl.hpp>
#include <boost/math/tools/test_data.hpp>
#include <boost/test/included/test_exec_monitor.hpp>
#include <boost/math/special_functions/hermite.hpp>
#include <fstream>
#include <boost/math/tools/test_data.hpp>
#include <boost/tr1/random.hpp>
using namespace boost::math::tools;
using namespace boost::math;
using namespace std;
template<class T>
std::tr1::tuple<T, T, T> hermite_data(T n, T x)
{
n = floor(n);
T r1 = hermite(boost::math::tools::real_cast<unsigned>(n), x);
return std::tr1::make_tuple(n, x, r1);
}
int test_main(int argc, char*argv [])
{
using namespace boost::math::tools;
NTL::RR::SetOutputPrecision(50);
NTL::RR::SetPrecision(1000);
parameter_info<NTL::RR> arg1, arg2, arg3;
test_data<NTL::RR> data;
std::cout << boost::math::hermite(10, static_cast<NTL::RR>(1e300)) << std::endl;
bool cont;
std::string line;
if(argc < 1)
return 1;
do{
if(0 == get_user_parameter_info(arg1, "n"))
return 1;
if(0 == get_user_parameter_info(arg2, "x"))
return 1;
arg1.type |= dummy_param;
arg2.type |= dummy_param;
data.insert(&hermite_data<NTL::RR>, arg1, arg2);
std::cout << "Any more data [y/n]?";
std::getline(std::cin, line);
boost::algorithm::trim(line);
cont = (line == "y");
}while(cont);
std::cout << "Enter name of test data file [default=hermite.ipp]";
std::getline(std::cin, line);
boost::algorithm::trim(line);
if(line == "")
line = "hermite.ipp";
std::ofstream ofs(line.c_str());
line.erase(line.find('.'));
ofs << std::scientific;
write_code(ofs, data, line.c_str());
return 0;
}

102
tools/laguerre_data.cpp Normal file
View File

@ -0,0 +1,102 @@
#include <boost/math/tools/ntl.hpp>
#include <boost/math/tools/test_data.hpp>
#include <boost/test/included/test_exec_monitor.hpp>
#include <boost/math/special_functions/laguerre.hpp>
#include <boost/math/special_functions/gamma.hpp>
#include <fstream>
#include <boost/math/tools/test_data.hpp>
#include <boost/tr1/random.hpp>
using namespace boost::math::tools;
using namespace boost::math;
using namespace std;
template<class T>
std::tr1::tuple<T, T, T> laguerre2_data(T n, T x)
{
n = floor(n);
T r1 = laguerre(boost::math::tools::real_cast<unsigned>(n), x);
return std::tr1::make_tuple(n, x, r1);
}
template<class T>
std::tr1::tuple<T, T, T, T> laguerre3_data(T n, T m, T x)
{
n = floor(n);
m = floor(m);
T r1 = laguerre(real_cast<unsigned>(n), real_cast<unsigned>(m), x);
return std::tr1::make_tuple(n, m, x, r1);
}
int test_main(int argc, char*argv [])
{
using namespace boost::math::tools;
NTL::RR::SetOutputPrecision(50);
NTL::RR::SetPrecision(1000);
parameter_info<NTL::RR> arg1, arg2, arg3;
test_data<NTL::RR> data;
bool cont;
std::string line;
if(argc < 1)
return 1;
if(strcmp(argv[1], "--laguerre2") == 0)
{
do{
if(0 == get_user_parameter_info(arg1, "n"))
return 1;
if(0 == get_user_parameter_info(arg2, "x"))
return 1;
arg1.type |= dummy_param;
arg2.type |= dummy_param;
data.insert(&laguerre2_data<NTL::RR>, arg1, arg2);
std::cout << "Any more data [y/n]?";
std::getline(std::cin, line);
boost::algorithm::trim(line);
cont = (line == "y");
}while(cont);
}
else if(strcmp(argv[1], "--laguerre3") == 0)
{
do{
if(0 == get_user_parameter_info(arg1, "n"))
return 1;
if(0 == get_user_parameter_info(arg2, "m"))
return 1;
if(0 == get_user_parameter_info(arg3, "x"))
return 1;
arg1.type |= dummy_param;
arg2.type |= dummy_param;
arg3.type |= dummy_param;
data.insert(&laguerre3_data<NTL::RR>, arg1, arg2, arg3);
std::cout << "Any more data [y/n]?";
std::getline(std::cin, line);
boost::algorithm::trim(line);
cont = (line == "y");
}while(cont);
}
std::cout << "Enter name of test data file [default=laguerre.ipp]";
std::getline(std::cin, line);
boost::algorithm::trim(line);
if(line == "")
line = "laguerre.ipp";
std::ofstream ofs(line.c_str());
line.erase(line.find('.'));
ofs << std::scientific;
write_code(ofs, data, line.c_str());
return 0;
}

101
tools/legendre_data.cpp Normal file
View File

@ -0,0 +1,101 @@
#include <boost/math/tools/ntl.hpp>
#include <boost/math/tools/test_data.hpp>
#include <boost/test/included/test_exec_monitor.hpp>
#include <boost/math/special_functions/legendre.hpp>
#include <boost/math/special_functions/gamma.hpp>
#include <fstream>
#include <boost/math/tools/test_data.hpp>
#include <boost/tr1/random.hpp>
using namespace boost::math::tools;
using namespace boost::math;
using namespace std;
template<class T>
std::tr1::tuple<T, T, T, T> legendre_p_data(T n, T x)
{
n = floor(n);
T r1 = legendre_p(boost::math::tools::real_cast<int>(n), x);
T r2 = legendre_q(boost::math::tools::real_cast<int>(n), x);
return std::tr1::make_tuple(n, x, r1, r2);
}
template<class T>
std::tr1::tuple<T, T, T, T> assoc_legendre_p_data(T n, T x)
{
static tr1::mt19937 r;
int l = real_cast<int>(floor(n));
tr1::uniform_int<> ui((std::max)(-l, -40), (std::min)(l, 40));
int m = ui(r);
T r1 = legendre_p(l, m, x);
return std::tr1::make_tuple(n, m, x, r1);
}
int test_main(int argc, char*argv [])
{
using namespace boost::math::tools;
NTL::RR::SetOutputPrecision(50);
NTL::RR::SetPrecision(1000);
parameter_info<NTL::RR> arg1, arg2;
test_data<NTL::RR> data;
bool cont;
std::string line;
if(argc < 1)
return 1;
if(strcmp(argv[1], "--legendre2") == 0)
{
do{
if(0 == get_user_parameter_info(arg1, "l"))
return 1;
if(0 == get_user_parameter_info(arg2, "x"))
return 1;
arg1.type |= dummy_param;
arg2.type |= dummy_param;
data.insert(&legendre_p_data<NTL::RR>, arg1, arg2);
std::cout << "Any more data [y/n]?";
std::getline(std::cin, line);
boost::algorithm::trim(line);
cont = (line == "y");
}while(cont);
}
else if(strcmp(argv[1], "--legendre3") == 0)
{
do{
if(0 == get_user_parameter_info(arg1, "l"))
return 1;
if(0 == get_user_parameter_info(arg2, "x"))
return 1;
arg1.type |= dummy_param;
arg2.type |= dummy_param;
data.insert(&assoc_legendre_p_data<NTL::RR>, arg1, arg2);
std::cout << "Any more data [y/n]?";
std::getline(std::cin, line);
boost::algorithm::trim(line);
cont = (line == "y");
}while(cont);
}
std::cout << "Enter name of test data file [default=legendre_p.ipp]";
std::getline(std::cin, line);
boost::algorithm::trim(line);
if(line == "")
line = "legendre_p.ipp";
std::ofstream ofs(line.c_str());
line.erase(line.find('.'));
write_code(ofs, data, line.c_str());
return 0;
}

View File

@ -0,0 +1,87 @@
#include <boost/math/tools/ntl.hpp>
#include <boost/math/tools/test_data.hpp>
#include <boost/test/included/test_exec_monitor.hpp>
#include <boost/math/special_functions/spherical_harmonic.hpp>
#include <fstream>
#include <boost/math/tools/test_data.hpp>
#include <boost/tr1/random.hpp>
using namespace boost::math::tools;
using namespace boost::math;
using namespace std;
float extern_val;
// confuse the compilers optimiser, and force a truncation to float precision:
float truncate_to_float(float const * pf)
{
extern_val = *pf;
return *pf;
}
template<class T>
std::tr1::tuple<T, T, T, T, T, T> spherical_harmonic_data(T i)
{
static tr1::mt19937 r;
int n = real_cast<int>(floor(i));
tr1::uniform_int<> ui(0, (std::min)(n, 40));
int m = ui(r);
std::tr1::uniform_real<float> ur(-2*constants::pi<float>(), 2*constants::pi<float>());
float _theta = ur(r);
float _phi = ur(r);
T theta = truncate_to_float(&_theta);
T phi = truncate_to_float(&_phi);
T r1 = spherical_harmonic_r(n, m, theta, phi);
T r2 = spherical_harmonic_i(n, m, theta, phi);
return std::tr1::make_tuple(n, m, theta, phi, r1, r2);
}
int test_main(int argc, char*argv [])
{
using namespace boost::math::tools;
NTL::RR::SetOutputPrecision(50);
NTL::RR::SetPrecision(1000);
parameter_info<NTL::RR> arg1, arg2, arg3;
test_data<NTL::RR> data;
bool cont;
std::string line;
if(argc < 1)
return 1;
do{
if(0 == get_user_parameter_info(arg1, "n"))
return 1;
arg1.type |= dummy_param;
arg2.type |= dummy_param;
arg3 = arg2;
data.insert(&spherical_harmonic_data<NTL::RR>, arg1);
std::cout << "Any more data [y/n]?";
std::getline(std::cin, line);
boost::algorithm::trim(line);
cont = (line == "y");
}while(cont);
std::cout << "Enter name of test data file [default=spherical_harmonic.ipp]";
std::getline(std::cin, line);
boost::algorithm::trim(line);
if(line == "")
line = "spherical_harmonic.ipp";
std::ofstream ofs(line.c_str());
line.erase(line.find('.'));
ofs << std::scientific;
write_code(ofs, data, line.c_str());
return 0;
}