ROOT  6.06/09
Reference Guide
convert-sincos-reference.cpp
Go to the documentation of this file.
1 #include <cstdio>
2 
3 template<typename T> struct SincosReference
4 {
5  const T x, s, c;
6 };
7 
8 template<typename T> struct Reference
9 {
10  const T x, ref;
11 };
12 
13 template<typename T> struct Data
14 {
15  static const SincosReference<T> sincosReference[];
16  static const Reference<T> asinReference[];
17  static const Reference<T> acosReference[];
18  static const Reference<T> atanReference[];
19  static const Reference<T> lnReference[];
20  static const Reference<T> log2Reference[];
21  static const Reference<T> log10Reference[];
22 };
23 
24 namespace Function {
25  enum Function {
27  };
28 }
29 template<typename T, Function::Function F> static inline const char *filenameOut();
30 template<> inline const char *filenameOut<float , Function::sincos>() { return "sincos-reference-single.dat"; }
31 template<> inline const char *filenameOut<double, Function::sincos>() { return "sincos-reference-double.dat"; }
32 template<> inline const char *filenameOut<float , Function::atan >() { return "atan-reference-single.dat"; }
33 template<> inline const char *filenameOut<double, Function::atan >() { return "atan-reference-double.dat"; }
34 template<> inline const char *filenameOut<float , Function::asin >() { return "asin-reference-single.dat"; }
35 template<> inline const char *filenameOut<double, Function::asin >() { return "asin-reference-double.dat"; }
36 template<> inline const char *filenameOut<float , Function::acos >() { return "acos-reference-single.dat"; }
37 template<> inline const char *filenameOut<double, Function::acos >() { return "acos-reference-double.dat"; }
38 template<> inline const char *filenameOut<float , Function::ln >() { return "reference-ln-sp.dat"; }
39 template<> inline const char *filenameOut<double, Function::ln >() { return "reference-ln-dp.dat"; }
40 template<> inline const char *filenameOut<float , Function::log2 >() { return "reference-log2-sp.dat"; }
41 template<> inline const char *filenameOut<double, Function::log2 >() { return "reference-log2-dp.dat"; }
42 template<> inline const char *filenameOut<float , Function::log10 >() { return "reference-log10-sp.dat"; }
43 template<> inline const char *filenameOut<double, Function::log10 >() { return "reference-log10-dp.dat"; }
44 
45 template<> const SincosReference<float> Data<float>::sincosReference[] = {
46 #include "sincos-reference-single.h"
47 };
48 template<> const SincosReference<double> Data<double>::sincosReference[] = {
49 #include "sincos-reference-double.h"
50 };
51 template<> const Reference<float> Data<float>::asinReference[] = {
52 #include "asin-reference-single.h"
53 };
54 template<> const Reference<double> Data<double>::asinReference[] = {
55 #include "asin-reference-double.h"
56 };
57 template<> const Reference<float> Data<float>::acosReference[] = {
58 #include "acos-reference-single.h"
59 };
60 template<> const Reference<double> Data<double>::acosReference[] = {
61 #include "acos-reference-double.h"
62 };
63 template<> const Reference<float> Data<float>::atanReference[] = {
64 #include "atan-reference-single.h"
65 };
66 template<> const Reference<double> Data<double>::atanReference[] = {
67 #include "atan-reference-double.h"
68 };
69 template<> const Reference<float> Data<float>::lnReference[] = {
70 #include "reference-ln-sp.h"
71 };
72 template<> const Reference<double> Data<double>::lnReference[] = {
73 #include "reference-ln-dp.h"
74 };
75 template<> const Reference<float> Data<float>::log2Reference[] = {
76 #include "reference-log2-sp.h"
77 };
78 template<> const Reference<double> Data<double>::log2Reference[] = {
79 #include "reference-log2-dp.h"
80 };
81 template<> const Reference<float> Data<float>::log10Reference[] = {
82 #include "reference-log10-sp.h"
83 };
84 template<> const Reference<double> Data<double>::log10Reference[] = {
85 #include "reference-log10-dp.h"
86 };
87 
88 template<typename T>
89 static void convert()
90 {
91  FILE *file;
92  file = fopen(filenameOut<T, Function::sincos>(), "wb");
93  fwrite(&Data<T>::sincosReference[0], sizeof(SincosReference<T>), sizeof(Data<T>::sincosReference) / sizeof(SincosReference<T>), file);
94  fclose(file);
95 
96  file = fopen(filenameOut<T, Function::atan>(), "wb");
97  fwrite(&Data<T>::atanReference[0], sizeof(Reference<T>), sizeof(Data<T>::atanReference) / sizeof(Reference<T>), file);
98  fclose(file);
99 
100  file = fopen(filenameOut<T, Function::asin>(), "wb");
101  fwrite(&Data<T>::asinReference[0], sizeof(Reference<T>), sizeof(Data<T>::asinReference) / sizeof(Reference<T>), file);
102  fclose(file);
103 
104  file = fopen(filenameOut<T, Function::acos>(), "wb");
105  fwrite(&Data<T>::acosReference[0], sizeof(Reference<T>), sizeof(Data<T>::acosReference) / sizeof(Reference<T>), file);
106  fclose(file);
107 
108  file = fopen(filenameOut<T, Function::ln>(), "wb");
109  fwrite(&Data<T>::lnReference[0], sizeof(Reference<T>), sizeof(Data<T>::lnReference) / sizeof(Reference<T>), file);
110  fclose(file);
111 
112  file = fopen(filenameOut<T, Function::log2>(), "wb");
113  fwrite(&Data<T>::log2Reference[0], sizeof(Reference<T>), sizeof(Data<T>::log2Reference) / sizeof(Reference<T>), file);
114  fclose(file);
115 
116  file = fopen(filenameOut<T, Function::log10>(), "wb");
117  fwrite(&Data<T>::log10Reference[0], sizeof(Reference<T>), sizeof(Data<T>::log10Reference) / sizeof(Reference<T>), file);
118  fclose(file);
119 }
120 
121 int main()
122 {
123  convert<float>();
124  convert<double>();
125  return 0;
126 }
double T(double x)
Definition: ChebyshevPol.h:34
static void convert()
Double_t x[n]
Definition: legend1.C:17
std::vector< std::vector< double > > Data
static Array< SincosReference< T > > sincosReference()
Definition: math.cpp:79
static const char * filenameOut()