File: ErrorFunction.h

package info (click to toggle)
cloudcompare 2.11.3-7.1
  • links: PTS
  • area: main
  • in suites: bookworm
  • size: 58,224 kB
  • sloc: cpp: 229,982; ansic: 30,723; makefile: 84; sh: 20
file content (69 lines) | stat: -rw-r--r-- 2,595 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//##########################################################################
//#                                                                        #
//#                               CCLIB                                    #
//#                                                                        #
//#  This program is free software; you can redistribute it and/or modify  #
//#  it under the terms of the GNU Library General Public License as       #
//#  published by the Free Software Foundation; version 2 or later of the  #
//#  License.                                                              #
//#                                                                        #
//#  This program is distributed in the hope that it will be useful,       #
//#  but WITHOUT ANY WARRANTY; without even the implied warranty of        #
//#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the          #
//#  GNU General Public License for more details.                          #
//#                                                                        #
//#          COPYRIGHT: EDF R&D / TELECOM ParisTech (ENST-TSI)             #
//#                                                                        #
//##########################################################################

#ifndef ERROR_FUNCTION_HEADER
#define ERROR_FUNCTION_HEADER

//Local
#include "CCCoreLib.h"
#include "MathTools.h"

namespace CCLib
{

//! Relative error for Error Function computation
/** You can adjust it to trade off between accuracy and speed
	but don't ask for more than 15 figures (assuming usual 52 bit mantissa
	in a double). Example: 1E-12 <--> calculate 12 significant figures
**/
static const double c_erfRelativeError = 1e-12;

//! A class to compute the Error function (erf)
/** See for example http://mathworld.wolfram.com/Erf.html.
	Most of the code comes from "erf.cpp" by Steve Strand
	(29-Jan-04).
**/
class CC_CORE_LIB_API ErrorFunction : MathTools
{
public:


	//! Computes erfc(x)
	/** erfc(x) = 2/sqrt(pi)*integral(exp(-t^2),t,x,inf)
				= exp(-x^2)/sqrt(pi) * [1/x+ (1/2)/x+ (2/2)/x+ (3/2)/x+ (4/2)/x+ ...]
				= 1-erf(x)
		(expression inside [] is a continued fraction so '+' means add to denominator
		only).
		\param x a real variable
		\return erfc(x)
	**/
	static double erfc(double x);

	//! Computes erf(x)
	/** erf(x) = 2/sqrt(pi)*integral(exp(-t^2),t,0,x)
			   = 2/sqrt(pi)*[x - x^3/3 + x^5/5*2! - x^7/7*3! + ...]
		       = 1-erfc(x)
		\param x a real variable
		\return erf(x)
	**/
	static double erf(double x);
};

}

#endif //ERROR_FUNCTION_HEADER