-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDoubleToString.cc
156 lines (151 loc) · 18.4 KB
/
DoubleToString.cc
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include "DoubleToString.hh"
#include <cmath>
using namespace std;
/**
@author: Dov Kruger
Ultrafast float formatting for fast printing
This code is not well tested, and it definitely does not print every floating point value
Given that we have a known range and a known precision, this code is a model for how
we might print numbers into gcode at high speed.
We determine how big the number is and pull off digits in order.
Given exactly 6 digits after the decimal we print using two groups of 3 digits which are loaded from an array lookup.
*/
// code below generated by builddigits.cc
char* formatDouble(double d, char* p) {
if (d < 0) {
*p++ = '-';
d = -d;
}
static const int exponent[] = {0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6 };
static const int div[] = {1, 1, 1, 10, 10, 10, 10, 100, 100, 100, 1000, 1000, 1000, 1000,
10000, 10000, 10000, 100000, 100000, 100000, 1000000 };
int e;
double m = frexp(d, &e);
int whole = int(d);
int fdivisor = 1000000; // starting divisor for 6 digits after the decimal
int fracDigits = int((d - whole) * fdivisor);// mult by constant to give desired number of digits
if(e >= 0){
int divisor = div[e];
for (int numdig = exponent[e]; numdig > 0; numdig--, divisor /= 10) {
int dig = whole / divisor;
*p++ = dig + '0';
whole -= dig*divisor;
// cout << dig;
}
}
*p++ = whole + '0';
*p++ = '.';
int first3 = (*(int*)(digits + (fracDigits/1000*4))) >> 8;
*p++ = first3; first3 >>= 8;
*p++ = first3; first3 >>= 8;
*p++ = first3;
int second3 = (*(int*)(digits + fracDigits%1000 * 4)) >> 8;
*p++ = second3; second3 >>= 8;
*p++ = second3; second3 >>= 8;
*p++ = second3;
//*p++= '\0';
//cerr << "e=" << e << '\n';
return p;
}
const char digits[4000] = {
'0','0','0','0', '0','0','0','1', '0','0','0','2', '0','0','0','3', '0','0','0','4', '0','0','0','5', '0','0','0','6', '0','0','0','7', '0','0','0','8', '0','0','0','9',
'0','0','1','0', '0','0','1','1', '0','0','1','2', '0','0','1','3', '0','0','1','4', '0','0','1','5', '0','0','1','6', '0','0','1','7', '0','0','1','8', '0','0','1','9',
'0','0','2','0', '0','0','2','1', '0','0','2','2', '0','0','2','3', '0','0','2','4', '0','0','2','5', '0','0','2','6', '0','0','2','7', '0','0','2','8', '0','0','2','9',
'0','0','3','0', '0','0','3','1', '0','0','3','2', '0','0','3','3', '0','0','3','4', '0','0','3','5', '0','0','3','6', '0','0','3','7', '0','0','3','8', '0','0','3','9',
'0','0','4','0', '0','0','4','1', '0','0','4','2', '0','0','4','3', '0','0','4','4', '0','0','4','5', '0','0','4','6', '0','0','4','7', '0','0','4','8', '0','0','4','9',
'0','0','5','0', '0','0','5','1', '0','0','5','2', '0','0','5','3', '0','0','5','4', '0','0','5','5', '0','0','5','6', '0','0','5','7', '0','0','5','8', '0','0','5','9',
'0','0','6','0', '0','0','6','1', '0','0','6','2', '0','0','6','3', '0','0','6','4', '0','0','6','5', '0','0','6','6', '0','0','6','7', '0','0','6','8', '0','0','6','9',
'0','0','7','0', '0','0','7','1', '0','0','7','2', '0','0','7','3', '0','0','7','4', '0','0','7','5', '0','0','7','6', '0','0','7','7', '0','0','7','8', '0','0','7','9',
'0','0','8','0', '0','0','8','1', '0','0','8','2', '0','0','8','3', '0','0','8','4', '0','0','8','5', '0','0','8','6', '0','0','8','7', '0','0','8','8', '0','0','8','9',
'0','0','9','0', '0','0','9','1', '0','0','9','2', '0','0','9','3', '0','0','9','4', '0','0','9','5', '0','0','9','6', '0','0','9','7', '0','0','9','8', '0','0','9','9',
'0','1','0','0', '0','1','0','1', '0','1','0','2', '0','1','0','3', '0','1','0','4', '0','1','0','5', '0','1','0','6', '0','1','0','7', '0','1','0','8', '0','1','0','9',
'0','1','1','0', '0','1','1','1', '0','1','1','2', '0','1','1','3', '0','1','1','4', '0','1','1','5', '0','1','1','6', '0','1','1','7', '0','1','1','8', '0','1','1','9',
'0','1','2','0', '0','1','2','1', '0','1','2','2', '0','1','2','3', '0','1','2','4', '0','1','2','5', '0','1','2','6', '0','1','2','7', '0','1','2','8', '0','1','2','9',
'0','1','3','0', '0','1','3','1', '0','1','3','2', '0','1','3','3', '0','1','3','4', '0','1','3','5', '0','1','3','6', '0','1','3','7', '0','1','3','8', '0','1','3','9',
'0','1','4','0', '0','1','4','1', '0','1','4','2', '0','1','4','3', '0','1','4','4', '0','1','4','5', '0','1','4','6', '0','1','4','7', '0','1','4','8', '0','1','4','9',
'0','1','5','0', '0','1','5','1', '0','1','5','2', '0','1','5','3', '0','1','5','4', '0','1','5','5', '0','1','5','6', '0','1','5','7', '0','1','5','8', '0','1','5','9',
'0','1','6','0', '0','1','6','1', '0','1','6','2', '0','1','6','3', '0','1','6','4', '0','1','6','5', '0','1','6','6', '0','1','6','7', '0','1','6','8', '0','1','6','9',
'0','1','7','0', '0','1','7','1', '0','1','7','2', '0','1','7','3', '0','1','7','4', '0','1','7','5', '0','1','7','6', '0','1','7','7', '0','1','7','8', '0','1','7','9',
'0','1','8','0', '0','1','8','1', '0','1','8','2', '0','1','8','3', '0','1','8','4', '0','1','8','5', '0','1','8','6', '0','1','8','7', '0','1','8','8', '0','1','8','9',
'0','1','9','0', '0','1','9','1', '0','1','9','2', '0','1','9','3', '0','1','9','4', '0','1','9','5', '0','1','9','6', '0','1','9','7', '0','1','9','8', '0','1','9','9',
'0','2','0','0', '0','2','0','1', '0','2','0','2', '0','2','0','3', '0','2','0','4', '0','2','0','5', '0','2','0','6', '0','2','0','7', '0','2','0','8', '0','2','0','9',
'0','2','1','0', '0','2','1','1', '0','2','1','2', '0','2','1','3', '0','2','1','4', '0','2','1','5', '0','2','1','6', '0','2','1','7', '0','2','1','8', '0','2','1','9',
'0','2','2','0', '0','2','2','1', '0','2','2','2', '0','2','2','3', '0','2','2','4', '0','2','2','5', '0','2','2','6', '0','2','2','7', '0','2','2','8', '0','2','2','9',
'0','2','3','0', '0','2','3','1', '0','2','3','2', '0','2','3','3', '0','2','3','4', '0','2','3','5', '0','2','3','6', '0','2','3','7', '0','2','3','8', '0','2','3','9',
'0','2','4','0', '0','2','4','1', '0','2','4','2', '0','2','4','3', '0','2','4','4', '0','2','4','5', '0','2','4','6', '0','2','4','7', '0','2','4','8', '0','2','4','9',
'0','2','5','0', '0','2','5','1', '0','2','5','2', '0','2','5','3', '0','2','5','4', '0','2','5','5', '0','2','5','6', '0','2','5','7', '0','2','5','8', '0','2','5','9',
'0','2','6','0', '0','2','6','1', '0','2','6','2', '0','2','6','3', '0','2','6','4', '0','2','6','5', '0','2','6','6', '0','2','6','7', '0','2','6','8', '0','2','6','9',
'0','2','7','0', '0','2','7','1', '0','2','7','2', '0','2','7','3', '0','2','7','4', '0','2','7','5', '0','2','7','6', '0','2','7','7', '0','2','7','8', '0','2','7','9',
'0','2','8','0', '0','2','8','1', '0','2','8','2', '0','2','8','3', '0','2','8','4', '0','2','8','5', '0','2','8','6', '0','2','8','7', '0','2','8','8', '0','2','8','9',
'0','2','9','0', '0','2','9','1', '0','2','9','2', '0','2','9','3', '0','2','9','4', '0','2','9','5', '0','2','9','6', '0','2','9','7', '0','2','9','8', '0','2','9','9',
'0','3','0','0', '0','3','0','1', '0','3','0','2', '0','3','0','3', '0','3','0','4', '0','3','0','5', '0','3','0','6', '0','3','0','7', '0','3','0','8', '0','3','0','9',
'0','3','1','0', '0','3','1','1', '0','3','1','2', '0','3','1','3', '0','3','1','4', '0','3','1','5', '0','3','1','6', '0','3','1','7', '0','3','1','8', '0','3','1','9',
'0','3','2','0', '0','3','2','1', '0','3','2','2', '0','3','2','3', '0','3','2','4', '0','3','2','5', '0','3','2','6', '0','3','2','7', '0','3','2','8', '0','3','2','9',
'0','3','3','0', '0','3','3','1', '0','3','3','2', '0','3','3','3', '0','3','3','4', '0','3','3','5', '0','3','3','6', '0','3','3','7', '0','3','3','8', '0','3','3','9',
'0','3','4','0', '0','3','4','1', '0','3','4','2', '0','3','4','3', '0','3','4','4', '0','3','4','5', '0','3','4','6', '0','3','4','7', '0','3','4','8', '0','3','4','9',
'0','3','5','0', '0','3','5','1', '0','3','5','2', '0','3','5','3', '0','3','5','4', '0','3','5','5', '0','3','5','6', '0','3','5','7', '0','3','5','8', '0','3','5','9',
'0','3','6','0', '0','3','6','1', '0','3','6','2', '0','3','6','3', '0','3','6','4', '0','3','6','5', '0','3','6','6', '0','3','6','7', '0','3','6','8', '0','3','6','9',
'0','3','7','0', '0','3','7','1', '0','3','7','2', '0','3','7','3', '0','3','7','4', '0','3','7','5', '0','3','7','6', '0','3','7','7', '0','3','7','8', '0','3','7','9',
'0','3','8','0', '0','3','8','1', '0','3','8','2', '0','3','8','3', '0','3','8','4', '0','3','8','5', '0','3','8','6', '0','3','8','7', '0','3','8','8', '0','3','8','9',
'0','3','9','0', '0','3','9','1', '0','3','9','2', '0','3','9','3', '0','3','9','4', '0','3','9','5', '0','3','9','6', '0','3','9','7', '0','3','9','8', '0','3','9','9',
'0','4','0','0', '0','4','0','1', '0','4','0','2', '0','4','0','3', '0','4','0','4', '0','4','0','5', '0','4','0','6', '0','4','0','7', '0','4','0','8', '0','4','0','9',
'0','4','1','0', '0','4','1','1', '0','4','1','2', '0','4','1','3', '0','4','1','4', '0','4','1','5', '0','4','1','6', '0','4','1','7', '0','4','1','8', '0','4','1','9',
'0','4','2','0', '0','4','2','1', '0','4','2','2', '0','4','2','3', '0','4','2','4', '0','4','2','5', '0','4','2','6', '0','4','2','7', '0','4','2','8', '0','4','2','9',
'0','4','3','0', '0','4','3','1', '0','4','3','2', '0','4','3','3', '0','4','3','4', '0','4','3','5', '0','4','3','6', '0','4','3','7', '0','4','3','8', '0','4','3','9',
'0','4','4','0', '0','4','4','1', '0','4','4','2', '0','4','4','3', '0','4','4','4', '0','4','4','5', '0','4','4','6', '0','4','4','7', '0','4','4','8', '0','4','4','9',
'0','4','5','0', '0','4','5','1', '0','4','5','2', '0','4','5','3', '0','4','5','4', '0','4','5','5', '0','4','5','6', '0','4','5','7', '0','4','5','8', '0','4','5','9',
'0','4','6','0', '0','4','6','1', '0','4','6','2', '0','4','6','3', '0','4','6','4', '0','4','6','5', '0','4','6','6', '0','4','6','7', '0','4','6','8', '0','4','6','9',
'0','4','7','0', '0','4','7','1', '0','4','7','2', '0','4','7','3', '0','4','7','4', '0','4','7','5', '0','4','7','6', '0','4','7','7', '0','4','7','8', '0','4','7','9',
'0','4','8','0', '0','4','8','1', '0','4','8','2', '0','4','8','3', '0','4','8','4', '0','4','8','5', '0','4','8','6', '0','4','8','7', '0','4','8','8', '0','4','8','9',
'0','4','9','0', '0','4','9','1', '0','4','9','2', '0','4','9','3', '0','4','9','4', '0','4','9','5', '0','4','9','6', '0','4','9','7', '0','4','9','8', '0','4','9','9',
'0','5','0','0', '0','5','0','1', '0','5','0','2', '0','5','0','3', '0','5','0','4', '0','5','0','5', '0','5','0','6', '0','5','0','7', '0','5','0','8', '0','5','0','9',
'0','5','1','0', '0','5','1','1', '0','5','1','2', '0','5','1','3', '0','5','1','4', '0','5','1','5', '0','5','1','6', '0','5','1','7', '0','5','1','8', '0','5','1','9',
'0','5','2','0', '0','5','2','1', '0','5','2','2', '0','5','2','3', '0','5','2','4', '0','5','2','5', '0','5','2','6', '0','5','2','7', '0','5','2','8', '0','5','2','9',
'0','5','3','0', '0','5','3','1', '0','5','3','2', '0','5','3','3', '0','5','3','4', '0','5','3','5', '0','5','3','6', '0','5','3','7', '0','5','3','8', '0','5','3','9',
'0','5','4','0', '0','5','4','1', '0','5','4','2', '0','5','4','3', '0','5','4','4', '0','5','4','5', '0','5','4','6', '0','5','4','7', '0','5','4','8', '0','5','4','9',
'0','5','5','0', '0','5','5','1', '0','5','5','2', '0','5','5','3', '0','5','5','4', '0','5','5','5', '0','5','5','6', '0','5','5','7', '0','5','5','8', '0','5','5','9',
'0','5','6','0', '0','5','6','1', '0','5','6','2', '0','5','6','3', '0','5','6','4', '0','5','6','5', '0','5','6','6', '0','5','6','7', '0','5','6','8', '0','5','6','9',
'0','5','7','0', '0','5','7','1', '0','5','7','2', '0','5','7','3', '0','5','7','4', '0','5','7','5', '0','5','7','6', '0','5','7','7', '0','5','7','8', '0','5','7','9',
'0','5','8','0', '0','5','8','1', '0','5','8','2', '0','5','8','3', '0','5','8','4', '0','5','8','5', '0','5','8','6', '0','5','8','7', '0','5','8','8', '0','5','8','9',
'0','5','9','0', '0','5','9','1', '0','5','9','2', '0','5','9','3', '0','5','9','4', '0','5','9','5', '0','5','9','6', '0','5','9','7', '0','5','9','8', '0','5','9','9',
'0','6','0','0', '0','6','0','1', '0','6','0','2', '0','6','0','3', '0','6','0','4', '0','6','0','5', '0','6','0','6', '0','6','0','7', '0','6','0','8', '0','6','0','9',
'0','6','1','0', '0','6','1','1', '0','6','1','2', '0','6','1','3', '0','6','1','4', '0','6','1','5', '0','6','1','6', '0','6','1','7', '0','6','1','8', '0','6','1','9',
'0','6','2','0', '0','6','2','1', '0','6','2','2', '0','6','2','3', '0','6','2','4', '0','6','2','5', '0','6','2','6', '0','6','2','7', '0','6','2','8', '0','6','2','9',
'0','6','3','0', '0','6','3','1', '0','6','3','2', '0','6','3','3', '0','6','3','4', '0','6','3','5', '0','6','3','6', '0','6','3','7', '0','6','3','8', '0','6','3','9',
'0','6','4','0', '0','6','4','1', '0','6','4','2', '0','6','4','3', '0','6','4','4', '0','6','4','5', '0','6','4','6', '0','6','4','7', '0','6','4','8', '0','6','4','9',
'0','6','5','0', '0','6','5','1', '0','6','5','2', '0','6','5','3', '0','6','5','4', '0','6','5','5', '0','6','5','6', '0','6','5','7', '0','6','5','8', '0','6','5','9',
'0','6','6','0', '0','6','6','1', '0','6','6','2', '0','6','6','3', '0','6','6','4', '0','6','6','5', '0','6','6','6', '0','6','6','7', '0','6','6','8', '0','6','6','9',
'0','6','7','0', '0','6','7','1', '0','6','7','2', '0','6','7','3', '0','6','7','4', '0','6','7','5', '0','6','7','6', '0','6','7','7', '0','6','7','8', '0','6','7','9',
'0','6','8','0', '0','6','8','1', '0','6','8','2', '0','6','8','3', '0','6','8','4', '0','6','8','5', '0','6','8','6', '0','6','8','7', '0','6','8','8', '0','6','8','9',
'0','6','9','0', '0','6','9','1', '0','6','9','2', '0','6','9','3', '0','6','9','4', '0','6','9','5', '0','6','9','6', '0','6','9','7', '0','6','9','8', '0','6','9','9',
'0','7','0','0', '0','7','0','1', '0','7','0','2', '0','7','0','3', '0','7','0','4', '0','7','0','5', '0','7','0','6', '0','7','0','7', '0','7','0','8', '0','7','0','9',
'0','7','1','0', '0','7','1','1', '0','7','1','2', '0','7','1','3', '0','7','1','4', '0','7','1','5', '0','7','1','6', '0','7','1','7', '0','7','1','8', '0','7','1','9',
'0','7','2','0', '0','7','2','1', '0','7','2','2', '0','7','2','3', '0','7','2','4', '0','7','2','5', '0','7','2','6', '0','7','2','7', '0','7','2','8', '0','7','2','9',
'0','7','3','0', '0','7','3','1', '0','7','3','2', '0','7','3','3', '0','7','3','4', '0','7','3','5', '0','7','3','6', '0','7','3','7', '0','7','3','8', '0','7','3','9',
'0','7','4','0', '0','7','4','1', '0','7','4','2', '0','7','4','3', '0','7','4','4', '0','7','4','5', '0','7','4','6', '0','7','4','7', '0','7','4','8', '0','7','4','9',
'0','7','5','0', '0','7','5','1', '0','7','5','2', '0','7','5','3', '0','7','5','4', '0','7','5','5', '0','7','5','6', '0','7','5','7', '0','7','5','8', '0','7','5','9',
'0','7','6','0', '0','7','6','1', '0','7','6','2', '0','7','6','3', '0','7','6','4', '0','7','6','5', '0','7','6','6', '0','7','6','7', '0','7','6','8', '0','7','6','9',
'0','7','7','0', '0','7','7','1', '0','7','7','2', '0','7','7','3', '0','7','7','4', '0','7','7','5', '0','7','7','6', '0','7','7','7', '0','7','7','8', '0','7','7','9',
'0','7','8','0', '0','7','8','1', '0','7','8','2', '0','7','8','3', '0','7','8','4', '0','7','8','5', '0','7','8','6', '0','7','8','7', '0','7','8','8', '0','7','8','9',
'0','7','9','0', '0','7','9','1', '0','7','9','2', '0','7','9','3', '0','7','9','4', '0','7','9','5', '0','7','9','6', '0','7','9','7', '0','7','9','8', '0','7','9','9',
'0','8','0','0', '0','8','0','1', '0','8','0','2', '0','8','0','3', '0','8','0','4', '0','8','0','5', '0','8','0','6', '0','8','0','7', '0','8','0','8', '0','8','0','9',
'0','8','1','0', '0','8','1','1', '0','8','1','2', '0','8','1','3', '0','8','1','4', '0','8','1','5', '0','8','1','6', '0','8','1','7', '0','8','1','8', '0','8','1','9',
'0','8','2','0', '0','8','2','1', '0','8','2','2', '0','8','2','3', '0','8','2','4', '0','8','2','5', '0','8','2','6', '0','8','2','7', '0','8','2','8', '0','8','2','9',
'0','8','3','0', '0','8','3','1', '0','8','3','2', '0','8','3','3', '0','8','3','4', '0','8','3','5', '0','8','3','6', '0','8','3','7', '0','8','3','8', '0','8','3','9',
'0','8','4','0', '0','8','4','1', '0','8','4','2', '0','8','4','3', '0','8','4','4', '0','8','4','5', '0','8','4','6', '0','8','4','7', '0','8','4','8', '0','8','4','9',
'0','8','5','0', '0','8','5','1', '0','8','5','2', '0','8','5','3', '0','8','5','4', '0','8','5','5', '0','8','5','6', '0','8','5','7', '0','8','5','8', '0','8','5','9',
'0','8','6','0', '0','8','6','1', '0','8','6','2', '0','8','6','3', '0','8','6','4', '0','8','6','5', '0','8','6','6', '0','8','6','7', '0','8','6','8', '0','8','6','9',
'0','8','7','0', '0','8','7','1', '0','8','7','2', '0','8','7','3', '0','8','7','4', '0','8','7','5', '0','8','7','6', '0','8','7','7', '0','8','7','8', '0','8','7','9',
'0','8','8','0', '0','8','8','1', '0','8','8','2', '0','8','8','3', '0','8','8','4', '0','8','8','5', '0','8','8','6', '0','8','8','7', '0','8','8','8', '0','8','8','9',
'0','8','9','0', '0','8','9','1', '0','8','9','2', '0','8','9','3', '0','8','9','4', '0','8','9','5', '0','8','9','6', '0','8','9','7', '0','8','9','8', '0','8','9','9',
'0','9','0','0', '0','9','0','1', '0','9','0','2', '0','9','0','3', '0','9','0','4', '0','9','0','5', '0','9','0','6', '0','9','0','7', '0','9','0','8', '0','9','0','9',
'0','9','1','0', '0','9','1','1', '0','9','1','2', '0','9','1','3', '0','9','1','4', '0','9','1','5', '0','9','1','6', '0','9','1','7', '0','9','1','8', '0','9','1','9',
'0','9','2','0', '0','9','2','1', '0','9','2','2', '0','9','2','3', '0','9','2','4', '0','9','2','5', '0','9','2','6', '0','9','2','7', '0','9','2','8', '0','9','2','9',
'0','9','3','0', '0','9','3','1', '0','9','3','2', '0','9','3','3', '0','9','3','4', '0','9','3','5', '0','9','3','6', '0','9','3','7', '0','9','3','8', '0','9','3','9',
'0','9','4','0', '0','9','4','1', '0','9','4','2', '0','9','4','3', '0','9','4','4', '0','9','4','5', '0','9','4','6', '0','9','4','7', '0','9','4','8', '0','9','4','9',
'0','9','5','0', '0','9','5','1', '0','9','5','2', '0','9','5','3', '0','9','5','4', '0','9','5','5', '0','9','5','6', '0','9','5','7', '0','9','5','8', '0','9','5','9',
'0','9','6','0', '0','9','6','1', '0','9','6','2', '0','9','6','3', '0','9','6','4', '0','9','6','5', '0','9','6','6', '0','9','6','7', '0','9','6','8', '0','9','6','9',
'0','9','7','0', '0','9','7','1', '0','9','7','2', '0','9','7','3', '0','9','7','4', '0','9','7','5', '0','9','7','6', '0','9','7','7', '0','9','7','8', '0','9','7','9',
'0','9','8','0', '0','9','8','1', '0','9','8','2', '0','9','8','3', '0','9','8','4', '0','9','8','5', '0','9','8','6', '0','9','8','7', '0','9','8','8', '0','9','8','9',
'0','9','9','0', '0','9','9','1', '0','9','9','2', '0','9','9','3', '0','9','9','4', '0','9','9','5', '0','9','9','6', '0','9','9','7', '0','9','9','8', '0','9','9','9'
};