Xinqi Bao's Git

README.md: updated paper url
[XbSlicer.git] / src / DoubleToString.cc
1 #include "DoubleToString.hh"
2
3 #include <cmath>
4 using namespace std;
5
6 /**
7 @author: Dov Kruger
8 Ultrafast float formatting for fast printing
9 This code is not well tested, and it definitely does not print every
10 floating point value Given that we have a known range and a known precision,
11 this code is a model for how we might print numbers into gcode at high speed.
12 We determine how big the number is and pull off digits in order.
13 Given exactly 6 digits after the decimal we print using two groups of 3
14 digits which are loaded from an array lookup.
15 */
16
17 // code below generated by builddigits.cc
18 char* formatDouble(double d, char* p)
19 {
20 if (d < 0)
21 {
22 *p++ = '-';
23 d = -d;
24 }
25 static const int exponent[] = {0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3,
26 3, 3, 3, 4, 4, 4, 5, 5, 5, 6};
27 static const int div[] = {1, 1, 1, 10, 10, 10,
28 10, 100, 100, 100, 1000, 1000,
29 1000, 1000, 10000, 10000, 10000, 100000,
30 100000, 100000, 1000000};
31 int e;
32 double m = frexp(d, &e);
33 int whole = int(d);
34 int fdivisor = 1000000; // starting divisor for 6 digits after the decimal
35 int fracDigits =
36 int((d - whole) *
37 fdivisor); // mult by constant to give desired number of digits
38 if (e >= 0)
39 {
40 int divisor = div[e];
41 for (int numdig = exponent[e]; numdig > 0; numdig--, divisor /= 10)
42 {
43 int dig = whole / divisor;
44 *p++ = dig + '0';
45 whole -= dig * divisor;
46 // cout << dig;
47 }
48 }
49 *p++ = whole + '0';
50 *p++ = '.';
51
52 int first3 = (*(int*)(digits + (fracDigits / 1000 * 4))) >> 8;
53 *p++ = first3;
54 first3 >>= 8;
55 *p++ = first3;
56 first3 >>= 8;
57 *p++ = first3;
58 int second3 = (*(int*)(digits + fracDigits % 1000 * 4)) >> 8;
59 *p++ = second3;
60 second3 >>= 8;
61 *p++ = second3;
62 second3 >>= 8;
63 *p++ = second3;
64
65 //*p++= '\0';
66 // cerr << "e=" << e << '\n';
67 return p;
68 }
69
70 const char digits[4000] = {
71 '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '2', '0', '0', '0',
72 '3', '0', '0', '0', '4', '0', '0', '0', '5', '0', '0', '0', '6', '0', '0',
73 '0', '7', '0', '0', '0', '8', '0', '0', '0', '9', '0', '0', '1', '0', '0',
74 '0', '1', '1', '0', '0', '1', '2', '0', '0', '1', '3', '0', '0', '1', '4',
75 '0', '0', '1', '5', '0', '0', '1', '6', '0', '0', '1', '7', '0', '0', '1',
76 '8', '0', '0', '1', '9', '0', '0', '2', '0', '0', '0', '2', '1', '0', '0',
77 '2', '2', '0', '0', '2', '3', '0', '0', '2', '4', '0', '0', '2', '5', '0',
78 '0', '2', '6', '0', '0', '2', '7', '0', '0', '2', '8', '0', '0', '2', '9',
79 '0', '0', '3', '0', '0', '0', '3', '1', '0', '0', '3', '2', '0', '0', '3',
80 '3', '0', '0', '3', '4', '0', '0', '3', '5', '0', '0', '3', '6', '0', '0',
81 '3', '7', '0', '0', '3', '8', '0', '0', '3', '9', '0', '0', '4', '0', '0',
82 '0', '4', '1', '0', '0', '4', '2', '0', '0', '4', '3', '0', '0', '4', '4',
83 '0', '0', '4', '5', '0', '0', '4', '6', '0', '0', '4', '7', '0', '0', '4',
84 '8', '0', '0', '4', '9', '0', '0', '5', '0', '0', '0', '5', '1', '0', '0',
85 '5', '2', '0', '0', '5', '3', '0', '0', '5', '4', '0', '0', '5', '5', '0',
86 '0', '5', '6', '0', '0', '5', '7', '0', '0', '5', '8', '0', '0', '5', '9',
87 '0', '0', '6', '0', '0', '0', '6', '1', '0', '0', '6', '2', '0', '0', '6',
88 '3', '0', '0', '6', '4', '0', '0', '6', '5', '0', '0', '6', '6', '0', '0',
89 '6', '7', '0', '0', '6', '8', '0', '0', '6', '9', '0', '0', '7', '0', '0',
90 '0', '7', '1', '0', '0', '7', '2', '0', '0', '7', '3', '0', '0', '7', '4',
91 '0', '0', '7', '5', '0', '0', '7', '6', '0', '0', '7', '7', '0', '0', '7',
92 '8', '0', '0', '7', '9', '0', '0', '8', '0', '0', '0', '8', '1', '0', '0',
93 '8', '2', '0', '0', '8', '3', '0', '0', '8', '4', '0', '0', '8', '5', '0',
94 '0', '8', '6', '0', '0', '8', '7', '0', '0', '8', '8', '0', '0', '8', '9',
95 '0', '0', '9', '0', '0', '0', '9', '1', '0', '0', '9', '2', '0', '0', '9',
96 '3', '0', '0', '9', '4', '0', '0', '9', '5', '0', '0', '9', '6', '0', '0',
97 '9', '7', '0', '0', '9', '8', '0', '0', '9', '9', '0', '1', '0', '0', '0',
98 '1', '0', '1', '0', '1', '0', '2', '0', '1', '0', '3', '0', '1', '0', '4',
99 '0', '1', '0', '5', '0', '1', '0', '6', '0', '1', '0', '7', '0', '1', '0',
100 '8', '0', '1', '0', '9', '0', '1', '1', '0', '0', '1', '1', '1', '0', '1',
101 '1', '2', '0', '1', '1', '3', '0', '1', '1', '4', '0', '1', '1', '5', '0',
102 '1', '1', '6', '0', '1', '1', '7', '0', '1', '1', '8', '0', '1', '1', '9',
103 '0', '1', '2', '0', '0', '1', '2', '1', '0', '1', '2', '2', '0', '1', '2',
104 '3', '0', '1', '2', '4', '0', '1', '2', '5', '0', '1', '2', '6', '0', '1',
105 '2', '7', '0', '1', '2', '8', '0', '1', '2', '9', '0', '1', '3', '0', '0',
106 '1', '3', '1', '0', '1', '3', '2', '0', '1', '3', '3', '0', '1', '3', '4',
107 '0', '1', '3', '5', '0', '1', '3', '6', '0', '1', '3', '7', '0', '1', '3',
108 '8', '0', '1', '3', '9', '0', '1', '4', '0', '0', '1', '4', '1', '0', '1',
109 '4', '2', '0', '1', '4', '3', '0', '1', '4', '4', '0', '1', '4', '5', '0',
110 '1', '4', '6', '0', '1', '4', '7', '0', '1', '4', '8', '0', '1', '4', '9',
111 '0', '1', '5', '0', '0', '1', '5', '1', '0', '1', '5', '2', '0', '1', '5',
112 '3', '0', '1', '5', '4', '0', '1', '5', '5', '0', '1', '5', '6', '0', '1',
113 '5', '7', '0', '1', '5', '8', '0', '1', '5', '9', '0', '1', '6', '0', '0',
114 '1', '6', '1', '0', '1', '6', '2', '0', '1', '6', '3', '0', '1', '6', '4',
115 '0', '1', '6', '5', '0', '1', '6', '6', '0', '1', '6', '7', '0', '1', '6',
116 '8', '0', '1', '6', '9', '0', '1', '7', '0', '0', '1', '7', '1', '0', '1',
117 '7', '2', '0', '1', '7', '3', '0', '1', '7', '4', '0', '1', '7', '5', '0',
118 '1', '7', '6', '0', '1', '7', '7', '0', '1', '7', '8', '0', '1', '7', '9',
119 '0', '1', '8', '0', '0', '1', '8', '1', '0', '1', '8', '2', '0', '1', '8',
120 '3', '0', '1', '8', '4', '0', '1', '8', '5', '0', '1', '8', '6', '0', '1',
121 '8', '7', '0', '1', '8', '8', '0', '1', '8', '9', '0', '1', '9', '0', '0',
122 '1', '9', '1', '0', '1', '9', '2', '0', '1', '9', '3', '0', '1', '9', '4',
123 '0', '1', '9', '5', '0', '1', '9', '6', '0', '1', '9', '7', '0', '1', '9',
124 '8', '0', '1', '9', '9', '0', '2', '0', '0', '0', '2', '0', '1', '0', '2',
125 '0', '2', '0', '2', '0', '3', '0', '2', '0', '4', '0', '2', '0', '5', '0',
126 '2', '0', '6', '0', '2', '0', '7', '0', '2', '0', '8', '0', '2', '0', '9',
127 '0', '2', '1', '0', '0', '2', '1', '1', '0', '2', '1', '2', '0', '2', '1',
128 '3', '0', '2', '1', '4', '0', '2', '1', '5', '0', '2', '1', '6', '0', '2',
129 '1', '7', '0', '2', '1', '8', '0', '2', '1', '9', '0', '2', '2', '0', '0',
130 '2', '2', '1', '0', '2', '2', '2', '0', '2', '2', '3', '0', '2', '2', '4',
131 '0', '2', '2', '5', '0', '2', '2', '6', '0', '2', '2', '7', '0', '2', '2',
132 '8', '0', '2', '2', '9', '0', '2', '3', '0', '0', '2', '3', '1', '0', '2',
133 '3', '2', '0', '2', '3', '3', '0', '2', '3', '4', '0', '2', '3', '5', '0',
134 '2', '3', '6', '0', '2', '3', '7', '0', '2', '3', '8', '0', '2', '3', '9',
135 '0', '2', '4', '0', '0', '2', '4', '1', '0', '2', '4', '2', '0', '2', '4',
136 '3', '0', '2', '4', '4', '0', '2', '4', '5', '0', '2', '4', '6', '0', '2',
137 '4', '7', '0', '2', '4', '8', '0', '2', '4', '9', '0', '2', '5', '0', '0',
138 '2', '5', '1', '0', '2', '5', '2', '0', '2', '5', '3', '0', '2', '5', '4',
139 '0', '2', '5', '5', '0', '2', '5', '6', '0', '2', '5', '7', '0', '2', '5',
140 '8', '0', '2', '5', '9', '0', '2', '6', '0', '0', '2', '6', '1', '0', '2',
141 '6', '2', '0', '2', '6', '3', '0', '2', '6', '4', '0', '2', '6', '5', '0',
142 '2', '6', '6', '0', '2', '6', '7', '0', '2', '6', '8', '0', '2', '6', '9',
143 '0', '2', '7', '0', '0', '2', '7', '1', '0', '2', '7', '2', '0', '2', '7',
144 '3', '0', '2', '7', '4', '0', '2', '7', '5', '0', '2', '7', '6', '0', '2',
145 '7', '7', '0', '2', '7', '8', '0', '2', '7', '9', '0', '2', '8', '0', '0',
146 '2', '8', '1', '0', '2', '8', '2', '0', '2', '8', '3', '0', '2', '8', '4',
147 '0', '2', '8', '5', '0', '2', '8', '6', '0', '2', '8', '7', '0', '2', '8',
148 '8', '0', '2', '8', '9', '0', '2', '9', '0', '0', '2', '9', '1', '0', '2',
149 '9', '2', '0', '2', '9', '3', '0', '2', '9', '4', '0', '2', '9', '5', '0',
150 '2', '9', '6', '0', '2', '9', '7', '0', '2', '9', '8', '0', '2', '9', '9',
151 '0', '3', '0', '0', '0', '3', '0', '1', '0', '3', '0', '2', '0', '3', '0',
152 '3', '0', '3', '0', '4', '0', '3', '0', '5', '0', '3', '0', '6', '0', '3',
153 '0', '7', '0', '3', '0', '8', '0', '3', '0', '9', '0', '3', '1', '0', '0',
154 '3', '1', '1', '0', '3', '1', '2', '0', '3', '1', '3', '0', '3', '1', '4',
155 '0', '3', '1', '5', '0', '3', '1', '6', '0', '3', '1', '7', '0', '3', '1',
156 '8', '0', '3', '1', '9', '0', '3', '2', '0', '0', '3', '2', '1', '0', '3',
157 '2', '2', '0', '3', '2', '3', '0', '3', '2', '4', '0', '3', '2', '5', '0',
158 '3', '2', '6', '0', '3', '2', '7', '0', '3', '2', '8', '0', '3', '2', '9',
159 '0', '3', '3', '0', '0', '3', '3', '1', '0', '3', '3', '2', '0', '3', '3',
160 '3', '0', '3', '3', '4', '0', '3', '3', '5', '0', '3', '3', '6', '0', '3',
161 '3', '7', '0', '3', '3', '8', '0', '3', '3', '9', '0', '3', '4', '0', '0',
162 '3', '4', '1', '0', '3', '4', '2', '0', '3', '4', '3', '0', '3', '4', '4',
163 '0', '3', '4', '5', '0', '3', '4', '6', '0', '3', '4', '7', '0', '3', '4',
164 '8', '0', '3', '4', '9', '0', '3', '5', '0', '0', '3', '5', '1', '0', '3',
165 '5', '2', '0', '3', '5', '3', '0', '3', '5', '4', '0', '3', '5', '5', '0',
166 '3', '5', '6', '0', '3', '5', '7', '0', '3', '5', '8', '0', '3', '5', '9',
167 '0', '3', '6', '0', '0', '3', '6', '1', '0', '3', '6', '2', '0', '3', '6',
168 '3', '0', '3', '6', '4', '0', '3', '6', '5', '0', '3', '6', '6', '0', '3',
169 '6', '7', '0', '3', '6', '8', '0', '3', '6', '9', '0', '3', '7', '0', '0',
170 '3', '7', '1', '0', '3', '7', '2', '0', '3', '7', '3', '0', '3', '7', '4',
171 '0', '3', '7', '5', '0', '3', '7', '6', '0', '3', '7', '7', '0', '3', '7',
172 '8', '0', '3', '7', '9', '0', '3', '8', '0', '0', '3', '8', '1', '0', '3',
173 '8', '2', '0', '3', '8', '3', '0', '3', '8', '4', '0', '3', '8', '5', '0',
174 '3', '8', '6', '0', '3', '8', '7', '0', '3', '8', '8', '0', '3', '8', '9',
175 '0', '3', '9', '0', '0', '3', '9', '1', '0', '3', '9', '2', '0', '3', '9',
176 '3', '0', '3', '9', '4', '0', '3', '9', '5', '0', '3', '9', '6', '0', '3',
177 '9', '7', '0', '3', '9', '8', '0', '3', '9', '9', '0', '4', '0', '0', '0',
178 '4', '0', '1', '0', '4', '0', '2', '0', '4', '0', '3', '0', '4', '0', '4',
179 '0', '4', '0', '5', '0', '4', '0', '6', '0', '4', '0', '7', '0', '4', '0',
180 '8', '0', '4', '0', '9', '0', '4', '1', '0', '0', '4', '1', '1', '0', '4',
181 '1', '2', '0', '4', '1', '3', '0', '4', '1', '4', '0', '4', '1', '5', '0',
182 '4', '1', '6', '0', '4', '1', '7', '0', '4', '1', '8', '0', '4', '1', '9',
183 '0', '4', '2', '0', '0', '4', '2', '1', '0', '4', '2', '2', '0', '4', '2',
184 '3', '0', '4', '2', '4', '0', '4', '2', '5', '0', '4', '2', '6', '0', '4',
185 '2', '7', '0', '4', '2', '8', '0', '4', '2', '9', '0', '4', '3', '0', '0',
186 '4', '3', '1', '0', '4', '3', '2', '0', '4', '3', '3', '0', '4', '3', '4',
187 '0', '4', '3', '5', '0', '4', '3', '6', '0', '4', '3', '7', '0', '4', '3',
188 '8', '0', '4', '3', '9', '0', '4', '4', '0', '0', '4', '4', '1', '0', '4',
189 '4', '2', '0', '4', '4', '3', '0', '4', '4', '4', '0', '4', '4', '5', '0',
190 '4', '4', '6', '0', '4', '4', '7', '0', '4', '4', '8', '0', '4', '4', '9',
191 '0', '4', '5', '0', '0', '4', '5', '1', '0', '4', '5', '2', '0', '4', '5',
192 '3', '0', '4', '5', '4', '0', '4', '5', '5', '0', '4', '5', '6', '0', '4',
193 '5', '7', '0', '4', '5', '8', '0', '4', '5', '9', '0', '4', '6', '0', '0',
194 '4', '6', '1', '0', '4', '6', '2', '0', '4', '6', '3', '0', '4', '6', '4',
195 '0', '4', '6', '5', '0', '4', '6', '6', '0', '4', '6', '7', '0', '4', '6',
196 '8', '0', '4', '6', '9', '0', '4', '7', '0', '0', '4', '7', '1', '0', '4',
197 '7', '2', '0', '4', '7', '3', '0', '4', '7', '4', '0', '4', '7', '5', '0',
198 '4', '7', '6', '0', '4', '7', '7', '0', '4', '7', '8', '0', '4', '7', '9',
199 '0', '4', '8', '0', '0', '4', '8', '1', '0', '4', '8', '2', '0', '4', '8',
200 '3', '0', '4', '8', '4', '0', '4', '8', '5', '0', '4', '8', '6', '0', '4',
201 '8', '7', '0', '4', '8', '8', '0', '4', '8', '9', '0', '4', '9', '0', '0',
202 '4', '9', '1', '0', '4', '9', '2', '0', '4', '9', '3', '0', '4', '9', '4',
203 '0', '4', '9', '5', '0', '4', '9', '6', '0', '4', '9', '7', '0', '4', '9',
204 '8', '0', '4', '9', '9', '0', '5', '0', '0', '0', '5', '0', '1', '0', '5',
205 '0', '2', '0', '5', '0', '3', '0', '5', '0', '4', '0', '5', '0', '5', '0',
206 '5', '0', '6', '0', '5', '0', '7', '0', '5', '0', '8', '0', '5', '0', '9',
207 '0', '5', '1', '0', '0', '5', '1', '1', '0', '5', '1', '2', '0', '5', '1',
208 '3', '0', '5', '1', '4', '0', '5', '1', '5', '0', '5', '1', '6', '0', '5',
209 '1', '7', '0', '5', '1', '8', '0', '5', '1', '9', '0', '5', '2', '0', '0',
210 '5', '2', '1', '0', '5', '2', '2', '0', '5', '2', '3', '0', '5', '2', '4',
211 '0', '5', '2', '5', '0', '5', '2', '6', '0', '5', '2', '7', '0', '5', '2',
212 '8', '0', '5', '2', '9', '0', '5', '3', '0', '0', '5', '3', '1', '0', '5',
213 '3', '2', '0', '5', '3', '3', '0', '5', '3', '4', '0', '5', '3', '5', '0',
214 '5', '3', '6', '0', '5', '3', '7', '0', '5', '3', '8', '0', '5', '3', '9',
215 '0', '5', '4', '0', '0', '5', '4', '1', '0', '5', '4', '2', '0', '5', '4',
216 '3', '0', '5', '4', '4', '0', '5', '4', '5', '0', '5', '4', '6', '0', '5',
217 '4', '7', '0', '5', '4', '8', '0', '5', '4', '9', '0', '5', '5', '0', '0',
218 '5', '5', '1', '0', '5', '5', '2', '0', '5', '5', '3', '0', '5', '5', '4',
219 '0', '5', '5', '5', '0', '5', '5', '6', '0', '5', '5', '7', '0', '5', '5',
220 '8', '0', '5', '5', '9', '0', '5', '6', '0', '0', '5', '6', '1', '0', '5',
221 '6', '2', '0', '5', '6', '3', '0', '5', '6', '4', '0', '5', '6', '5', '0',
222 '5', '6', '6', '0', '5', '6', '7', '0', '5', '6', '8', '0', '5', '6', '9',
223 '0', '5', '7', '0', '0', '5', '7', '1', '0', '5', '7', '2', '0', '5', '7',
224 '3', '0', '5', '7', '4', '0', '5', '7', '5', '0', '5', '7', '6', '0', '5',
225 '7', '7', '0', '5', '7', '8', '0', '5', '7', '9', '0', '5', '8', '0', '0',
226 '5', '8', '1', '0', '5', '8', '2', '0', '5', '8', '3', '0', '5', '8', '4',
227 '0', '5', '8', '5', '0', '5', '8', '6', '0', '5', '8', '7', '0', '5', '8',
228 '8', '0', '5', '8', '9', '0', '5', '9', '0', '0', '5', '9', '1', '0', '5',
229 '9', '2', '0', '5', '9', '3', '0', '5', '9', '4', '0', '5', '9', '5', '0',
230 '5', '9', '6', '0', '5', '9', '7', '0', '5', '9', '8', '0', '5', '9', '9',
231 '0', '6', '0', '0', '0', '6', '0', '1', '0', '6', '0', '2', '0', '6', '0',
232 '3', '0', '6', '0', '4', '0', '6', '0', '5', '0', '6', '0', '6', '0', '6',
233 '0', '7', '0', '6', '0', '8', '0', '6', '0', '9', '0', '6', '1', '0', '0',
234 '6', '1', '1', '0', '6', '1', '2', '0', '6', '1', '3', '0', '6', '1', '4',
235 '0', '6', '1', '5', '0', '6', '1', '6', '0', '6', '1', '7', '0', '6', '1',
236 '8', '0', '6', '1', '9', '0', '6', '2', '0', '0', '6', '2', '1', '0', '6',
237 '2', '2', '0', '6', '2', '3', '0', '6', '2', '4', '0', '6', '2', '5', '0',
238 '6', '2', '6', '0', '6', '2', '7', '0', '6', '2', '8', '0', '6', '2', '9',
239 '0', '6', '3', '0', '0', '6', '3', '1', '0', '6', '3', '2', '0', '6', '3',
240 '3', '0', '6', '3', '4', '0', '6', '3', '5', '0', '6', '3', '6', '0', '6',
241 '3', '7', '0', '6', '3', '8', '0', '6', '3', '9', '0', '6', '4', '0', '0',
242 '6', '4', '1', '0', '6', '4', '2', '0', '6', '4', '3', '0', '6', '4', '4',
243 '0', '6', '4', '5', '0', '6', '4', '6', '0', '6', '4', '7', '0', '6', '4',
244 '8', '0', '6', '4', '9', '0', '6', '5', '0', '0', '6', '5', '1', '0', '6',
245 '5', '2', '0', '6', '5', '3', '0', '6', '5', '4', '0', '6', '5', '5', '0',
246 '6', '5', '6', '0', '6', '5', '7', '0', '6', '5', '8', '0', '6', '5', '9',
247 '0', '6', '6', '0', '0', '6', '6', '1', '0', '6', '6', '2', '0', '6', '6',
248 '3', '0', '6', '6', '4', '0', '6', '6', '5', '0', '6', '6', '6', '0', '6',
249 '6', '7', '0', '6', '6', '8', '0', '6', '6', '9', '0', '6', '7', '0', '0',
250 '6', '7', '1', '0', '6', '7', '2', '0', '6', '7', '3', '0', '6', '7', '4',
251 '0', '6', '7', '5', '0', '6', '7', '6', '0', '6', '7', '7', '0', '6', '7',
252 '8', '0', '6', '7', '9', '0', '6', '8', '0', '0', '6', '8', '1', '0', '6',
253 '8', '2', '0', '6', '8', '3', '0', '6', '8', '4', '0', '6', '8', '5', '0',
254 '6', '8', '6', '0', '6', '8', '7', '0', '6', '8', '8', '0', '6', '8', '9',
255 '0', '6', '9', '0', '0', '6', '9', '1', '0', '6', '9', '2', '0', '6', '9',
256 '3', '0', '6', '9', '4', '0', '6', '9', '5', '0', '6', '9', '6', '0', '6',
257 '9', '7', '0', '6', '9', '8', '0', '6', '9', '9', '0', '7', '0', '0', '0',
258 '7', '0', '1', '0', '7', '0', '2', '0', '7', '0', '3', '0', '7', '0', '4',
259 '0', '7', '0', '5', '0', '7', '0', '6', '0', '7', '0', '7', '0', '7', '0',
260 '8', '0', '7', '0', '9', '0', '7', '1', '0', '0', '7', '1', '1', '0', '7',
261 '1', '2', '0', '7', '1', '3', '0', '7', '1', '4', '0', '7', '1', '5', '0',
262 '7', '1', '6', '0', '7', '1', '7', '0', '7', '1', '8', '0', '7', '1', '9',
263 '0', '7', '2', '0', '0', '7', '2', '1', '0', '7', '2', '2', '0', '7', '2',
264 '3', '0', '7', '2', '4', '0', '7', '2', '5', '0', '7', '2', '6', '0', '7',
265 '2', '7', '0', '7', '2', '8', '0', '7', '2', '9', '0', '7', '3', '0', '0',
266 '7', '3', '1', '0', '7', '3', '2', '0', '7', '3', '3', '0', '7', '3', '4',
267 '0', '7', '3', '5', '0', '7', '3', '6', '0', '7', '3', '7', '0', '7', '3',
268 '8', '0', '7', '3', '9', '0', '7', '4', '0', '0', '7', '4', '1', '0', '7',
269 '4', '2', '0', '7', '4', '3', '0', '7', '4', '4', '0', '7', '4', '5', '0',
270 '7', '4', '6', '0', '7', '4', '7', '0', '7', '4', '8', '0', '7', '4', '9',
271 '0', '7', '5', '0', '0', '7', '5', '1', '0', '7', '5', '2', '0', '7', '5',
272 '3', '0', '7', '5', '4', '0', '7', '5', '5', '0', '7', '5', '6', '0', '7',
273 '5', '7', '0', '7', '5', '8', '0', '7', '5', '9', '0', '7', '6', '0', '0',
274 '7', '6', '1', '0', '7', '6', '2', '0', '7', '6', '3', '0', '7', '6', '4',
275 '0', '7', '6', '5', '0', '7', '6', '6', '0', '7', '6', '7', '0', '7', '6',
276 '8', '0', '7', '6', '9', '0', '7', '7', '0', '0', '7', '7', '1', '0', '7',
277 '7', '2', '0', '7', '7', '3', '0', '7', '7', '4', '0', '7', '7', '5', '0',
278 '7', '7', '6', '0', '7', '7', '7', '0', '7', '7', '8', '0', '7', '7', '9',
279 '0', '7', '8', '0', '0', '7', '8', '1', '0', '7', '8', '2', '0', '7', '8',
280 '3', '0', '7', '8', '4', '0', '7', '8', '5', '0', '7', '8', '6', '0', '7',
281 '8', '7', '0', '7', '8', '8', '0', '7', '8', '9', '0', '7', '9', '0', '0',
282 '7', '9', '1', '0', '7', '9', '2', '0', '7', '9', '3', '0', '7', '9', '4',
283 '0', '7', '9', '5', '0', '7', '9', '6', '0', '7', '9', '7', '0', '7', '9',
284 '8', '0', '7', '9', '9', '0', '8', '0', '0', '0', '8', '0', '1', '0', '8',
285 '0', '2', '0', '8', '0', '3', '0', '8', '0', '4', '0', '8', '0', '5', '0',
286 '8', '0', '6', '0', '8', '0', '7', '0', '8', '0', '8', '0', '8', '0', '9',
287 '0', '8', '1', '0', '0', '8', '1', '1', '0', '8', '1', '2', '0', '8', '1',
288 '3', '0', '8', '1', '4', '0', '8', '1', '5', '0', '8', '1', '6', '0', '8',
289 '1', '7', '0', '8', '1', '8', '0', '8', '1', '9', '0', '8', '2', '0', '0',
290 '8', '2', '1', '0', '8', '2', '2', '0', '8', '2', '3', '0', '8', '2', '4',
291 '0', '8', '2', '5', '0', '8', '2', '6', '0', '8', '2', '7', '0', '8', '2',
292 '8', '0', '8', '2', '9', '0', '8', '3', '0', '0', '8', '3', '1', '0', '8',
293 '3', '2', '0', '8', '3', '3', '0', '8', '3', '4', '0', '8', '3', '5', '0',
294 '8', '3', '6', '0', '8', '3', '7', '0', '8', '3', '8', '0', '8', '3', '9',
295 '0', '8', '4', '0', '0', '8', '4', '1', '0', '8', '4', '2', '0', '8', '4',
296 '3', '0', '8', '4', '4', '0', '8', '4', '5', '0', '8', '4', '6', '0', '8',
297 '4', '7', '0', '8', '4', '8', '0', '8', '4', '9', '0', '8', '5', '0', '0',
298 '8', '5', '1', '0', '8', '5', '2', '0', '8', '5', '3', '0', '8', '5', '4',
299 '0', '8', '5', '5', '0', '8', '5', '6', '0', '8', '5', '7', '0', '8', '5',
300 '8', '0', '8', '5', '9', '0', '8', '6', '0', '0', '8', '6', '1', '0', '8',
301 '6', '2', '0', '8', '6', '3', '0', '8', '6', '4', '0', '8', '6', '5', '0',
302 '8', '6', '6', '0', '8', '6', '7', '0', '8', '6', '8', '0', '8', '6', '9',
303 '0', '8', '7', '0', '0', '8', '7', '1', '0', '8', '7', '2', '0', '8', '7',
304 '3', '0', '8', '7', '4', '0', '8', '7', '5', '0', '8', '7', '6', '0', '8',
305 '7', '7', '0', '8', '7', '8', '0', '8', '7', '9', '0', '8', '8', '0', '0',
306 '8', '8', '1', '0', '8', '8', '2', '0', '8', '8', '3', '0', '8', '8', '4',
307 '0', '8', '8', '5', '0', '8', '8', '6', '0', '8', '8', '7', '0', '8', '8',
308 '8', '0', '8', '8', '9', '0', '8', '9', '0', '0', '8', '9', '1', '0', '8',
309 '9', '2', '0', '8', '9', '3', '0', '8', '9', '4', '0', '8', '9', '5', '0',
310 '8', '9', '6', '0', '8', '9', '7', '0', '8', '9', '8', '0', '8', '9', '9',
311 '0', '9', '0', '0', '0', '9', '0', '1', '0', '9', '0', '2', '0', '9', '0',
312 '3', '0', '9', '0', '4', '0', '9', '0', '5', '0', '9', '0', '6', '0', '9',
313 '0', '7', '0', '9', '0', '8', '0', '9', '0', '9', '0', '9', '1', '0', '0',
314 '9', '1', '1', '0', '9', '1', '2', '0', '9', '1', '3', '0', '9', '1', '4',
315 '0', '9', '1', '5', '0', '9', '1', '6', '0', '9', '1', '7', '0', '9', '1',
316 '8', '0', '9', '1', '9', '0', '9', '2', '0', '0', '9', '2', '1', '0', '9',
317 '2', '2', '0', '9', '2', '3', '0', '9', '2', '4', '0', '9', '2', '5', '0',
318 '9', '2', '6', '0', '9', '2', '7', '0', '9', '2', '8', '0', '9', '2', '9',
319 '0', '9', '3', '0', '0', '9', '3', '1', '0', '9', '3', '2', '0', '9', '3',
320 '3', '0', '9', '3', '4', '0', '9', '3', '5', '0', '9', '3', '6', '0', '9',
321 '3', '7', '0', '9', '3', '8', '0', '9', '3', '9', '0', '9', '4', '0', '0',
322 '9', '4', '1', '0', '9', '4', '2', '0', '9', '4', '3', '0', '9', '4', '4',
323 '0', '9', '4', '5', '0', '9', '4', '6', '0', '9', '4', '7', '0', '9', '4',
324 '8', '0', '9', '4', '9', '0', '9', '5', '0', '0', '9', '5', '1', '0', '9',
325 '5', '2', '0', '9', '5', '3', '0', '9', '5', '4', '0', '9', '5', '5', '0',
326 '9', '5', '6', '0', '9', '5', '7', '0', '9', '5', '8', '0', '9', '5', '9',
327 '0', '9', '6', '0', '0', '9', '6', '1', '0', '9', '6', '2', '0', '9', '6',
328 '3', '0', '9', '6', '4', '0', '9', '6', '5', '0', '9', '6', '6', '0', '9',
329 '6', '7', '0', '9', '6', '8', '0', '9', '6', '9', '0', '9', '7', '0', '0',
330 '9', '7', '1', '0', '9', '7', '2', '0', '9', '7', '3', '0', '9', '7', '4',
331 '0', '9', '7', '5', '0', '9', '7', '6', '0', '9', '7', '7', '0', '9', '7',
332 '8', '0', '9', '7', '9', '0', '9', '8', '0', '0', '9', '8', '1', '0', '9',
333 '8', '2', '0', '9', '8', '3', '0', '9', '8', '4', '0', '9', '8', '5', '0',
334 '9', '8', '6', '0', '9', '8', '7', '0', '9', '8', '8', '0', '9', '8', '9',
335 '0', '9', '9', '0', '0', '9', '9', '1', '0', '9', '9', '2', '0', '9', '9',
336 '3', '0', '9', '9', '4', '0', '9', '9', '5', '0', '9', '9', '6', '0', '9',
337 '9', '7', '0', '9', '9', '8', '0', '9', '9', '9'};