Logo ROOT  
Reference Guide
mathcoreSpecFunc.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_math
3/// \notebook
4/// Example macro describing how to use the special mathematical functions
5/// taking full advantage of the precision and speed of the C99 compliant
6/// environments. To execute the macro type in:
7///
8/// ~~~{.cpp}
9/// root[0] .x mathcoreSpecFunc.C
10/// ~~~
11///
12/// It will create two canvases:
13///
14/// 1. one with the representation of the tgamma, lgamma, erf and erfc functions
15/// 2. one with the relative difference between the old ROOT versions and the
16/// C99 implementation (on obsolete platform+compiler combinations which are
17/// not C99 compliant it will call the original ROOT implementations, hence
18/// the difference will be 0)
19///
20/// The naming and numbering of the functions is taken from
21/// [Matt Austern, (Draft) Technical Report on Standard Library Extensions, N1687=04-0127, September 10, 2004](A HREF="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1687.pdf")
22///
23/// \macro_image
24/// \macro_code
25///
26/// \author Andras Zsenei
27
28#include "TF1.h"
29#include "TSystem.h"
30#include "TCanvas.h"
31
32void mathcoreSpecFunc() {
33
34 TF1 *f1a = new TF1("f1a","ROOT::Math::tgamma(x)",0,20);
35 TF1 *f1b = new TF1("f1b","abs((ROOT::Math::tgamma(x)-TMath::Gamma(x))/ROOT::Math::tgamma(x))",0,20);
36
37 TF1 *f2a = new TF1("f2a","ROOT::Math::lgamma(x)",0,100);
38 TF1 *f2b = new TF1("f2b","abs((ROOT::Math::lgamma(x)-TMath::LnGamma(x))/ROOT::Math::lgamma(x))",0,100);
39
40 TF1 *f3a = new TF1("f3a","ROOT::Math::erf(x)",0,5);
41 TF1 *f3b = new TF1("f3b","abs((ROOT::Math::erf(x)-TMath::Erf(x))/ROOT::Math::erf(x))",0,5);
42
43 TF1 *f4a = new TF1("f4a","ROOT::Math::erfc(x)",0,5);
44 TF1 *f4b = new TF1("f4b","abs((ROOT::Math::erfc(x)-TMath::Erfc(x))/ROOT::Math::erfc(x))",0,5);
45
46
47 TCanvas *c1 = new TCanvas("c1","c1",800,600);
48
49 f1a->SetLineColor(kBlue);
50 f1b->SetLineColor(kBlue);
51 f2a->SetLineColor(kBlue);
52 f2b->SetLineColor(kBlue);
53 f3a->SetLineColor(kBlue);
54 f3b->SetLineColor(kBlue);
55 f4a->SetLineColor(kBlue);
56 f4b->SetLineColor(kBlue);
57
58 c1->Divide(2,2);
59
60 c1->cd(1);
61 f1a->Draw();
62 c1->cd(2);
63 f2a->Draw();
64 c1->cd(3);
65 f3a->Draw();
66 c1->cd(4);
67 f4a->Draw();
68
69
70 TCanvas *c2 = new TCanvas("c2","c2",800,600);
71
72 c2->Divide(2,2);
73
74 c2->cd(1);
75 f1b->Draw();
76 c2->cd(2);
77 f2b->Draw();
78 c2->cd(3);
79 f3b->Draw();
80 c2->cd(4);
81 f4b->Draw();
82
83}
@ kBlue
Definition: Rtypes.h:66
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition: TAttLine.h:40
The Canvas class.
Definition: TCanvas.h:23
1-Dim function class
Definition: TF1.h:213
void Draw(Option_t *option="") override
Draw this function with its current attributes.
Definition: TF1.cxx:1334
return c1
Definition: legend1.C:41
return c2
Definition: legend2.C:14