Commit 747ceb9f authored by fbarchard@google.com's avatar fbarchard@google.com

FixedDiv using integers

BUG=250
TEST=fixed div unittest
R=dingkai@google.com, ryanpetrie@google.com

Review URL: https://webrtc-codereview.appspot.com/1681004

git-svn-id: http://libyuv.googlecode.com/svn/trunk@732 16f28f9a-4ce2-e073-06de-1de4eb20be90
parent 11404545
Name: libyuv
URL: http://code.google.com/p/libyuv/
Version: 731
Version: 732
License: BSD
License File: LICENSE
......
......@@ -130,6 +130,7 @@ extern "C" {
// TODO(fbarchard): Port to gcc.
#if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && defined(_MSC_VER)
#define HAS_ARGBCOLORTABLEROW_X86
#define HAS_FIXEDDIV
// Visual C 2012 required for AVX2.
#if _MSC_VER >= 1700
#define HAS_ARGBSHUFFLEROW_AVX2
......@@ -1516,16 +1517,13 @@ void SobelXYRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
uint8* dst_argb, int width);
void SobelXYRow_NEON(const uint8* src_sobelx, const uint8* src_sobely,
uint8* dst_argb, int width);
extern const float kRecipTable[4097];
// Divide num by div and return value as 16.16 fixed point.
#ifdef __cplusplus
static __inline int FixedDiv(int num, int div) {
if (static_cast<unsigned int>(div) <= 4096u) {
return static_cast<int>(num * kRecipTable[div]);
}
return static_cast<int>((static_cast<int64>(num) << 16) / div);
}
// Divide num by div and return as 16.16 fixed point result.
int FixedDiv_C(int num, int div);
#ifdef HAS_FIXEDDIV
int FixedDiv(int num, int div);
#else
#define FixedDiv FixedDiv_C
#endif
#ifdef __cplusplus
......
......@@ -11,6 +11,6 @@
#ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT
#define INCLUDE_LIBYUV_VERSION_H_
#define LIBYUV_VERSION 731
#define LIBYUV_VERSION 732
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT
......@@ -59,695 +59,701 @@ static __inline uint32 Abs(int32 v) {
}
#endif // USE_BRANCHLESS
// floating point reciprocal.
extern const float kRecipTable[4097] = {
0.f, 65536.f, 32768.f, 21845.333984f, 16384.000000f, 13107.200195f,
10922.666992f, 9362.286133f, 8192.000000f, 7281.777832f, 6553.600098f,
5957.818359f, 5461.333496f, 5041.230957f, 4681.143066f, 4369.066895f,
4096.000000f, 3855.058838f, 3640.888916f, 3449.263184f, 3276.800049f,
3120.761963f, 2978.909180f, 2849.391357f, 2730.666748f, 2621.439941f,
2520.615479f, 2427.259277f, 2340.571533f, 2259.862061f, 2184.533447f,
2114.064453f, 2048.000000f, 1985.939453f, 1927.529419f, 1872.457153f,
1820.444458f, 1771.243286f, 1724.631592f, 1680.410278f, 1638.400024f,
1598.438965f, 1560.380981f, 1524.093018f, 1489.454590f, 1456.355591f,
1424.695679f, 1394.382935f, 1365.333374f, 1337.469360f, 1310.719971f,
1285.019653f, 1260.307739f, 1236.528320f, 1213.629639f, 1191.563599f,
1170.285767f, 1149.754395f, 1129.931030f, 1110.779663f, 1092.266724f,
1074.360596f, 1057.032227f, 1040.254028f, 1024.000000f, 1008.246155f,
992.969727f, 978.149231f, 963.764709f, 949.797119f, 936.228577f, 923.042236f,
910.222229f, 897.753418f, 885.621643f, 873.813354f, 862.315796f, 851.116882f,
840.205139f, 829.569641f, 819.200012f, 809.086426f, 799.219482f, 789.590332f,
780.190491f, 771.011780f, 762.046509f, 753.287354f, 744.727295f, 736.359558f,
728.177795f, 720.175842f, 712.347839f, 704.688171f, 697.191467f, 689.852661f,
682.666687f, 675.628845f, 668.734680f, 661.979797f, 655.359985f, 648.871277f,
642.509827f, 636.271851f, 630.153870f, 624.152405f, 618.264160f, 612.485962f,
606.814819f, 601.247681f, 595.781799f, 590.414429f, 585.142883f, 579.964600f,
574.877197f, 569.878235f, 564.965515f, 560.136780f, 555.389832f, 550.722717f,
546.133362f, 541.619812f, 537.180298f, 532.812988f, 528.516113f, 524.288025f,
520.127014f, 516.031494f, 512.000000f, 508.031006f, 504.123077f, 500.274811f,
496.484863f, 492.751892f, 489.074615f, 485.451843f, 481.882355f, 478.364960f,
474.898560f, 471.482025f, 468.114288f, 464.794312f, 461.521118f, 458.293701f,
455.111115f, 451.972412f, 448.876709f, 445.823120f, 442.810822f, 439.838928f,
436.906677f, 434.013245f, 431.157898f, 428.339874f, 425.558441f, 422.812897f,
420.102570f, 417.426758f, 414.784821f, 412.176086f, 409.600006f, 407.055908f,
404.543213f, 402.061340f, 399.609741f, 397.187866f, 394.795166f, 392.431152f,
390.095245f, 387.786987f, 385.505890f, 383.251465f, 381.023254f, 378.820801f,
376.643677f, 374.491425f, 372.363647f, 370.259888f, 368.179779f, 366.122894f,
364.088898f, 362.077362f, 360.087921f, 358.120209f, 356.173920f, 354.248657f,
352.344086f, 350.459900f, 348.595734f, 346.751312f, 344.926331f, 343.120422f,
341.333344f, 339.564758f, 337.814423f, 336.082062f, 334.367340f, 332.670044f,
330.989899f, 329.326630f, 327.679993f, 326.049744f, 324.435638f, 322.837433f,
321.254913f, 319.687805f, 318.135925f, 316.599030f, 315.076935f, 313.569366f,
312.076202f, 310.597168f, 309.132080f, 307.680756f, 306.242981f, 304.818604f,
303.407410f, 302.009216f, 300.623840f, 299.251129f, 297.890900f, 296.542999f,
295.207214f, 293.883423f, 292.571442f, 291.271118f, 289.982300f, 288.704834f,
287.438599f, 286.183411f, 284.939117f, 283.705627f, 282.482758f, 281.270386f,
280.068390f, 278.876587f, 277.694916f, 276.523193f, 275.361359f, 274.209198f,
273.066681f, 271.933624f, 270.809906f, 269.695465f, 268.590149f, 267.493866f,
266.406494f, 265.327942f, 264.258057f, 263.196777f, 262.144012f, 261.099609f,
260.063507f, 259.035583f, 258.015747f, 257.003937f, 256.000000f, 255.003891f,
254.015503f, 253.034744f, 252.061539f, 251.095779f, 250.137405f, 249.186310f,
248.242432f, 247.305664f, 246.375946f, 245.453186f, 244.537308f, 243.628250f,
242.725922f, 241.830261f, 240.941177f, 240.058609f, 239.182480f, 238.312729f,
237.449280f, 236.592056f, 235.741013f, 234.896057f, 234.057144f, 233.224197f,
232.397156f, 231.575974f, 230.760559f, 229.950882f, 229.146851f, 228.348434f,
227.555557f, 226.768173f, 225.986206f, 225.209625f, 224.438354f, 223.672348f,
222.911560f, 222.155930f, 221.405411f, 220.659927f, 219.919464f, 219.183945f,
218.453339f, 217.727570f, 217.006622f, 216.290436f, 215.578949f, 214.872131f,
214.169937f, 213.472305f, 212.779221f, 212.090622f, 211.406448f, 210.726685f,
210.051285f, 209.380188f, 208.713379f, 208.050797f, 207.392410f, 206.738174f,
206.088043f, 205.442001f, 204.800003f, 204.161987f, 203.527954f, 202.897827f,
202.271606f, 201.649231f, 201.030670f, 200.415909f, 199.804871f, 199.197571f,
198.593933f, 197.993958f, 197.397583f, 196.804810f, 196.215576f, 195.629852f,
195.047623f, 194.468842f, 193.893494f, 193.321533f, 192.752945f, 192.187683f,
191.625732f, 191.067062f, 190.511627f, 189.959427f, 189.410400f, 188.864548f,
188.321838f, 187.782242f, 187.245712f, 186.712250f, 186.181824f, 185.654388f,
185.129944f, 184.608444f, 184.089890f, 183.574234f, 183.061447f, 182.551529f,
182.044449f, 181.540161f, 181.038681f, 180.539948f, 180.043961f, 179.550690f,
179.060104f, 178.572205f, 178.086960f, 177.604340f, 177.124329f, 176.646896f,
176.172043f, 175.699738f, 175.229950f, 174.762665f, 174.297867f, 173.835541f,
173.375656f, 172.918213f, 172.463165f, 172.010498f, 171.560211f, 171.112274f,
170.666672f, 170.223373f, 169.782379f, 169.343674f, 168.907211f, 168.473007f,
168.041031f, 167.611252f, 167.183670f, 166.758270f, 166.335022f, 165.913925f,
165.494949f, 165.078079f, 164.663315f, 164.250626f, 163.839996f, 163.431427f,
163.024872f, 162.620346f, 162.217819f, 161.817291f, 161.418716f, 161.022110f,
160.627457f, 160.234726f, 159.843903f, 159.454987f, 159.067963f, 158.682816f,
158.299515f, 157.918076f, 157.538467f, 157.160675f, 156.784683f, 156.410507f,
156.038101f, 155.667465f, 155.298584f, 154.931442f, 154.566040f, 154.202347f,
153.840378f, 153.480087f, 153.121490f, 152.764572f, 152.409302f, 152.055679f,
151.703705f, 151.353348f, 151.004608f, 150.657471f, 150.311920f, 149.967957f,
149.625565f, 149.284744f, 148.945450f, 148.607712f, 148.271500f, 147.936798f,
147.603607f, 147.271912f, 146.941711f, 146.612976f, 146.285721f, 145.959915f,
145.635559f, 145.312637f, 144.991150f, 144.671082f, 144.352417f, 144.035172f,
143.719299f, 143.404816f, 143.091705f, 142.779953f, 142.469559f, 142.160522f,
141.852814f, 141.546432f, 141.241379f, 140.937637f, 140.635193f, 140.334045f,
140.034195f, 139.735611f, 139.438293f, 139.142258f, 138.847458f, 138.553909f,
138.261597f, 137.970520f, 137.680679f, 137.392029f, 137.104599f, 136.818375f,
136.533340f, 136.249481f, 135.966812f, 135.685303f, 135.404953f, 135.125778f,
134.847733f, 134.570847f, 134.295074f, 134.020447f, 133.746933f, 133.474548f,
133.203247f, 132.933060f, 132.663971f, 132.395966f, 132.129028f, 131.863174f,
131.598389f, 131.334671f, 131.072006f, 130.810379f, 130.549805f, 130.290253f,
130.031754f, 129.774261f, 129.517792f, 129.262329f, 129.007874f, 128.754425f,
128.501968f, 128.250488f, 128.000000f, 127.750488f, 127.501945f, 127.254372f,
127.007751f, 126.762093f, 126.517372f, 126.273605f, 126.030769f, 125.788864f,
125.547890f, 125.307838f, 125.068703f, 124.830475f, 124.593155f, 124.356735f,
124.121216f, 123.886581f, 123.652832f, 123.419960f, 123.187973f, 122.956848f,
122.726593f, 122.497200f, 122.268654f, 122.040970f, 121.814125f, 121.588127f,
121.362961f, 121.138634f, 120.915131f, 120.692451f, 120.470589f, 120.249542f,
120.029305f, 119.809875f, 119.591240f, 119.373405f, 119.156364f, 118.940109f,
118.724640f, 118.509949f, 118.296028f, 118.082886f, 117.870506f, 117.658890f,
117.448029f, 117.237923f, 117.028572f, 116.819962f, 116.612099f, 116.404976f,
116.198578f, 115.992920f, 115.787987f, 115.583771f, 115.380280f, 115.177505f,
114.975441f, 114.774078f, 114.573425f, 114.373474f, 114.174217f, 113.975655f,
113.777779f, 113.580589f, 113.384087f, 113.188255f, 112.993103f, 112.798622f,
112.604813f, 112.411667f, 112.219177f, 112.027351f, 111.836174f, 111.645653f,
111.455780f, 111.266556f, 111.077965f, 110.890015f, 110.702705f, 110.516022f,
110.329964f, 110.144539f, 109.959732f, 109.775543f, 109.591972f, 109.409012f,
109.226669f, 109.044922f, 108.863785f, 108.683250f, 108.503311f, 108.323967f,
108.145218f, 107.967049f, 107.789474f, 107.612480f, 107.436066f, 107.260231f,
107.084969f, 106.910278f, 106.736153f, 106.562599f, 106.389610f, 106.217178f,
106.045311f, 105.873993f, 105.703224f, 105.533012f, 105.363342f, 105.194221f,
105.025642f, 104.857597f, 104.690094f, 104.523125f, 104.356689f, 104.190781f,
104.025398f, 103.860542f, 103.696205f, 103.532387f, 103.369087f, 103.206299f,
103.044022f, 102.882263f, 102.721001f, 102.560249f, 102.400002f, 102.240250f,
102.080994f, 101.922241f, 101.763977f, 101.606201f, 101.448914f, 101.292114f,
101.135803f, 100.979973f, 100.824615f, 100.669739f, 100.515335f, 100.361412f,
100.207954f, 100.054962f, 99.902435f, 99.750381f, 99.598785f, 99.447647f,
99.296967f, 99.146744f, 98.996979f, 98.847664f, 98.698792f, 98.550377f,
98.402405f, 98.254875f, 98.107788f, 97.961136f, 97.814926f, 97.669151f,
97.523811f, 97.378899f, 97.234421f, 97.090370f, 96.946747f, 96.803543f,
96.660767f, 96.518410f, 96.376472f, 96.234947f, 96.093842f, 95.953148f,
95.812866f, 95.672989f, 95.533531f, 95.394470f, 95.255814f, 95.117561f,
94.979713f, 94.842255f, 94.705200f, 94.568542f, 94.432274f, 94.296402f,
94.160919f, 94.025826f, 93.891121f, 93.756798f, 93.622856f, 93.489304f,
93.356125f, 93.223328f, 93.090912f, 92.958862f, 92.827194f, 92.695900f,
92.564972f, 92.434418f, 92.304222f, 92.174400f, 92.044945f, 91.915848f,
91.787117f, 91.658745f, 91.530724f, 91.403069f, 91.275764f, 91.148819f,
91.022224f, 90.895981f, 90.770081f, 90.644539f, 90.519341f, 90.394485f,
90.269974f, 90.145805f, 90.021980f, 89.898491f, 89.775345f, 89.652534f,
89.530052f, 89.407913f, 89.286102f, 89.164627f, 89.043480f, 88.922661f,
88.802170f, 88.681999f, 88.562164f, 88.442642f, 88.323448f, 88.204575f,
88.086021f, 87.967789f, 87.849869f, 87.732262f, 87.614975f, 87.498001f,
87.381332f, 87.264977f, 87.148933f, 87.033203f, 86.917770f, 86.802650f,
86.687828f, 86.573318f, 86.459106f, 86.345192f, 86.231583f, 86.118263f,
86.005249f, 85.892532f, 85.780106f, 85.667976f, 85.556137f, 85.444588f,
85.333336f, 85.222366f, 85.111687f, 85.001297f, 84.891190f, 84.781372f,
84.671837f, 84.562584f, 84.453606f, 84.344917f, 84.236504f, 84.128372f,
84.020515f, 83.912933f, 83.805626f, 83.698593f, 83.591835f, 83.485352f,
83.379135f, 83.273186f, 83.167511f, 83.062103f, 82.956963f, 82.852089f,
82.747475f, 82.643127f, 82.539040f, 82.435219f, 82.331657f, 82.228355f,
82.125313f, 82.022530f, 81.919998f, 81.817726f, 81.715714f, 81.613945f,
81.512436f, 81.411179f, 81.310173f, 81.209419f, 81.108910f, 81.008652f,
80.908646f, 80.808876f, 80.709358f, 80.610085f, 80.511055f, 80.412270f,
80.313728f, 80.215424f, 80.117363f, 80.019539f, 79.921951f, 79.824608f,
79.727493f, 79.630623f, 79.533981f, 79.437576f, 79.341408f, 79.245468f,
79.149757f, 79.054283f, 78.959038f, 78.864021f, 78.769234f, 78.674667f,
78.580338f, 78.486229f, 78.392342f, 78.298683f, 78.205254f, 78.112038f,
78.019051f, 77.926277f, 77.833733f, 77.741402f, 77.649292f, 77.557396f,
77.465721f, 77.374260f, 77.283020f, 77.191994f, 77.101173f, 77.010574f,
76.920189f, 76.830009f, 76.740044f, 76.650291f, 76.560745f, 76.471413f,
76.382286f, 76.293365f, 76.204651f, 76.116142f, 76.027840f, 75.939743f,
75.851852f, 75.764160f, 75.676674f, 75.589386f, 75.502304f, 75.415421f,
75.328735f, 75.242249f, 75.155960f, 75.069878f, 74.983978f, 74.898285f,
74.812782f, 74.727478f, 74.642372f, 74.557449f, 74.472725f, 74.388199f,
74.303856f, 74.219704f, 74.135750f, 74.051979f, 73.968399f, 73.885002f,
73.801804f, 73.718788f, 73.635956f, 73.553314f, 73.470856f, 73.388580f,
73.306488f, 73.224579f, 73.142860f, 73.061317f, 72.979958f, 72.898773f,
72.817780f, 72.736961f, 72.656319f, 72.575859f, 72.495575f, 72.415466f,
72.335541f, 72.255791f, 72.176208f, 72.096809f, 72.017586f, 71.938530f,
71.859650f, 71.780945f, 71.702408f, 71.624046f, 71.545853f, 71.467827f,
71.389977f, 71.312294f, 71.234779f, 71.157440f, 71.080261f, 71.003250f,
70.926407f, 70.849731f, 70.773216f, 70.696869f, 70.620689f, 70.544670f,
70.468819f, 70.393127f, 70.317596f, 70.242226f, 70.167023f, 70.091980f,
70.017097f, 69.942368f, 69.867805f, 69.793396f, 69.719147f, 69.645058f,
69.571129f, 69.497353f, 69.423729f, 69.350266f, 69.276955f, 69.203804f,
69.130798f, 69.057953f, 68.985260f, 68.912720f, 68.840340f, 68.768097f,
68.696014f, 68.624084f, 68.552299f, 68.480667f, 68.409187f, 68.337852f,
68.266670f, 68.195633f, 68.124741f, 68.054001f, 67.983406f, 67.912956f,
67.842651f, 67.772491f, 67.702477f, 67.632614f, 67.562889f, 67.493309f,
67.423866f, 67.354576f, 67.285423f, 67.216408f, 67.147537f, 67.078812f,
67.010223f, 66.941780f, 66.873466f, 66.805298f, 66.737274f, 66.669380f,
66.601624f, 66.534012f, 66.466530f, 66.399193f, 66.331985f, 66.264915f,
66.197983f, 66.131180f, 66.064514f, 65.997986f, 65.931587f, 65.865326f,
65.799194f, 65.733200f, 65.667336f, 65.601601f, 65.536003f, 65.470528f,
65.405190f, 65.339981f, 65.274902f, 65.209953f, 65.145126f, 65.080437f,
65.015877f, 64.951439f, 64.887131f, 64.822945f, 64.758896f, 64.694969f,
64.631165f, 64.567490f, 64.503937f, 64.440514f, 64.377213f, 64.314034f,
64.250984f, 64.188049f, 64.125244f, 64.062561f, 64.000000f, 63.937561f,
63.875244f, 63.813049f, 63.750973f, 63.689018f, 63.627186f, 63.565472f,
63.503876f, 63.442402f, 63.381046f, 63.319805f, 63.258686f, 63.197685f,
63.136803f, 63.076035f, 63.015385f, 62.954849f, 62.894432f, 62.834133f,
62.773945f, 62.713875f, 62.653919f, 62.594078f, 62.534351f, 62.474739f,
62.415237f, 62.355850f, 62.296577f, 62.237415f, 62.178368f, 62.119431f,
62.060608f, 62.001892f, 61.943291f, 61.884796f, 61.826416f, 61.768143f,
61.709980f, 61.651928f, 61.593987f, 61.536152f, 61.478424f, 61.420807f,
61.363297f, 61.305893f, 61.248600f, 61.191410f, 61.134327f, 61.077354f,
61.020485f, 60.963722f, 60.907063f, 60.850510f, 60.794064f, 60.737720f,
60.681480f, 60.625347f, 60.569317f, 60.513390f, 60.457565f, 60.401844f,
60.346226f, 60.290707f, 60.235294f, 60.179981f, 60.124771f, 60.069660f,
60.014652f, 59.959743f, 59.904938f, 59.850227f, 59.795620f, 59.741112f,
59.686703f, 59.632393f, 59.578182f, 59.524071f, 59.470055f, 59.416138f,
59.362320f, 59.308598f, 59.254974f, 59.201447f, 59.148014f, 59.094681f,
59.041443f, 58.988300f, 58.935253f, 58.882301f, 58.829445f, 58.776680f,
58.724014f, 58.671440f, 58.618961f, 58.566578f, 58.514286f, 58.462086f,
58.409981f, 58.357971f, 58.306049f, 58.254223f, 58.202488f, 58.150845f,
58.099289f, 58.047829f, 57.996460f, 57.945183f, 57.893993f, 57.842896f,
57.791885f, 57.740971f, 57.690140f, 57.639400f, 57.588753f, 57.538193f,
57.487720f, 57.437336f, 57.387039f, 57.336834f, 57.286713f, 57.236683f,
57.186737f, 57.136879f, 57.087109f, 57.037422f, 56.987827f, 56.938316f,
56.888889f, 56.839550f, 56.790295f, 56.741127f, 56.692043f, 56.643044f,
56.594128f, 56.545300f, 56.496552f, 56.447891f, 56.399311f, 56.350819f,
56.302406f, 56.254078f, 56.205833f, 56.157669f, 56.109589f, 56.061592f,
56.013676f, 55.965839f, 55.918087f, 55.870419f, 55.822826f, 55.775318f,
55.727890f, 55.680542f, 55.633278f, 55.586090f, 55.538982f, 55.491955f,
55.445007f, 55.398140f, 55.351353f, 55.304642f, 55.258011f, 55.211456f,
55.164982f, 55.118587f, 55.072269f, 55.026028f, 54.979866f, 54.933781f,
54.887772f, 54.841843f, 54.795986f, 54.750210f, 54.704506f, 54.658882f,
54.613335f, 54.567860f, 54.522461f, 54.477142f, 54.431892f, 54.386723f,
54.341625f, 54.296604f, 54.251656f, 54.206783f, 54.161983f, 54.117260f,
54.072609f, 54.028030f, 53.983524f, 53.939095f, 53.894737f, 53.850452f,
53.806240f, 53.762100f, 53.718033f, 53.674038f, 53.630116f, 53.586262f,
53.542484f, 53.498775f, 53.455139f, 53.411572f, 53.368076f, 53.324654f,
53.281300f, 53.238018f, 53.194805f, 53.151661f, 53.108589f, 53.065586f,
53.022655f, 52.979790f, 52.936996f, 52.894268f, 52.851612f, 52.809025f,
52.766506f, 52.724056f, 52.681671f, 52.639359f, 52.597111f, 52.554932f,
52.512821f, 52.470776f, 52.428799f, 52.386890f, 52.345047f, 52.303272f,
52.261562f, 52.219921f, 52.178345f, 52.136833f, 52.095390f, 52.054012f,
52.012699f, 51.971451f, 51.930271f, 51.889153f, 51.848103f, 51.807114f,
51.766193f, 51.725334f, 51.684544f, 51.643814f, 51.603149f, 51.562550f,
51.522011f, 51.481541f, 51.441132f, 51.400784f, 51.360500f, 51.320282f,
51.280125f, 51.240032f, 51.200001f, 51.160030f, 51.120125f, 51.080280f,
51.040497f, 51.000778f, 50.961121f, 50.921524f, 50.881989f, 50.842514f,
50.803101f, 50.763748f, 50.724457f, 50.685226f, 50.646057f, 50.606949f,
50.567902f, 50.528912f, 50.489986f, 50.451115f, 50.412308f, 50.373558f,
50.334869f, 50.296238f, 50.257668f, 50.219158f, 50.180706f, 50.142311f,
50.103977f, 50.065701f, 50.027481f, 49.989323f, 49.951218f, 49.913177f,
49.875191f, 49.837261f, 49.799393f, 49.761578f, 49.723824f, 49.686127f,
49.648483f, 49.610901f, 49.573372f, 49.535904f, 49.498489f, 49.461132f,
49.423832f, 49.386585f, 49.349396f, 49.312263f, 49.275188f, 49.238167f,
49.201202f, 49.164291f, 49.127438f, 49.090637f, 49.053894f, 49.017204f,
48.980568f, 48.943989f, 48.907463f, 48.870991f, 48.834576f, 48.798214f,
48.761906f, 48.725651f, 48.689449f, 48.653305f, 48.617210f, 48.581173f,
48.545185f, 48.509251f, 48.473373f, 48.437546f, 48.401772f, 48.366051f,
48.330383f, 48.294769f, 48.259205f, 48.223694f, 48.188236f, 48.152828f,
48.117474f, 48.082172f, 48.046921f, 48.011723f, 47.976574f, 47.941479f,
47.906433f, 47.871441f, 47.836494f, 47.801605f, 47.766766f, 47.731976f,
47.697235f, 47.662544f, 47.627907f, 47.593319f, 47.558781f, 47.524292f,
47.489857f, 47.455467f, 47.421127f, 47.386841f, 47.352600f, 47.318413f,
47.284271f, 47.250179f, 47.216137f, 47.182144f, 47.148201f, 47.114307f,
47.080460f, 47.046661f, 47.012913f, 46.979210f, 46.945560f, 46.911953f,
46.878399f, 46.844891f, 46.811428f, 46.778015f, 46.744652f, 46.711334f,
46.678062f, 46.644840f, 46.611664f, 46.578537f, 46.545456f, 46.512421f,
46.479431f, 46.446491f, 46.413597f, 46.380749f, 46.347950f, 46.315193f,
46.282486f, 46.249825f, 46.217209f, 46.184635f, 46.152111f, 46.119633f,
46.087200f, 46.054813f, 46.022472f, 45.990177f, 45.957924f, 45.925716f,
45.893559f, 45.861443f, 45.829372f, 45.797344f, 45.765362f, 45.733425f,
45.701534f, 45.669685f, 45.637882f, 45.606125f, 45.574409f, 45.542740f,
45.511112f, 45.479527f, 45.447990f, 45.416492f, 45.385040f, 45.353634f,
45.322269f, 45.290947f, 45.259670f, 45.228432f, 45.197243f, 45.166092f,
45.134987f, 45.103924f, 45.072903f, 45.041924f, 45.010990f, 44.980095f,
44.949245f, 44.918438f, 44.887672f, 44.856949f, 44.826267f, 44.795624f,
44.765026f, 44.734470f, 44.703957f, 44.673485f, 44.643051f, 44.612663f,
44.582314f, 44.552006f, 44.521740f, 44.491512f, 44.461330f, 44.431187f,
44.401085f, 44.371021f, 44.341000f, 44.311020f, 44.281082f, 44.251183f,
44.221321f, 44.191505f, 44.161724f, 44.131985f, 44.102287f, 44.072628f,
44.043011f, 44.013432f, 43.983894f, 43.954391f, 43.924934f, 43.895512f,
43.866131f, 43.836788f, 43.807487f, 43.778225f, 43.749001f, 43.719814f,
43.690666f, 43.661560f, 43.632488f, 43.603458f, 43.574467f, 43.545513f,
43.516602f, 43.487724f, 43.458885f, 43.430088f, 43.401325f, 43.372601f,
43.343914f, 43.315269f, 43.286659f, 43.258087f, 43.229553f, 43.201054f,
43.172596f, 43.144173f, 43.115791f, 43.087444f, 43.059132f, 43.030861f,
43.002625f, 42.974426f, 42.946266f, 42.918140f, 42.890053f, 42.862000f,
42.833988f, 42.806007f, 42.778069f, 42.750164f, 42.722294f, 42.694462f,
42.666668f, 42.638908f, 42.611183f, 42.583496f, 42.555843f, 42.528229f,
42.500648f, 42.473103f, 42.445595f, 42.418121f, 42.390686f, 42.363285f,
42.335918f, 42.308586f, 42.281292f, 42.254028f, 42.226803f, 42.199615f,
42.172459f, 42.145336f, 42.118252f, 42.091202f, 42.064186f, 42.037205f,
42.010258f, 41.983345f, 41.956467f, 41.929623f, 41.902813f, 41.876038f,
41.849297f, 41.822590f, 41.795918f, 41.769279f, 41.742676f, 41.716103f,
41.689568f, 41.663063f, 41.636593f, 41.610157f, 41.583755f, 41.557388f,
41.531052f, 41.504749f, 41.478481f, 41.452244f, 41.426044f, 41.399872f,
41.373737f, 41.347633f, 41.321564f, 41.295525f, 41.269520f, 41.243549f,
41.217609f, 41.191704f, 41.165829f, 41.139988f, 41.114178f, 41.088402f,
41.062656f, 41.036945f, 41.011265f, 40.985615f, 40.959999f, 40.934418f,
40.908863f, 40.883343f, 40.857857f, 40.832397f, 40.806973f, 40.781582f,
40.756218f, 40.730888f, 40.705589f, 40.680325f, 40.655087f, 40.629883f,
40.604710f, 40.579567f, 40.554455f, 40.529377f, 40.504326f, 40.479309f,
40.454323f, 40.429363f, 40.404438f, 40.379543f, 40.354679f, 40.329845f,
40.305042f, 40.280270f, 40.255527f, 40.230816f, 40.206135f, 40.181484f,
40.156864f, 40.132271f, 40.107712f, 40.083179f, 40.058681f, 40.034210f,
40.009769f, 39.985355f, 39.960976f, 39.936623f, 39.912304f, 39.888008f,
39.863747f, 39.839512f, 39.815311f, 39.791134f, 39.766991f, 39.742874f,
39.718788f, 39.694729f, 39.670704f, 39.646702f, 39.622734f, 39.598793f,
39.574879f, 39.550995f, 39.527142f, 39.503315f, 39.479519f, 39.455750f,
39.432011f, 39.408298f, 39.384617f, 39.360962f, 39.337334f, 39.313736f,
39.290169f, 39.266628f, 39.243114f, 39.219627f, 39.196171f, 39.172745f,
39.149342f, 39.125969f, 39.102627f, 39.079308f, 39.056019f, 39.032757f,
39.009525f, 38.986317f, 38.963139f, 38.939987f, 38.916866f, 38.893768f,
38.870701f, 38.847660f, 38.824646f, 38.801659f, 38.778698f, 38.755764f,
38.732861f, 38.709984f, 38.687130f, 38.664307f, 38.641510f, 38.618740f,
38.595997f, 38.573277f, 38.550587f, 38.527924f, 38.505287f, 38.482677f,
38.460094f, 38.437538f, 38.415005f, 38.392502f, 38.370022f, 38.347572f,
38.325146f, 38.302746f, 38.280373f, 38.258026f, 38.235706f, 38.213409f,
38.191143f, 38.168900f, 38.146683f, 38.124493f, 38.102325f, 38.080185f,
38.058071f, 38.035984f, 38.013920f, 37.991882f, 37.969872f, 37.947887f,
37.925926f, 37.903992f, 37.882080f, 37.860195f, 37.838337f, 37.816502f,
37.794693f, 37.772911f, 37.751152f, 37.729420f, 37.707710f, 37.686028f,
37.664368f, 37.642735f, 37.621124f, 37.599541f, 37.577980f, 37.556446f,
37.534939f, 37.513451f, 37.491989f, 37.470554f, 37.449142f, 37.427757f,
37.406391f, 37.385056f, 37.363739f, 37.342449f, 37.321186f, 37.299942f,
37.278725f, 37.257534f, 37.236362f, 37.215218f, 37.194099f, 37.173000f,
37.151928f, 37.130878f, 37.109852f, 37.088852f, 37.067875f, 37.046921f,
37.025990f, 37.005081f, 36.984200f, 36.963341f, 36.942501f, 36.921692f,
36.900902f, 36.880135f, 36.859394f, 36.838673f, 36.817978f, 36.797306f,
36.776657f, 36.756031f, 36.735428f, 36.714848f, 36.694290f, 36.673756f,
36.653244f, 36.632755f, 36.612289f, 36.591846f, 36.571430f, 36.551033f,
36.530659f, 36.510307f, 36.489979f, 36.469673f, 36.449387f, 36.429127f,
36.408890f, 36.388672f, 36.368481f, 36.348309f, 36.328159f, 36.308033f,
36.287930f, 36.267849f, 36.247787f, 36.227749f, 36.207733f, 36.187740f,
36.167770f, 36.147820f, 36.127895f, 36.107990f, 36.088104f, 36.068245f,
36.048405f, 36.028587f, 36.008793f, 35.989017f, 35.969265f, 35.949535f,
35.929825f, 35.910137f, 35.890472f, 35.870827f, 35.851204f, 35.831600f,
35.812023f, 35.792461f, 35.772926f, 35.753410f, 35.733913f, 35.714443f,
35.694988f, 35.675556f, 35.656147f, 35.636761f, 35.617390f, 35.598045f,
35.578720f, 35.559414f, 35.540131f, 35.520866f, 35.501625f, 35.482403f,
35.463203f, 35.444023f, 35.424866f, 35.405727f, 35.386608f, 35.367512f,
35.348434f, 35.329380f, 35.310345f, 35.291328f, 35.272335f, 35.253361f,
35.234409f, 35.215477f, 35.196564f, 35.177670f, 35.158798f, 35.139946f,
35.121113f, 35.102303f, 35.083511f, 35.064739f, 35.045990f, 35.027260f,
35.008549f, 34.989857f, 34.971184f, 34.952534f, 34.933903f, 34.915291f,
34.896698f, 34.878128f, 34.859573f, 34.841042f, 34.822529f, 34.804035f,
34.785564f, 34.767109f, 34.748676f, 34.730259f, 34.711864f, 34.693489f,
34.675133f, 34.656796f, 34.638477f, 34.620178f, 34.601902f, 34.583641f,
34.565399f, 34.547180f, 34.528976f, 34.510796f, 34.492630f, 34.474487f,
34.456360f, 34.438255f, 34.420170f, 34.402100f, 34.384048f, 34.366020f,
34.348007f, 34.330017f, 34.312042f, 34.294086f, 34.276150f, 34.258232f,
34.240334f, 34.222454f, 34.204594f, 34.186749f, 34.168926f, 34.151119f,
34.133335f, 34.115566f, 34.097816f, 34.080082f, 34.062370f, 34.044674f,
34.027000f, 34.009342f, 33.991703f, 33.974079f, 33.956478f, 33.938892f,
33.921326f, 33.903778f, 33.886246f, 33.868732f, 33.851238f, 33.833763f,
33.816307f, 33.798866f, 33.781445f, 33.764038f, 33.746655f, 33.729286f,
33.711933f, 33.694603f, 33.677288f, 33.659988f, 33.642712f, 33.625450f,
33.608204f, 33.590981f, 33.573769f, 33.556580f, 33.539406f, 33.522251f,
33.505112f, 33.487991f, 33.470890f, 33.453804f, 33.436733f, 33.419685f,
33.402649f, 33.385635f, 33.368637f, 33.351654f, 33.334690f, 33.317741f,
33.300812f, 33.283901f, 33.267006f, 33.250126f, 33.233265f, 33.216423f,
33.199596f, 33.182785f, 33.165993f, 33.149216f, 33.132458f, 33.115715f,
33.098991f, 33.082283f, 33.065590f, 33.048916f, 33.032257f, 33.015617f,
32.998993f, 32.982384f, 32.965794f, 32.949223f, 32.932663f, 32.916122f,
32.899597f, 32.883091f, 32.866600f, 32.850124f, 32.833668f, 32.817226f,
32.800800f, 32.784393f, 32.768002f, 32.751625f, 32.735264f, 32.718922f,
32.702595f, 32.686283f, 32.669991f, 32.653713f, 32.637451f, 32.621204f,
32.604977f, 32.588760f, 32.572563f, 32.556385f, 32.540218f, 32.524071f,
32.507938f, 32.491821f, 32.475719f, 32.459633f, 32.443565f, 32.427509f,
32.411472f, 32.395451f, 32.379448f, 32.363457f, 32.347485f, 32.331524f,
32.315582f, 32.299656f, 32.283745f, 32.267849f, 32.251968f, 32.236103f,
32.220257f, 32.204422f, 32.188606f, 32.172802f, 32.157017f, 32.141247f,
32.125492f, 32.109749f, 32.094025f, 32.078316f, 32.062622f, 32.046944f,
32.031281f, 32.015633f, 32.000000f, 31.984383f, 31.968781f, 31.953194f,
31.937622f, 31.922066f, 31.906525f, 31.890997f, 31.875486f, 31.859991f,
31.844509f, 31.829042f, 31.813593f, 31.798157f, 31.782736f, 31.767328f,
31.751938f, 31.736561f, 31.721201f, 31.705854f, 31.690523f, 31.675205f,
31.659903f, 31.644617f, 31.629343f, 31.614086f, 31.598843f, 31.583614f,
31.568401f, 31.553202f, 31.538017f, 31.522848f, 31.507692f, 31.492552f,
31.477425f, 31.462315f, 31.447216f, 31.432135f, 31.417067f, 31.402012f,
31.386972f, 31.371948f, 31.356937f, 31.341942f, 31.326960f, 31.311993f,
31.297039f, 31.282101f, 31.267176f, 31.252266f, 31.237370f, 31.222486f,
31.207619f, 31.192766f, 31.177925f, 31.163101f, 31.148289f, 31.133492f,
31.118708f, 31.103939f, 31.089184f, 31.074444f, 31.059715f, 31.045002f,
31.030304f, 31.015617f, 31.000946f, 30.986288f, 30.971645f, 30.957014f,
30.942398f, 30.927795f, 30.913208f, 30.898632f, 30.884071f, 30.869524f,
30.854990f, 30.840471f, 30.825964f, 30.811472f, 30.796993f, 30.782528f,
30.768076f, 30.753637f, 30.739212f, 30.724800f, 30.710403f, 30.696018f,
30.681648f, 30.667290f, 30.652946f, 30.638617f, 30.624300f, 30.609995f,
30.595705f, 30.581429f, 30.567163f, 30.552914f, 30.538677f, 30.524452f,
30.510242f, 30.496044f, 30.481861f, 30.467690f, 30.453531f, 30.439386f,
30.425255f, 30.411137f, 30.397032f, 30.382938f, 30.368860f, 30.354794f,
30.340740f, 30.326700f, 30.312674f, 30.298658f, 30.284658f, 30.270670f,
30.256695f, 30.242731f, 30.228783f, 30.214846f, 30.200922f, 30.187010f,
30.173113f, 30.159227f, 30.145353f, 30.131495f, 30.117647f, 30.103813f,
30.089991f, 30.076181f, 30.062386f, 30.048601f, 30.034830f, 30.021072f,
30.007326f, 29.993593f, 29.979872f, 29.966164f, 29.952469f, 29.938786f,
29.925114f, 29.911455f, 29.897810f, 29.884176f, 29.870556f, 29.856947f,
29.843351f, 29.829767f, 29.816196f, 29.802637f, 29.789091f, 29.775557f,
29.762035f, 29.748526f, 29.735027f, 29.721542f, 29.708069f, 29.694609f,
29.681160f, 29.667723f, 29.654299f, 29.640886f, 29.627487f, 29.614098f,
29.600723f, 29.587358f, 29.574007f, 29.560667f, 29.547340f, 29.534025f,
29.520721f, 29.507429f, 29.494150f, 29.480883f, 29.467627f, 29.454382f,
29.441151f, 29.427931f, 29.414722f, 29.401525f, 29.388340f, 29.375168f,
29.362007f, 29.348858f, 29.335720f, 29.322596f, 29.309481f, 29.296379f,
29.283289f, 29.270210f, 29.257143f, 29.244087f, 29.231043f, 29.218012f,
29.204990f, 29.191982f, 29.178986f, 29.165998f, 29.153025f, 29.140062f,
29.127111f, 29.114172f, 29.101244f, 29.088327f, 29.075422f, 29.062529f,
29.049644f, 29.036774f, 29.023914f, 29.011066f, 28.998230f, 28.985405f,
28.972591f, 28.959787f, 28.946997f, 28.934216f, 28.921448f, 28.908689f,
28.895943f, 28.883209f, 28.870485f, 28.857773f, 28.845070f, 28.832380f,
28.819700f, 28.807034f, 28.794376f, 28.781731f, 28.769096f, 28.756472f,
28.743860f, 28.731258f, 28.718668f, 28.706089f, 28.693520f, 28.680964f,
28.668417f, 28.655882f, 28.643356f, 28.630844f, 28.618341f, 28.605848f,
28.593369f, 28.580898f, 28.568439f, 28.555992f, 28.543554f, 28.531128f,
28.518711f, 28.506308f, 28.493914f, 28.481529f, 28.469158f, 28.456795f,
28.444445f, 28.432104f, 28.419775f, 28.407455f, 28.395147f, 28.382851f,
28.370564f, 28.358286f, 28.346022f, 28.333765f, 28.321522f, 28.309288f,
28.297064f, 28.284851f, 28.272650f, 28.260458f, 28.248276f, 28.236105f,
28.223946f, 28.211796f, 28.199656f, 28.187527f, 28.175409f, 28.163300f,
28.151203f, 28.139116f, 28.127039f, 28.114973f, 28.102917f, 28.090870f,
28.078835f, 28.066809f, 28.054794f, 28.042789f, 28.030796f, 28.018812f,
28.006838f, 27.994873f, 27.982920f, 27.970978f, 27.959044f, 27.947121f,
27.935209f, 27.923306f, 27.911413f, 27.899532f, 27.887659f, 27.875797f,
27.863945f, 27.852104f, 27.840271f, 27.828449f, 27.816639f, 27.804836f,
27.793045f, 27.781263f, 27.769491f, 27.757730f, 27.745977f, 27.734236f,
27.722504f, 27.710783f, 27.699070f, 27.687368f, 27.675676f, 27.663994f,
27.652321f, 27.640657f, 27.629005f, 27.617361f, 27.605728f, 27.594105f,
27.582491f, 27.570889f, 27.559294f, 27.547709f, 27.536135f, 27.524569f,
27.513014f, 27.501469f, 27.489933f, 27.478407f, 27.466890f, 27.455383f,
27.443886f, 27.432398f, 27.420921f, 27.409452f, 27.397993f, 27.386543f,
27.375105f, 27.363674f, 27.352253f, 27.340843f, 27.329441f, 27.318048f,
27.306667f, 27.295294f, 27.283930f, 27.272575f, 27.261230f, 27.249897f,
27.238571f, 27.227253f, 27.215946f, 27.204649f, 27.193361f, 27.182081f,
27.170813f, 27.159552f, 27.148302f, 27.137060f, 27.125828f, 27.114605f,
27.103392f, 27.092186f, 27.080992f, 27.069805f, 27.058630f, 27.047462f,
27.036304f, 27.025154f, 27.014015f, 27.002884f, 26.991762f, 26.980650f,
26.969547f, 26.958454f, 26.947369f, 26.936293f, 26.925226f, 26.914169f,
26.903120f, 26.892080f, 26.881050f, 26.870029f, 26.859016f, 26.848013f,
26.837019f, 26.826033f, 26.815058f, 26.804090f, 26.793131f, 26.782183f,
26.771242f, 26.760311f, 26.749388f, 26.738474f, 26.727570f, 26.716673f,
26.705786f, 26.694908f, 26.684038f, 26.673180f, 26.662327f, 26.651484f,
26.640650f, 26.629826f, 26.619009f, 26.608202f, 26.597403f, 26.586613f,
26.575830f, 26.565060f, 26.554295f, 26.543539f, 26.532793f, 26.522057f,
26.511328f, 26.500607f, 26.489895f, 26.479193f, 26.468498f, 26.457811f,
26.447134f, 26.436466f, 26.425806f, 26.415155f, 26.404512f, 26.393879f,
26.383253f, 26.372635f, 26.362028f, 26.351427f, 26.340836f, 26.330254f,
26.319679f, 26.309113f, 26.298555f, 26.288006f, 26.277466f, 26.266933f,
26.256411f, 26.245895f, 26.235388f, 26.224890f, 26.214399f, 26.203918f,
26.193445f, 26.182980f, 26.172523f, 26.162075f, 26.151636f, 26.141205f,
26.130781f, 26.120367f, 26.109961f, 26.099562f, 26.089172f, 26.078791f,
26.068417f, 26.058052f, 26.047695f, 26.037346f, 26.027006f, 26.016674f,
26.006350f, 25.996033f, 25.985725f, 25.975426f, 25.965136f, 25.954851f,
25.944576f, 25.934309f, 25.924051f, 25.913799f, 25.903557f, 25.893322f,
25.883097f, 25.872877f, 25.862667f, 25.852465f, 25.842272f, 25.832085f,
25.821907f, 25.811737f, 25.801575f, 25.791420f, 25.781275f, 25.771137f,
25.761005f, 25.750885f, 25.740770f, 25.730663f, 25.720566f, 25.710474f,
25.700392f, 25.690317f, 25.680250f, 25.670193f, 25.660141f, 25.650099f,
25.640062f, 25.630035f, 25.620016f, 25.610004f, 25.600000f, 25.590004f,
25.580015f, 25.570036f, 25.560062f, 25.550098f, 25.540140f, 25.530191f,
25.520248f, 25.510315f, 25.500389f, 25.490471f, 25.480560f, 25.470657f,
25.460762f, 25.450874f, 25.440994f, 25.431122f, 25.421257f, 25.411400f,
25.401550f, 25.391708f, 25.381874f, 25.372047f, 25.362228f, 25.352417f,
25.342613f, 25.332817f, 25.323029f, 25.313248f, 25.303474f, 25.293709f,
25.283951f, 25.274200f, 25.264456f, 25.254721f, 25.244993f, 25.235271f,
25.225557f, 25.215853f, 25.206154f, 25.196463f, 25.186779f, 25.177103f,
25.167435f, 25.157774f, 25.148119f, 25.138474f, 25.128834f, 25.119204f,
25.109579f, 25.099962f, 25.090353f, 25.080750f, 25.071156f, 25.061567f,
25.051989f, 25.042416f, 25.032850f, 25.023291f, 25.013741f, 25.004196f,
24.994661f, 24.985132f, 24.975609f, 24.966095f, 24.956589f, 24.947088f,
24.937595f, 24.928110f, 24.918631f, 24.909161f, 24.899696f, 24.890240f,
24.880789f, 24.871347f, 24.861912f, 24.852484f, 24.843063f, 24.833649f,
24.824242f, 24.814842f, 24.805450f, 24.796064f, 24.786686f, 24.777315f,
24.767952f, 24.758595f, 24.749245f, 24.739902f, 24.730566f, 24.721237f,
24.711916f, 24.702600f, 24.693293f, 24.683992f, 24.674698f, 24.665413f,
24.656132f, 24.646860f, 24.637594f, 24.628336f, 24.619083f, 24.609838f,
24.600601f, 24.591370f, 24.582146f, 24.572927f, 24.563719f, 24.554514f,
24.545319f, 24.536129f, 24.526947f, 24.517771f, 24.508602f, 24.499439f,
24.490284f, 24.481136f, 24.471994f, 24.462860f, 24.453732f, 24.444611f,
24.435495f, 24.426388f, 24.417288f, 24.408194f, 24.399107f, 24.390026f,
24.380953f, 24.371885f, 24.362825f, 24.353771f, 24.344725f, 24.335686f,
24.326653f, 24.317625f, 24.308605f, 24.299593f, 24.290586f, 24.281586f,
24.272593f, 24.263607f, 24.254625f, 24.245653f, 24.236687f, 24.227726f,
24.218773f, 24.209826f, 24.200886f, 24.191954f, 24.183025f, 24.174105f,
24.165192f, 24.156284f, 24.147385f, 24.138491f, 24.129602f, 24.120722f,
24.111847f, 24.102980f, 24.094118f, 24.085262f, 24.076414f, 24.067572f,
24.058737f, 24.049908f, 24.041086f, 24.032270f, 24.023460f, 24.014658f,
24.005861f, 23.997070f, 23.988287f, 23.979509f, 23.970739f, 23.961975f,
23.953217f, 23.944466f, 23.935720f, 23.926981f, 23.918247f, 23.909523f,
23.900803f, 23.892090f, 23.883383f, 23.874681f, 23.865988f, 23.857300f,
23.848618f, 23.839941f, 23.831272f, 23.822611f, 23.813953f, 23.805304f,
23.796659f, 23.788021f, 23.779390f, 23.770765f, 23.762146f, 23.753534f,
23.744928f, 23.736328f, 23.727734f, 23.719147f, 23.710564f, 23.701988f,
23.693420f, 23.684856f, 23.676300f, 23.667749f, 23.659206f, 23.650667f,
23.642136f, 23.633610f, 23.625090f, 23.616577f, 23.608068f, 23.599567f,
23.591072f, 23.582584f, 23.574100f, 23.565624f, 23.557154f, 23.548689f,
23.540230f, 23.531776f, 23.523331f, 23.514891f, 23.506456f, 23.498028f,
23.489605f, 23.481190f, 23.472780f, 23.464375f, 23.455976f, 23.447584f,
23.439199f, 23.430819f, 23.422445f, 23.414076f, 23.405714f, 23.397358f,
23.389008f, 23.380663f, 23.372326f, 23.363993f, 23.355667f, 23.347345f,
23.339031f, 23.330723f, 23.322420f, 23.314123f, 23.305832f, 23.297546f,
23.289268f, 23.280994f, 23.272728f, 23.264465f, 23.256210f, 23.247961f,
23.239716f, 23.231478f, 23.223246f, 23.215019f, 23.206799f, 23.198584f,
23.190374f, 23.182173f, 23.173975f, 23.165783f, 23.157597f, 23.149418f,
23.141243f, 23.133074f, 23.124912f, 23.116755f, 23.108604f, 23.100458f,
23.092318f, 23.084185f, 23.076056f, 23.067934f, 23.059816f, 23.051706f,
23.043600f, 23.035501f, 23.027407f, 23.019320f, 23.011236f, 23.003159f,
22.995089f, 22.987022f, 22.978962f, 22.970907f, 22.962858f, 22.954817f,
22.946779f, 22.938747f, 22.930721f, 22.922701f, 22.914686f, 22.906675f,
22.898672f, 22.890675f, 22.882681f, 22.874695f, 22.866713f, 22.858738f,
22.850767f, 22.842802f, 22.834843f, 22.826889f, 22.818941f, 22.810999f,
22.803062f, 22.795130f, 22.787205f, 22.779284f, 22.771370f, 22.763460f,
22.755556f, 22.747658f, 22.739763f, 22.731876f, 22.723995f, 22.716118f,
22.708246f, 22.700380f, 22.692520f, 22.684666f, 22.676817f, 22.668972f,
22.661135f, 22.653301f, 22.645473f, 22.637651f, 22.629835f, 22.622023f,
22.614216f, 22.606417f, 22.598621f, 22.590830f, 22.583046f, 22.575268f,
22.567493f, 22.559725f, 22.551962f, 22.544203f, 22.536451f, 22.528704f,
22.520962f, 22.513226f, 22.505495f, 22.497768f, 22.490047f, 22.482332f,
22.474623f, 22.466919f, 22.459219f, 22.451525f, 22.443836f, 22.436152f,
22.428474f, 22.420801f, 22.413134f, 22.405470f, 22.397812f, 22.390162f,
22.382513f, 22.374872f, 22.367235f, 22.359604f, 22.351978f, 22.344357f,
22.336742f, 22.329132f, 22.321526f, 22.313927f, 22.306332f, 22.298740f,
22.291157f, 22.283577f, 22.276003f, 22.268435f, 22.260870f, 22.253311f,
22.245756f, 22.238209f, 22.230665f, 22.223127f, 22.215593f, 22.208065f,
22.200542f, 22.193024f, 22.185511f, 22.178003f, 22.170500f, 22.163004f,
22.155510f, 22.148024f, 22.140541f, 22.133062f, 22.125591f, 22.118124f,
22.110661f, 22.103205f, 22.095753f, 22.088305f, 22.080862f, 22.073425f,
22.065992f, 22.058567f, 22.051144f, 22.043726f, 22.036314f, 22.028908f,
22.021505f, 22.014109f, 22.006716f, 21.999329f, 21.991947f, 21.984570f,
21.977196f, 21.969830f, 21.962467f, 21.955109f, 21.947756f, 21.940409f,
21.933065f, 21.925728f, 21.918394f, 21.911066f, 21.903744f, 21.896425f,
21.889112f, 21.881804f, 21.874500f, 21.867201f, 21.859907f, 21.852617f,
21.845333f, 21.838055f, 21.830780f, 21.823509f, 21.816244f, 21.808985f,
21.801729f, 21.794479f, 21.787233f, 21.779993f, 21.772757f, 21.765526f,
21.758301f, 21.751080f, 21.743862f, 21.736650f, 21.729443f, 21.722240f,
21.715044f, 21.707850f, 21.700663f, 21.693480f, 21.686300f, 21.679127f,
21.671957f, 21.664793f, 21.657635f, 21.650478f, 21.643330f, 21.636183f,
21.629044f, 21.621906f, 21.614777f, 21.607649f, 21.600527f, 21.593410f,
21.586298f, 21.579189f, 21.572086f, 21.564989f, 21.557896f, 21.550806f,
21.543722f, 21.536642f, 21.529566f, 21.522495f, 21.515430f, 21.508369f,
21.501312f, 21.494261f, 21.487213f, 21.480171f, 21.473133f, 21.466099f,
21.459070f, 21.452045f, 21.445026f, 21.438011f, 21.431000f, 21.423994f,
21.416994f, 21.409996f, 21.403004f, 21.396017f, 21.389034f, 21.382055f,
21.375082f, 21.368113f, 21.361147f, 21.354187f, 21.347231f, 21.340281f,
21.333334f, 21.326391f, 21.319454f, 21.312521f, 21.305592f, 21.298668f,
21.291748f, 21.284832f, 21.277922f, 21.271015f, 21.264114f, 21.257217f,
21.250324f, 21.243437f, 21.236551f, 21.229673f, 21.222797f, 21.215927f,
21.209061f, 21.202200f, 21.195343f, 21.188490f, 21.181643f, 21.174799f,
21.167959f, 21.161123f, 21.154293f, 21.147467f, 21.140646f, 21.133827f,
21.127014f, 21.120207f, 21.113401f, 21.106602f, 21.099808f, 21.093016f,
21.086229f, 21.079447f, 21.072668f, 21.065895f, 21.059126f, 21.052361f,
21.045601f, 21.038845f, 21.032093f, 21.025345f, 21.018602f, 21.011864f,
21.005129f, 20.998398f, 20.991673f, 20.984951f, 20.978233f, 20.971519f,
20.964811f, 20.958107f, 20.951406f, 20.944712f, 20.938019f, 20.931332f,
20.924648f, 20.917971f, 20.911295f, 20.904625f, 20.897959f, 20.891298f,
20.884640f, 20.877987f, 20.871338f, 20.864693f, 20.858051f, 20.851416f,
20.844784f, 20.838156f, 20.831532f, 20.824913f, 20.818296f, 20.811686f,
20.805079f, 20.798477f, 20.791878f, 20.785284f, 20.778694f, 20.772108f,
20.765526f, 20.758949f, 20.752375f, 20.745806f, 20.739241f, 20.732679f,
20.726122f, 20.719570f, 20.713022f, 20.706476f, 20.699936f, 20.693401f,
20.686869f, 20.680342f, 20.673817f, 20.667297f, 20.660782f, 20.654270f,
20.647762f, 20.641260f, 20.634760f, 20.628265f, 20.621775f, 20.615288f,
20.608805f, 20.602325f, 20.595852f, 20.589380f, 20.582914f, 20.576452f,
20.569994f, 20.563540f, 20.557089f, 20.550642f, 20.544201f, 20.537762f,
20.531328f, 20.524899f, 20.518473f, 20.512051f, 20.505632f, 20.499218f,
20.492807f, 20.486403f, 20.480000f, 20.473602f, 20.467209f, 20.460817f,
20.454432f, 20.448050f, 20.441671f, 20.435297f, 20.428928f, 20.422562f,
20.416199f, 20.409842f, 20.403486f, 20.397137f, 20.390791f, 20.384447f,
20.378109f, 20.371775f, 20.365444f, 20.359118f, 20.352795f, 20.346476f,
20.340162f, 20.333851f, 20.327543f, 20.321239f, 20.314941f, 20.308645f,
20.302355f, 20.296066f, 20.289783f, 20.283504f, 20.277227f, 20.270956f,
20.264688f, 20.258423f, 20.252163f, 20.245907f, 20.239655f, 20.233406f,
20.227161f, 20.220919f, 20.214682f, 20.208448f, 20.202219f, 20.195993f,
20.189772f, 20.183554f, 20.177340f, 20.171129f, 20.164923f, 20.158720f,
20.152521f, 20.146326f, 20.140135f, 20.133947f, 20.127764f, 20.121584f,
20.115408f, 20.109236f, 20.103067f, 20.096903f, 20.090742f, 20.084585f,
20.078432f, 20.072281f, 20.066135f, 20.059994f, 20.053856f, 20.047722f,
20.041590f, 20.035463f, 20.029341f, 20.023220f, 20.017105f, 20.010992f,
20.004885f, 19.998779f, 19.992678f, 19.986582f, 19.980488f, 19.974398f,
19.968311f, 19.962229f, 19.956152f, 19.950077f, 19.944004f, 19.937937f,
19.931873f, 19.925814f, 19.919756f, 19.913704f, 19.907656f, 19.901609f,
19.895567f, 19.889530f, 19.883495f, 19.877464f, 19.871437f, 19.865414f,
19.859394f, 19.853378f, 19.847364f, 19.841356f, 19.835352f, 19.829350f,
19.823351f, 19.817358f, 19.811367f, 19.805380f, 19.799397f, 19.793415f,
19.787439f, 19.781467f, 19.775497f, 19.769533f, 19.763571f, 19.757612f,
19.751657f, 19.745707f, 19.739759f, 19.733814f, 19.727875f, 19.721937f,
19.716005f, 19.710075f, 19.704149f, 19.698227f, 19.692308f, 19.686392f,
19.680481f, 19.674572f, 19.668667f, 19.662766f, 19.656868f, 19.650974f,
19.645084f, 19.639196f, 19.633314f, 19.627434f, 19.621557f, 19.615685f,
19.609814f, 19.603949f, 19.598085f, 19.592228f, 19.586372f, 19.580521f,
19.574671f, 19.568827f, 19.562984f, 19.557148f, 19.551313f, 19.545481f,
19.539654f, 19.533831f, 19.528009f, 19.522192f, 19.516378f, 19.510569f,
19.504763f, 19.498959f, 19.493158f, 19.487362f, 19.481569f, 19.475780f,
19.469994f, 19.464212f, 19.458433f, 19.452656f, 19.446884f, 19.441116f,
19.435350f, 19.429588f, 19.423830f, 19.418074f, 19.412323f, 19.406574f,
19.400829f, 19.395088f, 19.389349f, 19.383614f, 19.377882f, 19.372154f,
19.366430f, 19.360708f, 19.354992f, 19.349277f, 19.343565f, 19.337858f,
19.332153f, 19.326452f, 19.320755f, 19.315060f, 19.309370f, 19.303682f,
19.297998f, 19.292316f, 19.286638f, 19.280966f, 19.275293f, 19.269627f,
19.263962f, 19.258301f, 19.252644f, 19.246990f, 19.241339f, 19.235691f,
19.230047f, 19.224405f, 19.218769f, 19.213135f, 19.207502f, 19.201876f,
19.196251f, 19.190630f, 19.185011f, 19.179398f, 19.173786f, 19.168179f,
19.162573f, 19.156971f, 19.151373f, 19.145779f, 19.140186f, 19.134598f,
19.129013f, 19.123432f, 19.117853f, 19.112278f, 19.106705f, 19.101137f,
19.095572f, 19.090010f, 19.084450f, 19.078894f, 19.073341f, 19.067791f,
19.062246f, 19.056702f, 19.051163f, 19.045626f, 19.040092f, 19.034563f,
19.029036f, 19.023512f, 19.017992f, 19.012474f, 19.006960f, 19.001450f,
18.995941f, 18.990438f, 18.984936f, 18.979439f, 18.973944f, 18.968452f,
18.962963f, 18.957478f, 18.951996f, 18.946516f, 18.941040f, 18.935568f,
18.930098f, 18.924631f, 18.919168f, 18.913708f, 18.908251f, 18.902798f,
18.897346f, 18.891899f, 18.886456f, 18.881014f, 18.875576f, 18.870142f,
18.864710f, 18.859280f, 18.853855f, 18.848433f, 18.843014f, 18.837597f,
18.832184f, 18.826775f, 18.821367f, 18.815964f, 18.810562f, 18.805164f,
18.799770f, 18.794378f, 18.788990f, 18.783606f, 18.778223f, 18.772844f,
18.767469f, 18.762096f, 18.756725f, 18.751360f, 18.745995f, 18.740635f,
18.735277f, 18.729923f, 18.724571f, 18.719223f, 18.713879f, 18.708536f,
18.703196f, 18.697861f, 18.692528f, 18.687197f, 18.681870f, 18.676546f,
18.671225f, 18.665907f, 18.660593f, 18.655281f, 18.649971f, 18.644667f,
18.639362f, 18.634064f, 18.628767f, 18.623472f, 18.618181f, 18.612894f,
18.607609f, 18.602327f, 18.597050f, 18.591774f, 18.586500f, 18.581230f,
18.575964f, 18.570700f, 18.565439f, 18.560181f, 18.554926f, 18.549675f,
18.544426f, 18.539179f, 18.533937f, 18.528696f, 18.523460f, 18.518225f,
18.512995f, 18.507767f, 18.502541f, 18.497318f, 18.492100f, 18.486883f,
18.481670f, 18.476460f, 18.471251f, 18.466047f, 18.460846f, 18.455647f,
18.450451f, 18.445257f, 18.440067f, 18.434881f, 18.429697f, 18.424515f,
18.419336f, 18.414162f, 18.408989f, 18.403820f, 18.398653f, 18.393488f,
18.388329f, 18.383169f, 18.378016f, 18.372862f, 18.367714f, 18.362566f,
18.357424f, 18.352282f, 18.347145f, 18.342009f, 18.336878f, 18.331749f,
18.326622f, 18.321499f, 18.316378f, 18.311260f, 18.306145f, 18.301033f,
18.295923f, 18.290817f, 18.285715f, 18.280613f, 18.275517f, 18.270420f,
18.265329f, 18.260241f, 18.255154f, 18.250071f, 18.244989f, 18.239910f,
18.234837f, 18.229763f, 18.224693f, 18.219627f, 18.214563f, 18.209503f,
18.204445f, 18.199389f, 18.194336f, 18.189287f, 18.184240f, 18.179195f,
18.174154f, 18.169115f, 18.164080f, 18.159046f, 18.154016f, 18.148989f,
18.143965f, 18.138943f, 18.133924f, 18.128908f, 18.123894f, 18.118883f,
18.113874f, 18.108870f, 18.103867f, 18.098867f, 18.093870f, 18.088877f,
18.083885f, 18.078897f, 18.073910f, 18.068928f, 18.063948f, 18.058969f,
18.053995f, 18.049023f, 18.044052f, 18.039085f, 18.034122f, 18.029161f,
18.024202f, 18.019247f, 18.014294f, 18.009344f, 18.004396f, 17.999451f,
17.994509f, 17.989569f, 17.984632f, 17.979698f, 17.974768f, 17.969839f,
17.964912f, 17.959990f, 17.955069f, 17.950151f, 17.945236f, 17.940323f,
17.935413f, 17.930506f, 17.925602f, 17.920700f, 17.915800f, 17.910904f,
17.906012f, 17.901119f, 17.896231f, 17.891346f, 17.886463f, 17.881582f,
17.876705f, 17.871830f, 17.866957f, 17.862087f, 17.857222f, 17.852356f,
17.847494f, 17.842636f, 17.837778f, 17.832926f, 17.828074f, 17.823225f,
17.818380f, 17.813536f, 17.808695f, 17.803858f, 17.799023f, 17.794189f,
17.789360f, 17.784533f, 17.779707f, 17.774885f, 17.770065f, 17.765247f,
17.760433f, 17.755621f, 17.750813f, 17.746006f, 17.741201f, 17.736401f,
17.731602f, 17.726805f, 17.722012f, 17.717220f, 17.712433f, 17.707647f,
17.702864f, 17.698082f, 17.693304f, 17.688530f, 17.683756f, 17.678986f,
17.674217f, 17.669453f, 17.664690f, 17.659929f, 17.655172f, 17.650417f,
17.645664f, 17.640915f, 17.636168f, 17.631424f, 17.626680f, 17.621941f,
17.617205f, 17.612471f, 17.607738f, 17.603008f, 17.598282f, 17.593557f,
17.588835f, 17.584116f, 17.579399f, 17.574684f, 17.569973f, 17.565264f,
17.560556f, 17.555853f, 17.551151f, 17.546452f, 17.541756f, 17.537062f,
17.532370f, 17.527681f, 17.522995f, 17.518311f, 17.513630f, 17.508949f,
17.504274f, 17.499599f, 17.494928f, 17.490259f, 17.485592f, 17.480928f,
17.476267f, 17.471607f, 17.466951f, 17.462297f, 17.457645f, 17.452995f,
17.448349f, 17.443705f, 17.439064f, 17.434423f, 17.429787f, 17.425154f,
17.420521f, 17.415892f, 17.411264f, 17.406641f, 17.402018f, 17.397398f,
17.392782f, 17.388166f, 17.383554f, 17.378944f, 17.374338f, 17.369732f,
17.365129f, 17.360529f, 17.355932f, 17.351337f, 17.346745f, 17.342154f,
17.337566f, 17.332981f, 17.328398f, 17.323816f, 17.319239f, 17.314663f,
17.310089f, 17.305519f, 17.300951f, 17.296385f, 17.291821f, 17.287260f,
17.282700f, 17.278145f, 17.273590f, 17.269039f, 17.264488f, 17.259943f,
17.255398f, 17.250856f, 17.246315f, 17.241779f, 17.237244f, 17.232712f,
17.228180f, 17.223654f, 17.219128f, 17.214605f, 17.210085f, 17.205566f,
17.201050f, 17.196537f, 17.192024f, 17.187517f, 17.183010f, 17.178507f,
17.174004f, 17.169504f, 17.165009f, 17.160513f, 17.156021f, 17.151531f,
17.147043f, 17.142559f, 17.138075f, 17.133595f, 17.129116f, 17.124641f,
17.120167f, 17.115696f, 17.111227f, 17.106760f, 17.102297f, 17.097836f,
17.093374f, 17.088919f, 17.084463f, 17.080011f, 17.075560f, 17.071112f,
17.066668f, 17.062223f, 17.057783f, 17.053343f, 17.048908f, 17.044474f,
17.040041f, 17.035612f, 17.031185f, 17.026760f, 17.022337f, 17.017918f,
17.013500f, 17.009085f, 17.004671f, 17.000259f, 16.995852f, 16.991444f,
16.987040f, 16.982637f, 16.978239f, 16.973841f, 16.969446f, 16.965054f,
16.960663f, 16.956274f, 16.951889f, 16.947504f, 16.943123f, 16.938744f,
16.934366f, 16.929993f, 16.925619f, 16.921249f, 16.916882f, 16.912516f,
16.908154f, 16.903791f, 16.899433f, 16.895077f, 16.890722f, 16.886370f,
16.882019f, 16.877672f, 16.873327f, 16.868984f, 16.864643f, 16.860304f,
16.855967f, 16.851633f, 16.847301f, 16.842972f, 16.838644f, 16.834318f,
16.829994f, 16.825674f, 16.821356f, 16.817039f, 16.812725f, 16.808413f,
16.804102f, 16.799795f, 16.795490f, 16.791185f, 16.786884f, 16.782587f,
16.778290f, 16.773994f, 16.769703f, 16.765413f, 16.761126f, 16.756840f,
16.752556f, 16.748276f, 16.743996f, 16.739719f, 16.735445f, 16.731173f,
16.726902f, 16.722633f, 16.718367f, 16.714104f, 16.709843f, 16.705582f,
16.701324f, 16.697069f, 16.692818f, 16.688566f, 16.684319f, 16.680071f,
16.675827f, 16.671585f, 16.667345f, 16.663107f, 16.658871f, 16.654638f,
16.650406f, 16.646177f, 16.641951f, 16.637726f, 16.633503f, 16.629282f,
16.625063f, 16.620848f, 16.616632f, 16.612421f, 16.608212f, 16.604004f,
16.599798f, 16.595594f, 16.591393f, 16.587193f, 16.582996f, 16.578800f,
16.574608f, 16.570417f, 16.566229f, 16.562042f, 16.557858f, 16.553675f,
16.549496f, 16.545317f, 16.541142f, 16.536966f, 16.532795f, 16.528625f,
16.524458f, 16.520292f, 16.516129f, 16.511969f, 16.507809f, 16.503651f,
16.499496f, 16.495344f, 16.491192f, 16.487043f, 16.482897f, 16.478752f,
16.474611f, 16.470470f, 16.466331f, 16.462196f, 16.458061f, 16.453930f,
16.449799f, 16.445671f, 16.441545f, 16.437422f, 16.433300f, 16.429180f,
16.425062f, 16.420948f, 16.416834f, 16.412722f, 16.408613f, 16.404505f,
16.400400f, 16.396297f, 16.392197f, 16.388098f, 16.384001f, 16.379906f,
16.375813f, 16.371721f, 16.367632f, 16.363546f, 16.359461f, 16.355377f,
16.351297f, 16.347219f, 16.343142f, 16.339067f, 16.334995f, 16.330925f,
16.326857f, 16.322790f, 16.318726f, 16.314663f, 16.310602f, 16.306543f,
16.302488f, 16.298433f, 16.294380f, 16.290331f, 16.286282f, 16.282236f,
16.278193f, 16.274149f, 16.270109f, 16.266071f, 16.262035f, 16.258001f,
16.253969f, 16.249939f, 16.245911f, 16.241884f, 16.237860f, 16.233837f,
16.229816f, 16.225798f, 16.221783f, 16.217768f, 16.213755f, 16.209745f,
16.205736f, 16.201731f, 16.197725f, 16.193724f, 16.189724f, 16.185724f,
16.181728f, 16.177734f, 16.173742f, 16.169750f, 16.165762f, 16.161776f,
16.157791f, 16.153809f, 16.149828f, 16.145849f, 16.141872f, 16.137897f,
16.133924f, 16.129953f, 16.125984f, 16.122017f, 16.118052f, 16.114088f,
16.110128f, 16.106169f, 16.102211f, 16.098255f, 16.094303f, 16.090351f,
16.086401f, 16.082455f, 16.078508f, 16.074564f, 16.070623f, 16.066683f,
16.062746f, 16.058809f, 16.054874f, 16.050943f, 16.047012f, 16.043085f,
16.039158f, 16.035234f, 16.031311f, 16.027391f, 16.023472f, 16.019556f,
16.015640f, 16.011728f, 16.007816f, 16.003908f, 16.000000f
// Fixed point 0.32 reciprocal table.
extern const uint32 kRecipTable[4097] = {
0, 0xffffffff, 2147483648, 1431655808, 1073741824, 858993472,
715827904, 613566784, 536870912, 477218592, 429496736, 390451584,
357913952, 330382112, 306783392, 286331168, 268435456, 252645136,
238609296, 226050912, 214748368, 204522256, 195225792, 186737712,
178956976, 171798688, 165191056, 159072864, 153391696, 148102320,
143165584, 138547328, 134217728, 130150528, 126322568, 122713352,
119304648, 116080200, 113025456, 110127368, 107374184, 104755296,
102261128, 99882960, 97612896, 95443720, 93368856, 91382280,
89478488, 87652392, 85899344, 84215048, 82595528, 81037120,
79536432, 78090312, 76695848, 75350304, 74051160, 72796056,
71582792, 70409296, 69273664, 68174088, 67108864, 66076420,
65075264, 64103988, 63161284, 62245904, 61356676, 60492496,
59652324, 58835168, 58040100, 57266232, 56512728, 55778796,
55063684, 54366676, 53687092, 53024288, 52377648, 51746592,
51130564, 50529028, 49941480, 49367440, 48806448, 48258060,
47721860, 47197444, 46684428, 46182444, 45691140, 45210184,
44739244, 44278012, 43826196, 43383508, 42949672, 42524428,
42107524, 41698712, 41297764, 40904452, 40518560, 40139880,
39768216, 39403368, 39045156, 38693400, 38347924, 38008560,
37675152, 37347540, 37025580, 36709124, 36398028, 36092164,
35791396, 35495596, 35204648, 34918432, 34636832, 34359740,
34087044, 33818640, 33554432, 33294320, 33038210, 32786010,
32537632, 32292988, 32051994, 31814572, 31580642, 31350126,
31122952, 30899046, 30678338, 30460760, 30246248, 30034736,
29826162, 29620464, 29417584, 29217464, 29020050, 28825284,
28633116, 28443492, 28256364, 28071682, 27889398, 27709466,
27531842, 27356480, 27183338, 27012372, 26843546, 26676816,
26512144, 26349492, 26188824, 26030104, 25873296, 25718368,
25565282, 25414008, 25264514, 25116768, 24970740, 24826400,
24683720, 24542670, 24403224, 24265352, 24129030, 23994230,
23860930, 23729102, 23598722, 23469766, 23342214, 23216040,
23091222, 22967740, 22845570, 22724694, 22605092, 22486740,
22369622, 22253716, 22139006, 22025474, 21913098, 21801864,
21691754, 21582750, 21474836, 21367996, 21262214, 21157474,
21053762, 20951060, 20849356, 20748634, 20648882, 20550082,
20452226, 20355296, 20259280, 20164166, 20069940, 19976592,
19884108, 19792476, 19701684, 19611722, 19522578, 19434242,
19346700, 19259944, 19173962, 19088744, 19004280, 18920560,
18837576, 18755316, 18673770, 18592932, 18512790, 18433336,
18354562, 18276456, 18199014, 18122224, 18046082, 17970574,
17895698, 17821442, 17747798, 17674762, 17602324, 17530478,
17459216, 17388532, 17318416, 17248864, 17179870, 17111424,
17043522, 16976156, 16909320, 16843010, 16777216, 16711936,
16647160, 16582886, 16519106, 16455814, 16393006, 16330674,
16268816, 16207424, 16146494, 16086020, 16025998, 15966422,
15907286, 15848588, 15790322, 15732482, 15675064, 15618064,
15561476, 15505298, 15449524, 15394148, 15339170, 15284582,
15230380, 15176564, 15123124, 15070062, 15017368, 14965044,
14913082, 14861480, 14810232, 14759338, 14708792, 14658592,
14608732, 14559212, 14510026, 14461170, 14412642, 14364440,
14316558, 14268994, 14221746, 14174810, 14128182, 14081860,
14035842, 13990122, 13944700, 13899572, 13854734, 13810184,
13765922, 13721940, 13678240, 13634818, 13591670, 13548794,
13506186, 13463848, 13421774, 13379960, 13338408, 13297112,
13256072, 13215284, 13174746, 13134458, 13094412, 13054612,
13015052, 12975732, 12936648, 12897800, 12859184, 12820798,
12782642, 12744710, 12707004, 12669520, 12632258, 12595212,
12558384, 12521772, 12485370, 12449182, 12413200, 12377428,
12341860, 12306498, 12271336, 12236374, 12201612, 12167046,
12132676, 12098500, 12064516, 12030722, 11997116, 11963698,
11930466, 11897416, 11864552, 11831866, 11799362, 11767034,
11734884, 11702908, 11671108, 11639478, 11608020, 11576732,
11545612, 11514658, 11483870, 11453246, 11422786, 11392486,
11362348, 11332368, 11302546, 11272880, 11243370, 11214014,
11184812, 11155760, 11126858, 11098108, 11069504, 11041048,
11012738, 10984572, 10956550, 10928670, 10900932, 10873336,
10845878, 10818558, 10791376, 10764330, 10737418, 10710642,
10683998, 10657488, 10631108, 10604858, 10578738, 10552746,
10526882, 10501144, 10475530, 10450042, 10424678, 10399438,
10374318, 10349320, 10324442, 10299682, 10275042, 10250520,
10226114, 10201824, 10177648, 10153588, 10129640, 10105806,
10082084, 10058472, 10034970, 10011580, 9988296, 9965122,
9942054, 9919094, 9896238, 9873488, 9850842, 9828300,
9805862, 9783526, 9761290, 9739156, 9717122, 9695186,
9673350, 9651612, 9629972, 9608428, 9586982, 9565630,
9544372, 9523210, 9502140, 9481164, 9460280, 9439490,
9418788, 9398178, 9377658, 9357228, 9336886, 9316632,
9296466, 9276388, 9256396, 9236490, 9216668, 9196932,
9177282, 9157714, 9138228, 9118828, 9099508, 9080270,
9061112, 9042036, 9023042, 9004124, 8985288, 8966530,
8947850, 8929246, 8910722, 8892272, 8873900, 8855604,
8837382, 8819236, 8801162, 8783164, 8765240, 8747388,
8729608, 8711902, 8694266, 8676702, 8659208, 8641786,
8624432, 8607150, 8589936, 8572790, 8555712, 8538702,
8521762, 8504886, 8488078, 8471336, 8454660, 8438050,
8421506, 8405024, 8388608, 8372256, 8355968, 8339743,
8323580, 8307481, 8291443, 8275467, 8259553, 8243699,
8227907, 8212175, 8196503, 8180890, 8165337, 8149843,
8134408, 8119031, 8103712, 8088451, 8073247, 8058100,
8043010, 8027977, 8012999, 7998077, 7983211, 7968400,
7953643, 7938942, 7924294, 7909701, 7895161, 7880674,
7866241, 7851860, 7837532, 7823256, 7809032, 7794859,
7780738, 7766668, 7752649, 7738680, 7724762, 7710893,
7697074, 7683305, 7669585, 7655913, 7642291, 7628717,
7615190, 7601712, 7588282, 7574898, 7561562, 7548273,
7535031, 7521834, 7508684, 7495580, 7482522, 7469509,
7456541, 7443618, 7430740, 7417906, 7405116, 7392371,
7379669, 7367011, 7354396, 7341825, 7329296, 7316810,
7304366, 7291965, 7279606, 7267288, 7255013, 7242778,
7230585, 7218433, 7206321, 7194250, 7182220, 7170229,
7158279, 7146368, 7134497, 7122666, 7110873, 7099120,
7087405, 7075729, 7064091, 7052492, 7040930, 7029407,
7017921, 7006472, 6995061, 6983687, 6972350, 6961049,
6949786, 6938558, 6927367, 6916212, 6905092, 6894009,
6882961, 6871948, 6860970, 6850028, 6839120, 6828247,
6817409, 6806605, 6795835, 6785099, 6774397, 6763728,
6753093, 6742492, 6731924, 6721389, 6710887, 6700417,
6689980, 6679576, 6669204, 6658864, 6648556, 6638280,
6628036, 6617824, 6607642, 6597492, 6587373, 6577286,
6567229, 6557202, 6547206, 6537241, 6527306, 6517401,
6507526, 6497681, 6487866, 6478081, 6468324, 6458598,
6448900, 6439232, 6429592, 6419981, 6410399, 6400846,
6391321, 6381824, 6372355, 6362915, 6353502, 6344117,
6334760, 6325431, 6316129, 6306854, 6297606, 6288386,
6279192, 6270025, 6260886, 6251772, 6242685, 6233625,
6224591, 6215582, 6206600, 6197644, 6188714, 6179809,
6170930, 6162077, 6153249, 6144446, 6135668, 6126915,
6118187, 6109484, 6100806, 6092152, 6083523, 6074919,
6066338, 6057782, 6049250, 6040742, 6032258, 6023797,
6015361, 6006948, 5998558, 5990192, 5981849, 5973529,
5965233, 5956959, 5948708, 5940481, 5932276, 5924093,
5915933, 5907796, 5899681, 5891588, 5883517, 5875469,
5867442, 5859437, 5851454, 5843493, 5835554, 5827636,
5819739, 5811864, 5804010, 5796177, 5788366, 5780575,
5772806, 5765057, 5757329, 5749622, 5741935, 5734269,
5726623, 5718998, 5711393, 5703808, 5696243, 5688699,
5681174, 5673669, 5666184, 5658719, 5651273, 5643847,
5636440, 5629053, 5621685, 5614337, 5607007, 5599697,
5592406, 5585133, 5577880, 5570645, 5563429, 5556232,
5549054, 5541894, 5534752, 5527629, 5520524, 5513437,
5506369, 5499318, 5492286, 5485271, 5478275, 5471296,
5464335, 5457392, 5450466, 5443558, 5436668, 5429795,
5422939, 5416100, 5409279, 5402475, 5395688, 5388918,
5382165, 5375429, 5368709, 5362007, 5355321, 5348652,
5341999, 5335363, 5328744, 5322141, 5315554, 5308983,
5302429, 5295891, 5289369, 5282863, 5276373, 5269899,
5263441, 5256998, 5250572, 5244161, 5237765, 5231386,
5225021, 5218673, 5212339, 5206021, 5199719, 5193431,
5187159, 5180902, 5174660, 5168433, 5162221, 5156023,
5149841, 5143674, 5137521, 5131383, 5125260, 5119151,
5113057, 5106977, 5100912, 5094861, 5088824, 5082802,
5076794, 5070800, 5064820, 5058855, 5052903, 5046965,
5041042, 5035132, 5029236, 5023354, 5017485, 5011631,
5005790, 4999962, 4994148, 4988348, 4982561, 4976787,
4971027, 4965280, 4959547, 4953826, 4948119, 4942425,
4936744, 4931076, 4925421, 4919780, 4914150, 4908534,
4902931, 4897340, 4891763, 4886197, 4880645, 4875105,
4869578, 4864063, 4858561, 4853071, 4847593, 4842128,
4836675, 4831235, 4825806, 4820390, 4814986, 4809594,
4804214, 4798846, 4793491, 4788147, 4782815, 4777494,
4772186, 4766890, 4761605, 4756332, 4751070, 4745820,
4740582, 4735356, 4730140, 4724937, 4719745, 4714564,
4709394, 4704236, 4699089, 4693954, 4688829, 4683716,
4678614, 4673523, 4668443, 4663374, 4658316, 4653269,
4648233, 4643208, 4638194, 4633190, 4628198, 4623216,
4618245, 4613284, 4608334, 4603395, 4598466, 4593548,
4588641, 4583743, 4578857, 4573980, 4569114, 4564259,
4559414, 4554579, 4549754, 4544939, 4540135, 4535341,
4530556, 4525782, 4521018, 4516264, 4511521, 4506786,
4502062, 4497348, 4492644, 4487949, 4483265, 4478590,
4473925, 4469269, 4464623, 4459987, 4455361, 4450744,
4446136, 4441538, 4436950, 4432371, 4427802, 4423242,
4418691, 4414150, 4409618, 4405095, 4400581, 4396077,
4391582, 4387097, 4382620, 4378152, 4373694, 4369245,
4364804, 4360373, 4355951, 4351538, 4347133, 4342738,
4338351, 4333973, 4329604, 4325244, 4320893, 4316550,
4312216, 4307891, 4303575, 4299267, 4294968, 4290677,
4286395, 4282121, 4277856, 4273600, 4269351, 4265112,
4260881, 4256658, 4252443, 4248237, 4244039, 4239850,
4235668, 4231495, 4227330, 4223174, 4219025, 4214885,
4210753, 4206628, 4202512, 4198404, 4194304, 4190212,
4186128, 4182052, 4177984, 4173924, 4169871, 4165827,
4161790, 4157761, 4153740, 4149727, 4145721, 4141724,
4137734, 4133751, 4129776, 4125809, 4121850, 4117898,
4113953, 4110017, 4106087, 4102166, 4098251, 4094345,
4090445, 4086553, 4082669, 4078791, 4074922, 4071059,
4067204, 4063356, 4059516, 4055682, 4051856, 4048037,
4044225, 4040421, 4036624, 4032833, 4029050, 4025274,
4021505, 4017743, 4013988, 4010240, 4006499, 4002766,
3999039, 3995319, 3991605, 3987899, 3984200, 3980507,
3976822, 3973143, 3969471, 3965806, 3962147, 3958495,
3954850, 3951212, 3947580, 3943955, 3940337, 3936725,
3933120, 3929522, 3925930, 3922345, 3918766, 3915194,
3911628, 3908069, 3904516, 3900970, 3897430, 3893896,
3890369, 3886848, 3883334, 3879826, 3876324, 3872829,
3869340, 3865857, 3862381, 3858911, 3855447, 3851989,
3848537, 3845092, 3841652, 3838219, 3834792, 3831371,
3827957, 3824548, 3821145, 3817749, 3814358, 3810974,
3807595, 3804223, 3800856, 3797496, 3794141, 3790792,
3787449, 3784112, 3780781, 3777456, 3774137, 3770823,
3767515, 3764213, 3760917, 3757627, 3754342, 3751063,
3747790, 3744523, 3741261, 3738005, 3734754, 3731510,
3728270, 3725037, 3721809, 3718587, 3715370, 3712159,
3708953, 3705753, 3702558, 3699369, 3696185, 3693007,
3689835, 3686667, 3683506, 3680349, 3677198, 3674053,
3670912, 3667777, 3664648, 3661524, 3658405, 3655291,
3652183, 3649080, 3645983, 3642890, 3639803, 3636721,
3633644, 3630573, 3627506, 3624445, 3621389, 3618338,
3615292, 3612252, 3609216, 3606186, 3603161, 3600140,
3597125, 3594115, 3591110, 3588110, 3585115, 3582125,
3579140, 3576159, 3573184, 3570214, 3567249, 3564288,
3561333, 3558382, 3555437, 3552496, 3549560, 3546629,
3543703, 3540781, 3537864, 3534953, 3532046, 3529143,
3526246, 3523353, 3520465, 3517582, 3514703, 3511829,
3508960, 3506096, 3503236, 3500381, 3497530, 3494685,
3491843, 3489007, 3486175, 3483347, 3480525, 3477706,
3474893, 3472084, 3469279, 3466479, 3463683, 3460892,
3458106, 3455324, 3452546, 3449773, 3447004, 3444240,
3441480, 3438725, 3435974, 3433227, 3430485, 3427747,
3425014, 3422285, 3419560, 3416840, 3414124, 3411412,
3408704, 3406001, 3403302, 3400608, 3397917, 3395231,
3392549, 3389872, 3387198, 3384529, 3381864, 3379203,
3376547, 3373894, 3371246, 3368602, 3365962, 3363326,
3360694, 3358067, 3355443, 3352824, 3350209, 3347597,
3344990, 3342387, 3339788, 3337193, 3334602, 3332015,
3329432, 3326853, 3324278, 3321707, 3319140, 3316577,
3314018, 3311463, 3308912, 3306364, 3303821, 3301282,
3298746, 3296214, 3293687, 3291163, 3288643, 3286127,
3283614, 3281106, 3278601, 3276100, 3273603, 3271110,
3268621, 3266135, 3263653, 3261175, 3258701, 3256230,
3253763, 3251300, 3248841, 3246385, 3243933, 3241485,
3239040, 3236599, 3234162, 3231729, 3229299, 3226873,
3224450, 3222031, 3219616, 3217204, 3214796, 3212392,
3209991, 3207593, 3205200, 3202809, 3200423, 3198040,
3195660, 3193284, 3190912, 3188543, 3186178, 3183816,
3181457, 3179102, 3176751, 3174403, 3172059, 3169718,
3167380, 3165046, 3162715, 3160388, 3158064, 3155744,
3153427, 3151113, 3148803, 3146496, 3144193, 3141893,
3139596, 3137303, 3135013, 3132726, 3130443, 3128163,
3125886, 3123613, 3121343, 3119076, 3116812, 3114552,
3112295, 3110042, 3107791, 3105544, 3103300, 3101060,
3098822, 3096588, 3094357, 3092129, 3089905, 3087683,
3085465, 3083250, 3081038, 3078830, 3076624, 3074422,
3072223, 3070027, 3067834, 3065644, 3063458, 3061274,
3059094, 3056916, 3054742, 3052571, 3050403, 3048238,
3046076, 3043917, 3041762, 3039609, 3037459, 3035313,
3033169, 3031029, 3028891, 3026756, 3024625, 3022496,
3020371, 3018248, 3016129, 3014012, 3011899, 3009788,
3007680, 3005576, 3003474, 3001375, 2999279, 2997186,
2995096, 2993009, 2990924, 2988843, 2986765, 2984689,
2982616, 2980546, 2978480, 2976415, 2974354, 2972296,
2970240, 2968188, 2966138, 2964091, 2962047, 2960005,
2957967, 2955931, 2953898, 2951868, 2949840, 2947816,
2945794, 2943775, 2941759, 2939745, 2937734, 2935726,
2933721, 2931718, 2929719, 2927722, 2925727, 2923736,
2921747, 2919760, 2917777, 2915796, 2913818, 2911842,
2909870, 2907899, 2905932, 2903967, 2902005, 2900046,
2898089, 2896135, 2894183, 2892234, 2890288, 2888344,
2886403, 2884464, 2882529, 2880595, 2878665, 2876736,
2874811, 2872888, 2870968, 2869050, 2867135, 2865222,
2863312, 2861404, 2859499, 2857596, 2855696, 2853799,
2851904, 2850012, 2848122, 2846234, 2844349, 2842467,
2840587, 2838710, 2836835, 2834962, 2833092, 2831224,
2829359, 2827497, 2825637, 2823779, 2821923, 2820071,
2818220, 2816372, 2814527, 2812683, 2810843, 2809004,
2807168, 2805335, 2803504, 2801675, 2799848, 2798024,
2796203, 2794384, 2792567, 2790752, 2788940, 2787130,
2785323, 2783517, 2781715, 2779914, 2778116, 2776320,
2774527, 2772736, 2770947, 2769160, 2767376, 2765594,
2763814, 2762037, 2760262, 2758489, 2756719, 2754950,
2753184, 2751421, 2749659, 2747900, 2746143, 2744388,
2742636, 2740885, 2739137, 2737392, 2735648, 2733907,
2732168, 2730431, 2728696, 2726963, 2725233, 2723505,
2721779, 2720055, 2718334, 2716614, 2714897, 2713182,
2711469, 2709759, 2708050, 2706344, 2704639, 2702937,
2701237, 2699540, 2697844, 2696150, 2694459, 2692770,
2691082, 2689397, 2687714, 2686033, 2684355, 2682678,
2681003, 2679331, 2677661, 2675992, 2674326, 2672662,
2671000, 2669340, 2667682, 2666026, 2664372, 2662720,
2661070, 2659423, 2657777, 2656133, 2654492, 2652852,
2651215, 2649579, 2647945, 2646314, 2644684, 2643057,
2641431, 2639808, 2638186, 2636567, 2634949, 2633334,
2631720, 2630109, 2628499, 2626891, 2625286, 2623682,
2622080, 2620480, 2618883, 2617287, 2615693, 2614101,
2612511, 2610922, 2609336, 2607752, 2606170, 2604589,
2603011, 2601434, 2599859, 2598286, 2596716, 2595147,
2593579, 2592014, 2590451, 2588889, 2587330, 2585772,
2584216, 2582662, 2581110, 2579560, 2578012, 2576465,
2574921, 2573378, 2571837, 2570298, 2568760, 2567225,
2565691, 2564160, 2562630, 2561102, 2559575, 2558051,
2556528, 2555007, 2553488, 2551971, 2550456, 2548942,
2547430, 2545920, 2544412, 2542906, 2541401, 2539898,
2538397, 2536898, 2535400, 2533904, 2532410, 2530918,
2529427, 2527938, 2526451, 2524966, 2523483, 2522001,
2520521, 2519043, 2517566, 2516091, 2514618, 2513147,
2511677, 2510209, 2508743, 2507278, 2505815, 2504354,
2502895, 2501437, 2499981, 2498527, 2497074, 2495623,
2494174, 2492726, 2491280, 2489836, 2488394, 2486953,
2485514, 2484076, 2482640, 2481206, 2479773, 2478342,
2476913, 2475486, 2474060, 2472635, 2471213, 2469792,
2468372, 2466954, 2465538, 2464124, 2462711, 2461299,
2459890, 2458482, 2457075, 2455670, 2454267, 2452866,
2451465, 2450067, 2448670, 2447275, 2445881, 2444489,
2443099, 2441710, 2440322, 2438937, 2437553, 2436170,
2434789, 2433409, 2432031, 2430655, 2429280, 2427907,
2426535, 2425165, 2423797, 2422430, 2421064, 2419700,
2418338, 2416977, 2415617, 2414259, 2412903, 2411548,
2410195, 2408843, 2407493, 2406144, 2404797, 2403451,
2402107, 2400764, 2399423, 2398083, 2396745, 2395409,
2394073, 2392740, 2391407, 2390077, 2388747, 2387419,
2386093, 2384768, 2383445, 2382123, 2380802, 2379483,
2378166, 2376850, 2375535, 2374222, 2372910, 2371600,
2370291, 2368984, 2367678, 2366373, 2365070, 2363769,
2362468, 2361170, 2359872, 2358576, 2357282, 2355989,
2354697, 2353407, 2352118, 2350831, 2349545, 2348260,
2346977, 2345695, 2344415, 2343136, 2341858, 2340582,
2339307, 2338033, 2336761, 2335491, 2334221, 2332954,
2331687, 2330422, 2329158, 2327896, 2326635, 2325375,
2324117, 2322860, 2321604, 2320350, 2319097, 2317845,
2316595, 2315346, 2314099, 2312853, 2311608, 2310364,
2309122, 2307882, 2306642, 2305404, 2304167, 2302932,
2301697, 2300465, 2299233, 2298003, 2296774, 2295547,
2294320, 2293095, 2291872, 2290649, 2289428, 2288209,
2286990, 2285773, 2284557, 2283343, 2282129, 2280917,
2279707, 2278497, 2277289, 2276082, 2274877, 2273673,
2272470, 2271268, 2270067, 2268868, 2267670, 2266474,
2265278, 2264084, 2262891, 2261700, 2260509, 2259320,
2258132, 2256946, 2255760, 2254576, 2253393, 2252212,
2251031, 2249852, 2248674, 2247497, 2246322, 2245148,
2243975, 2242803, 2241632, 2240463, 2239295, 2238128,
2236962, 2235798, 2234635, 2233472, 2232312, 2231152,
2229994, 2228836, 2227680, 2226525, 2225372, 2224219,
2223068, 2221918, 2220769, 2219621, 2218475, 2217330,
2216186, 2215043, 2213901, 2212760, 2211621, 2210483,
2209345, 2208210, 2207075, 2205941, 2204809, 2203678,
2202547, 2201419, 2200291, 2199164, 2198039, 2196914,
2195791, 2194669, 2193548, 2192429, 2191310, 2190193,
2189076, 2187961, 2186847, 2185734, 2184622, 2183512,
2182402, 2181294, 2180187, 2179080, 2177975, 2176872,
2175769, 2174667, 2173567, 2172467, 2171369, 2170272,
2169176, 2168081, 2166987, 2165894, 2164802, 2163712,
2162622, 2161534, 2160446, 2159360, 2158275, 2157191,
2156108, 2155026, 2153946, 2152866, 2151787, 2150710,
2149633, 2148558, 2147484, 2146411, 2145338, 2144267,
2143197, 2142128, 2141061, 2139994, 2138928, 2137863,
2136800, 2135737, 2134676, 2133615, 2132556, 2131498,
2130440, 2129384, 2128329, 2127275, 2126222, 2125169,
2124118, 2123068, 2122020, 2120972, 2119925, 2118879,
2117834, 2116790, 2115748, 2114706, 2113665, 2112625,
2111587, 2110549, 2109513, 2108477, 2107442, 2106409,
2105376, 2104345, 2103314, 2102285, 2101256, 2100229,
2099202, 2098177, 2097152, 2096129, 2095106, 2094085,
2093064, 2092045, 2091026, 2090008, 2088992, 2087976,
2086962, 2085948, 2084936, 2083924, 2082913, 2081904,
2080895, 2079887, 2078881, 2077875, 2076870, 2075866,
2074863, 2073862, 2072861, 2071861, 2070862, 2069864,
2068867, 2067871, 2066876, 2065881, 2064888, 2063896,
2062905, 2061914, 2060925, 2059936, 2058949, 2057962,
2056977, 2055992, 2055008, 2054026, 2053044, 2052063,
2051083, 2050104, 2049126, 2048149, 2047172, 2046197,
2045223, 2044249, 2043277, 2042305, 2041334, 2040365,
2039396, 2038428, 2037461, 2036495, 2035530, 2034565,
2033602, 2032640, 2031678, 2030717, 2029758, 2028799,
2027841, 2026884, 2025928, 2024973, 2024019, 2023065,
2022113, 2021161, 2020210, 2019261, 2018312, 2017364,
2016417, 2015470, 2014525, 2013581, 2012637, 2011694,
2010753, 2009812, 2008872, 2007932, 2006994, 2006057,
2005120, 2004185, 2003250, 2002316, 2001383, 2000451,
1999519, 1998589, 1997659, 1996731, 1995803, 1994876,
1993950, 1993024, 1992100, 1991176, 1990254, 1989332,
1988411, 1987491, 1986571, 1985653, 1984735, 1983819,
1982903, 1981988, 1981074, 1980160, 1979248, 1978336,
1977425, 1976515, 1975606, 1974698, 1973790, 1972884,
1971978, 1971073, 1970169, 1969265, 1968363, 1967461,
1966560, 1965660, 1964761, 1963863, 1962965, 1962068,
1961172, 1960277, 1959383, 1958489, 1957597, 1956705,
1955814, 1954924, 1954034, 1953146, 1952258, 1951371,
1950485, 1949599, 1948715, 1947831, 1946948, 1946066,
1945185, 1944304, 1943424, 1942545, 1941667, 1940790,
1939913, 1939037, 1938162, 1937288, 1936415, 1935542,
1934670, 1933799, 1932929, 1932059, 1931190, 1930322,
1929455, 1928589, 1927723, 1926858, 1925994, 1925131,
1924269, 1923407, 1922546, 1921686, 1920826, 1919968,
1919110, 1918253, 1917396, 1916541, 1915686, 1914832,
1913978, 1913126, 1912274, 1911423, 1910573, 1909723,
1908874, 1908026, 1907179, 1906333, 1905487, 1904642,
1903798, 1902954, 1902111, 1901269, 1900428, 1899588,
1898748, 1897909, 1897070, 1896233, 1895396, 1894560,
1893725, 1892890, 1892056, 1891223, 1890391, 1889559,
1888728, 1887898, 1887068, 1886240, 1885412, 1884584,
1883758, 1882932, 1882107, 1881282, 1880459, 1879636,
1878813, 1877992, 1877171, 1876351, 1875532, 1874713,
1873895, 1873078, 1872261, 1871446, 1870630, 1869816,
1869002, 1868189, 1867377, 1866566, 1865755, 1864945,
1864135, 1863326, 1862518, 1861711, 1860904, 1860099,
1859293, 1858489, 1857685, 1856882, 1856079, 1855278,
1854476, 1853676, 1852876, 1852077, 1851279, 1850481,
1849685, 1848888, 1848093, 1847298, 1846504, 1845710,
1844917, 1844125, 1843334, 1842543, 1841753, 1840963,
1840175, 1839386, 1838599, 1837812, 1837026, 1836241,
1835456, 1834672, 1833889, 1833106, 1832324, 1831543,
1830762, 1829982, 1829202, 1828424, 1827646, 1826868,
1826092, 1825316, 1824540, 1823765, 1822991, 1822218,
1821445, 1820673, 1819901, 1819131, 1818360, 1817591,
1816822, 1816054, 1815286, 1814519, 1813753, 1812988,
1812223, 1811458, 1810695, 1809931, 1809169, 1808407,
1807646, 1806886, 1806126, 1805367, 1804608, 1803850,
1803093, 1802336, 1801580, 1800825, 1800070, 1799316,
1798563, 1797810, 1797058, 1796306, 1795555, 1794805,
1794055, 1793306, 1792557, 1791810, 1791062, 1790316,
1789570, 1788824, 1788080, 1787336, 1786592, 1785849,
1785107, 1784365, 1783624, 1782884, 1782144, 1781405,
1780666, 1779928, 1779191, 1778454, 1777718, 1776983,
1776248, 1775514, 1774780, 1774047, 1773314, 1772583,
1771851, 1771121, 1770391, 1769661, 1768932, 1768204,
1767476, 1766749, 1766023, 1765297, 1764572, 1763847,
1763123, 1762399, 1761677, 1760954, 1760233, 1759511,
1758791, 1758071, 1757352, 1756633, 1755915, 1755197,
1754480, 1753764, 1753048, 1752333, 1751618, 1750904,
1750190, 1749478, 1748765, 1748054, 1747342, 1746632,
1745922, 1745212, 1744503, 1743795, 1743087, 1742380,
1741674, 1740968, 1740262, 1739557, 1738853, 1738150,
1737446, 1736744, 1736042, 1735340, 1734640, 1733939,
1733239, 1732540, 1731842, 1731144, 1730446, 1729749,
1729053, 1728357, 1727662, 1726967, 1726273, 1725580,
1724887, 1724194, 1723502, 1722811, 1722120, 1721430,
1720740, 1720051, 1719362, 1718674, 1717987, 1717300,
1716614, 1715928, 1715243, 1714558, 1713874, 1713190,
1712507, 1711824, 1711142, 1710461, 1709780, 1709100,
1708420, 1707741, 1707062, 1706384, 1705706, 1705029,
1704352, 1703676, 1703001, 1702326, 1701651, 1700977,
1700304, 1699631, 1698959, 1698287, 1697616, 1696945,
1696275, 1695605, 1694936, 1694267, 1693599, 1692932,
1692265, 1691598, 1690932, 1690267, 1689602, 1688937,
1688273, 1687610, 1686947, 1686285, 1685623, 1684962,
1684301, 1683641, 1682981, 1682322, 1681663, 1681005,
1680347, 1679690, 1679033, 1678377, 1677722, 1677067,
1676412, 1675758, 1675104, 1674451, 1673799, 1673147,
1672495, 1671844, 1671194, 1670544, 1669894, 1669245,
1668597, 1667949, 1667301, 1666654, 1666008, 1665362,
1664716, 1664071, 1663427, 1662783, 1662139, 1661496,
1660854, 1660212, 1659570, 1658929, 1658289, 1657649,
1657009, 1656370, 1655731, 1655093, 1654456, 1653819,
1653182, 1652546, 1651911, 1651275, 1650641, 1650007,
1649373, 1648740, 1648107, 1647475, 1646843, 1646212,
1645581, 1644951, 1644321, 1643692, 1643063, 1642435,
1641807, 1641180, 1640553, 1639926, 1639301, 1638675,
1638050, 1637426, 1636802, 1636178, 1635555, 1634932,
1634310, 1633689, 1633067, 1632447, 1631827, 1631207,
1630587, 1629969, 1629350, 1628732, 1628115, 1627498,
1626882, 1626266, 1625650, 1625035, 1624420, 1623806,
1623193, 1622579, 1621967, 1621354, 1620742, 1620131,
1619520, 1618910, 1618300, 1617690, 1617081, 1616473,
1615864, 1615257, 1614649, 1614043, 1613436, 1612830,
1612225, 1611620, 1611016, 1610411, 1609808, 1609205,
1608602, 1608000, 1607398, 1606797, 1606196, 1605595,
1604995, 1604396, 1603797, 1603198, 1602600, 1602002,
1601405, 1600808, 1600211, 1599615, 1599020, 1598425,
1597830, 1597236, 1596642, 1596049, 1595456, 1594864,
1594272, 1593680, 1593089, 1592498, 1591908, 1591318,
1590729, 1590140, 1589551, 1588963, 1588376, 1587788,
1587202, 1586615, 1586029, 1585444, 1584859, 1584274,
1583690, 1583106, 1582523, 1581940, 1581358, 1580776,
1580194, 1579613, 1579032, 1578452, 1577872, 1577292,
1576713, 1576135, 1575557, 1574979, 1574402, 1573825,
1573248, 1572672, 1572096, 1571521, 1570946, 1570372,
1569798, 1569225, 1568651, 1568079, 1567506, 1566935,
1566363, 1565792, 1565221, 1564651, 1564081, 1563512,
1562943, 1562374, 1561806, 1561239, 1560671, 1560104,
1559538, 1558972, 1558406, 1557841, 1557276, 1556712,
1556148, 1555584, 1555021, 1554458, 1553896, 1553334,
1552772, 1552211, 1551650, 1551090, 1550530, 1549970,
1549411, 1548852, 1548294, 1547736, 1547178, 1546621,
1546065, 1545508, 1544952, 1544397, 1543842, 1543287,
1542733, 1542179, 1541625, 1541072, 1540519, 1539967,
1539415, 1538863, 1538312, 1537761, 1537211, 1536661,
1536111, 1535562, 1535013, 1534465, 1533917, 1533369,
1532822, 1532275, 1531729, 1531183, 1530637, 1530092,
1529547, 1529002, 1528458, 1527914, 1527371, 1526828,
1526286, 1525743, 1525202, 1524660, 1524119, 1523578,
1523038, 1522498, 1521959, 1521420, 1520881, 1520342,
1519804, 1519267, 1518730, 1518193, 1517656, 1517120,
1516585, 1516049, 1515514, 1514980, 1514446, 1513912,
1513378, 1512845, 1512312, 1511780, 1511248, 1510717,
1510185, 1509655, 1509124, 1508594, 1508064, 1507535,
1507006, 1506478, 1505949, 1505421, 1504894, 1504367,
1503840, 1503314, 1502788, 1502262, 1501737, 1501212,
1500687, 1500163, 1499639, 1499116, 1498593, 1498070,
1497548, 1497026, 1496504, 1495983, 1495462, 1494942,
1494422, 1493902, 1493382, 1492863, 1492345, 1491826,
1491308, 1490791, 1490273, 1489756, 1489240, 1488724,
1488208, 1487692, 1487177, 1486662, 1486148, 1485634,
1485120, 1484607, 1484094, 1483581, 1483069, 1482557,
1482045, 1481534, 1481023, 1480513, 1480003, 1479493,
1478983, 1478474, 1477965, 1477457, 1476949, 1476441,
1475934, 1475427, 1474920, 1474414, 1473908, 1473402,
1472897, 1472392, 1471887, 1471383, 1470879, 1470376,
1469873, 1469370, 1468867, 1468365, 1467863, 1467362,
1466860, 1466360, 1465859, 1465359, 1464859, 1464360,
1463861, 1463362, 1462864, 1462366, 1461868, 1461370,
1460873, 1460377, 1459880, 1459384, 1458888, 1458393,
1457898, 1457403, 1456909, 1456415, 1455921, 1455428,
1454935, 1454442, 1453950, 1453458, 1452966, 1452475,
1451984, 1451493, 1451003, 1450512, 1450023, 1449533,
1449044, 1448556, 1448067, 1447579, 1447091, 1446604,
1446117, 1445630, 1445144, 1444658, 1444172, 1443687,
1443201, 1442717, 1442232, 1441748, 1441264, 1440781,
1440298, 1439815, 1439332, 1438850, 1438368, 1437887,
1437405, 1436925, 1436444, 1435964, 1435484, 1435004,
1434525, 1434046, 1433567, 1433089, 1432611, 1432133,
1431656, 1431179, 1430702, 1430226, 1429749, 1429274,
1428798, 1428323, 1427848, 1427374, 1426899, 1426426,
1425952, 1425479, 1425006, 1424533, 1424061, 1423589,
1423117, 1422646, 1422175, 1421704, 1421233, 1420763,
1420293, 1419824, 1419355, 1418886, 1418417, 1417949,
1417481, 1417013, 1416546, 1416079, 1415612, 1415146,
1414680, 1414214, 1413748, 1413283, 1412818, 1412354,
1411889, 1411425, 1410962, 1410498, 1410035, 1409573,
1409110, 1408648, 1408186, 1407725, 1407263, 1406802,
1406342, 1405881, 1405421, 1404962, 1404502, 1404043,
1403584, 1403126, 1402667, 1402209, 1401752, 1401294,
1400837, 1400381, 1399924, 1399468, 1399012, 1398557,
1398101, 1397646, 1397192, 1396737, 1396283, 1395830,
1395376, 1394923, 1394470, 1394017, 1393565, 1393113,
1392661, 1392210, 1391759, 1391308, 1390857, 1390407,
1389957, 1389507, 1389058, 1388609, 1388160, 1387712,
1387263, 1386815, 1386368, 1385920, 1385473, 1385027,
1384580, 1384134, 1383688, 1383242, 1382797, 1382352,
1381907, 1381463, 1381018, 1380575, 1380131, 1379688,
1379245, 1378802, 1378359, 1377917, 1377475, 1377034,
1376592, 1376151, 1375710, 1375270, 1374830, 1374390,
1373950, 1373511, 1373071, 1372633, 1372194, 1371756,
1371318, 1370880, 1370443, 1370006, 1369569, 1369132,
1368696, 1368260, 1367824, 1367389, 1366953, 1366518,
1366084, 1365649, 1365215, 1364782, 1364348, 1363915,
1363482, 1363049, 1362617, 1362184, 1361753, 1361321,
1360890, 1360459, 1360028, 1359597, 1359167, 1358737,
1358307, 1357878, 1357449, 1357020, 1356591, 1356163,
1355735, 1355307, 1354879, 1354452, 1354025, 1353598,
1353172, 1352746, 1352320, 1351894, 1351469, 1351044,
1350619, 1350194, 1349770, 1349346, 1348922, 1348498,
1348075, 1347652, 1347229, 1346807, 1346385, 1345963,
1345541, 1345120, 1344699, 1344278, 1343857, 1343437,
1343017, 1342597, 1342177, 1341758, 1341339, 1340920,
1340502, 1340083, 1339665, 1339248, 1338830, 1338413,
1337996, 1337579, 1337163, 1336747, 1336331, 1335915,
1335500, 1335085, 1334670, 1334255, 1333841, 1333427,
1333013, 1332599, 1332186, 1331773, 1331360, 1330947,
1330535, 1330123, 1329711, 1329300, 1328888, 1328477,
1328067, 1327656, 1327246, 1326836, 1326426, 1326017,
1325607, 1325198, 1324789, 1324381, 1323973, 1323565,
1323157, 1322749, 1322342, 1321935, 1321528, 1321122,
1320716, 1320310, 1319904, 1319498, 1319093, 1318688,
1318283, 1317879, 1317475, 1317071, 1316667, 1316263,
1315860, 1315457, 1315054, 1314652, 1314250, 1313848,
1313446, 1313044, 1312643, 1312242, 1311841, 1311440,
1311040, 1310640, 1310240, 1309841, 1309441, 1309042,
1308643, 1308245, 1307846, 1307448, 1307050, 1306653,
1306255, 1305858, 1305461, 1305065, 1304668, 1304272,
1303876, 1303480, 1303085, 1302690, 1302295, 1301900,
1301505, 1301111, 1300717, 1300323, 1299930, 1299536,
1299143, 1298750, 1298358, 1297965, 1297573, 1297181,
1296790, 1296398, 1296007, 1295616, 1295225, 1294835,
1294445, 1294055, 1293665, 1293275, 1292886, 1292497,
1292108, 1291720, 1291331, 1290943, 1290555, 1290167,
1289780, 1289393, 1289006, 1288619, 1288233, 1287846,
1287460, 1287074, 1286689, 1286304, 1285918, 1285534,
1285149, 1284764, 1284380, 1283996, 1283613, 1283229,
1282846, 1282463, 1282080, 1281697, 1281315, 1280933,
1280551, 1280169, 1279788, 1279406, 1279025, 1278645,
1278264, 1277884, 1277504, 1277124, 1276744, 1276365,
1275986, 1275607, 1275228, 1274849, 1274471, 1274093,
1273715, 1273338, 1272960, 1272583, 1272206, 1271829,
1271453, 1271077, 1270700, 1270325, 1269949, 1269574,
1269198, 1268823, 1268449, 1268074, 1267700, 1267326,
1266952, 1266578, 1266205, 1265832, 1265459, 1265086,
1264714, 1264341, 1263969, 1263597, 1263226, 1262854,
1262483, 1262112, 1261741, 1261371, 1261000, 1260630,
1260260, 1259891, 1259521, 1259152, 1258783, 1258414,
1258046, 1257677, 1257309, 1256941, 1256573, 1256206,
1255838, 1255471, 1255104, 1254738, 1254371, 1254005,
1253639, 1253273, 1252908, 1252542, 1252177, 1251812,
1251447, 1251083, 1250719, 1250354, 1249991, 1249627,
1249263, 1248900, 1248537, 1248174, 1247812, 1247449,
1247087, 1246725, 1246363, 1246002, 1245640, 1245279,
1244918, 1244557, 1244197, 1243837, 1243476, 1243117,
1242757, 1242397, 1242038, 1241679, 1241320, 1240961,
1240603, 1240245, 1239887, 1239529, 1239171, 1238814,
1238457, 1238100, 1237743, 1237386, 1237030, 1236674,
1236318, 1235962, 1235606, 1235251, 1234896, 1234541,
1234186, 1233832, 1233477, 1233123, 1232769, 1232415,
1232062, 1231708, 1231355, 1231002, 1230650, 1230297,
1229945, 1229593, 1229241, 1228889, 1228538, 1228186,
1227835, 1227484, 1227134, 1226783, 1226433, 1226083,
1225733, 1225383, 1225034, 1224684, 1224335, 1223986,
1223637, 1223289, 1222941, 1222593, 1222245, 1221897,
1221549, 1221202, 1220855, 1220508, 1220161, 1219815,
1219468, 1219122, 1218776, 1218431, 1218085, 1217740,
1217394, 1217049, 1216705, 1216360, 1216016, 1215672,
1215328, 1214984, 1214640, 1214297, 1213954, 1213610,
1213268, 1212925, 1212583, 1212240, 1211898, 1211556,
1211215, 1210873, 1210532, 1210191, 1209850, 1209509,
1209169, 1208828, 1208488, 1208148, 1207809, 1207469,
1207130, 1206791, 1206452, 1206113, 1205774, 1205436,
1205098, 1204759, 1204422, 1204084, 1203747, 1203409,
1203072, 1202735, 1202399, 1202062, 1201726, 1201390,
1201054, 1200718, 1200382, 1200047, 1199712, 1199377,
1199042, 1198707, 1198373, 1198038, 1197704, 1197370,
1197037, 1196703, 1196370, 1196037, 1195704, 1195371,
1195038, 1194706, 1194374, 1194042, 1193710, 1193378,
1193047, 1192715, 1192384, 1192053, 1191722, 1191392,
1191061, 1190731, 1190401, 1190071, 1189742, 1189412,
1189083, 1188754, 1188425, 1188096, 1187768, 1187439,
1187111, 1186783, 1186455, 1186127, 1185800, 1185473,
1185146, 1184819, 1184492, 1184165, 1183839, 1183513,
1183187, 1182861, 1182535, 1182210, 1181884, 1181559,
1181234, 1180909, 1180585, 1180260, 1179936, 1179612,
1179288, 1178964, 1178641, 1178318, 1177994, 1177671,
1177349, 1177026, 1176703, 1176381, 1176059, 1175737,
1175415, 1175094, 1174772, 1174451, 1174130, 1173809,
1173488, 1173168, 1172847, 1172527, 1172207, 1171887,
1171568, 1171248, 1170929, 1170610, 1170291, 1169972,
1169653, 1169335, 1169017, 1168699, 1168381, 1168063,
1167745, 1167428, 1167111, 1166794, 1166477, 1166160,
1165844, 1165527, 1165211, 1164895, 1164579, 1164263,
1163948, 1163632, 1163317, 1163002, 1162687, 1162373,
1162058, 1161744, 1161430, 1161116, 1160802, 1160488,
1160175, 1159862, 1159548, 1159236, 1158923, 1158610,
1158298, 1157985, 1157673, 1157361, 1157049, 1156738,
1156426, 1156115, 1155804, 1155493, 1155182, 1154872,
1154561, 1154251, 1153941, 1153631, 1153321, 1153011,
1152702, 1152393, 1152084, 1151775, 1151466, 1151157,
1150849, 1150540, 1150232, 1149924, 1149617, 1149309,
1149001, 1148694, 1148387, 1148080, 1147773, 1147467,
1147160, 1146854, 1146548, 1146242, 1145936, 1145630,
1145325, 1145019, 1144714, 1144409, 1144104, 1143800,
1143495, 1143191, 1142887, 1142582, 1142279, 1141975,
1141671, 1141368, 1141065, 1140762, 1140459, 1140156,
1139853, 1139551, 1139249, 1138947, 1138645, 1138343,
1138041, 1137740, 1137438, 1137137, 1136836, 1136535,
1136235, 1135934, 1135634, 1135334, 1135034, 1134734,
1134434, 1134135, 1133835, 1133536, 1133237, 1132938,
1132639, 1132341, 1132042, 1131744, 1131446, 1131148,
1130850, 1130552, 1130255, 1129957, 1129660, 1129363,
1129066, 1128769, 1128473, 1128176, 1127880, 1127584,
1127288, 1126992, 1126697, 1126401, 1126106, 1125811,
1125516, 1125221, 1124926, 1124631, 1124337, 1124043,
1123749, 1123455, 1123161, 1122867, 1122574, 1122281,
1121987, 1121694, 1121401, 1121109, 1120816, 1120524,
1120231, 1119939, 1119647, 1119356, 1119064, 1118772,
1118481, 1118190, 1117899, 1117608, 1117317, 1117027,
1116736, 1116446, 1116156, 1115866, 1115576, 1115286,
1114997, 1114707, 1114418, 1114129, 1113840, 1113551,
1113263, 1112974, 1112686, 1112398, 1112110, 1111822,
1111534, 1111246, 1110959, 1110672, 1110385, 1110098,
1109811, 1109524, 1109237, 1108951, 1108665, 1108379,
1108093, 1107807, 1107521, 1107236, 1106950, 1106665,
1106380, 1106095, 1105810, 1105526, 1105241, 1104957,
1104673, 1104389, 1104105, 1103821, 1103537, 1103254,
1102971, 1102687, 1102404, 1102122, 1101839, 1101556,
1101274, 1100991, 1100709, 1100427, 1100145, 1099864,
1099582, 1099301, 1099019, 1098738, 1098457, 1098176,
1097896, 1097615, 1097335, 1097054, 1096774, 1096494,
1096214, 1095935, 1095655, 1095376, 1095096, 1094817,
1094538, 1094259, 1093981, 1093702, 1093424, 1093145,
1092867, 1092589, 1092311, 1092033, 1091756, 1091478,
1091201, 1090924, 1090647, 1090370, 1090093, 1089817,
1089540, 1089264, 1088988, 1088712, 1088436, 1088160,
1087884, 1087609, 1087334, 1087058, 1086783, 1086508,
1086234, 1085959, 1085684, 1085410, 1085136, 1084862,
1084588, 1084314, 1084040, 1083767, 1083493, 1083220,
1082947, 1082674, 1082401, 1082128, 1081856, 1081583,
1081311, 1081039, 1080767, 1080495, 1080223, 1079952,
1079680, 1079409, 1079138, 1078867, 1078596, 1078325,
1078054, 1077784, 1077513, 1077243, 1076973, 1076703,
1076433, 1076163, 1075894, 1075624, 1075355, 1075086,
1074817, 1074548, 1074279, 1074010, 1073742, 1073474,
1073205, 1072937, 1072669, 1072401, 1072134, 1071866,
1071599, 1071331, 1071064, 1070797, 1070530, 1070264,
1069997, 1069730, 1069464, 1069198, 1068932, 1068666,
1068400, 1068134, 1067869, 1067603, 1067338, 1067073,
1066808, 1066543, 1066278, 1066013, 1065749, 1065484,
1065220, 1064956, 1064692, 1064428, 1064164, 1063901,
1063637, 1063374, 1063111, 1062848, 1062585, 1062322,
1062059, 1061797, 1061534, 1061272, 1061010, 1060748,
1060486, 1060224, 1059962, 1059701, 1059439, 1059178,
1058917, 1058656, 1058395, 1058134, 1057874, 1057613,
1057353, 1057093, 1056833, 1056573, 1056313, 1056053,
1055793, 1055534, 1055275, 1055015, 1054756, 1054497,
1054238, 1053980, 1053721, 1053463, 1053204, 1052946,
1052688, 1052430, 1052172, 1051915, 1051657, 1051400,
1051142, 1050885, 1050628, 1050371, 1050114, 1049858,
1049601, 1049345, 1049088, 1048832, 1048576
};
// Divide num by div and return as 16.16 fixed point result.
int FixedDiv_C(int num, int div) {
if (static_cast<unsigned int>(div) <= 4097u) {
return static_cast<int>((static_cast<int64>(num) * kRecipTable[div]) >> 16);
}
return static_cast<int>((static_cast<int64>(num) << 16) / div);
}
#ifdef LIBYUV_LITTLE_ENDIAN
#define WRITEWORD(p, v) *reinterpret_cast<uint32*>(p) = v
#else
......
......@@ -6602,6 +6602,30 @@ void I422ToUYVYRow_SSE2(const uint8* src_y,
ret
}
}
// Fixed point 0.32 reciprocal table.
extern const uint32 kRecipTable[4097];
// Divide num by div and return as 16.16 fixed point result.
__declspec(naked) __declspec(align(16))
int FixedDiv(int num, int div) {
__asm {
mov eax, [esp + 4] // num
mov ecx, [esp + 8] // div
cmp ecx, 4096
ja largediv
mul dword ptr kRecipTable[ecx * 4]
shrd eax, edx, 16
ret
largediv:
cwd // extend num to 64 bits
shld edx, eax, 16
shl eax, 16
idiv ecx
ret
}
}
#endif // !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && defined(_MSC_VER)
#ifdef __cplusplus
......
......@@ -12,16 +12,12 @@
#include <string.h>
#include "libyuv/basic_types.h"
#include "libyuv/cpu_id.h"
#include "libyuv/row.h"
#include "../unit_test/unit_test.h"
namespace libyuv {
// Divide num by div and return value as 16.16 fixed point.
static int FixedDiv_C(int num, int div) {
return static_cast<int>((static_cast<int64>(num) << 16) / div);
}
TEST_F(libyuvTest, TestFixedDiv) {
int num[256];
int div[256];
......@@ -43,7 +39,7 @@ TEST_F(libyuvTest, TestFixedDiv) {
}
for (int j = 0; j < 256; ++j) {
result_c[j] = libyuv::FixedDiv_C(num[j], div[j]);
EXPECT_NEAR(result_c[j], result_opt[j], 3);
EXPECT_NEAR(result_c[j], result_opt[j], 1);
}
}
......@@ -64,8 +60,7 @@ TEST_F(libyuvTest, TestFixedDiv_Opt) {
EXPECT_EQ(0x20000, libyuv::FixedDiv(960 * 2, 960));
EXPECT_EQ(0x08000, libyuv::FixedDiv(640 / 2, 640));
EXPECT_EQ(0x04000, libyuv::FixedDiv(640 / 4, 640));
// TODO(fbarchard): Improve accuracy for divides should be exact.
EXPECT_NEAR(0x20000, libyuv::FixedDiv(1080 * 2, 1080), 1);
EXPECT_EQ(0x20000, libyuv::FixedDiv(1080 * 2, 1080));
srandom(time(NULL));
MemRandomize(reinterpret_cast<uint8*>(&num[0]), sizeof(num));
......@@ -77,14 +72,22 @@ TEST_F(libyuvTest, TestFixedDiv_Opt) {
div[j] = 1280;
}
}
int has_x86 = TestCpuFlag(kCpuHasX86);
for (int i = 0; i < benchmark_pixels_div256_; ++i) {
for (int j = 0; j < 256; ++j) {
result_opt[j] = libyuv::FixedDiv(num[j], div[j]);
if (has_x86) {
for (int j = 0; j < 256; ++j) {
result_opt[j] = libyuv::FixedDiv(num[j], div[j]);
}
} else {
for (int j = 0; j < 256; ++j) {
result_opt[j] = libyuv::FixedDiv_C(num[j], div[j]);
}
}
}
for (int j = 0; j < 256; ++j) {
result_c[j] = libyuv::FixedDiv_C(num[j], div[j]);
EXPECT_NEAR(result_c[j], result_opt[j], 3);
EXPECT_NEAR(result_c[j], result_opt[j], 1);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment