Skip to content

Instantly share code, notes, and snippets.

@gszauer
Created September 3, 2023 20:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gszauer/242eb615f2dfa32d33f07d6c5052bdee to your computer and use it in GitHub Desktop.
Save gszauer/242eb615f2dfa32d33f07d6c5052bdee to your computer and use it in GitHub Desktop.
trigapproximations.cpp
// Trig approximations from: http://www.ganssle.com/approx.htm
#include <windows.h>
#include <cmath>
#include <iostream>
#include <iomanip>
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
#define WINDOW_CLASS "GDI_Sample"
#define WINDOW_TITLE "Double Buffered GDI Sample"
#if 1
const int num_floats = 10000;
const float rando_floats[] = {
6.9084, 2.3504, 5.9393, 2.1995, 6.9788, 4.5800, 1.2876, 3.7013, 1.9697, 2.7241, 7.9970, 2.3300, 7.4100, 7.6173, 6.6112, 1.2391, 7.8210, 4.4060, 6.1480, 5.6367, 0.3375, 2.7864, 2.0000, 2.5421, 6.4652, 7.3482, 7.5172, 3.7798, 4.2308, 1.9803, 6.1153, 2.9707, 0.0472, 4.5240, 1.6795, 1.7698, 2.8173, 6.6781, 5.5801, 5.2696, 4.0168, 2.6126, 4.8747, 3.3826, 3.3805, 5.5582, 3.1856, 5.5784, 6.7845, 4.6369, 0.0974, 4.6771, 6.1472, 6.7081, 3.5568, 3.2700, 1.7868, 5.8658, 0.9733, 5.2559, 7.4211, 3.1177, 1.8397, 3.7930, 4.0191, 5.8022, 7.5109, 7.8512, 2.5062, 2.7670, 6.0232, 0.1724, 0.7736, 1.5016, 3.9123, 4.8226, 2.9712, 5.8571, 6.2498, 7.8077, 2.7280, 3.5722, 6.7691, 2.6042, 5.4155, 4.1252, 0.7980, 1.8713, 0.6663, 0.1796, 4.0968, 1.1130, 4.0558, 6.4572, 0.5161, 5.8781, 4.9736, 2.7062, 0.0663, 2.3662, 5.3852, 6.0000, 6.7477, 3.3608, 7.9006, 7.9385, 6.7156, 3.3028, 6.0332, 7.1317, 6.4910, 5.1567, 7.1540, 0.3170, 5.9579, 1.2700, 4.7792, 3.9701, 3.9484, 4.9030, 1.6672, 6.4814, 2.1437, 2.8824, 3.6666, 0.1099, 3.4336, 0.6839, 6.2936, 5.2740, 2.9189, 3.6685, 2.3864, 0.5644, 4.5368, 5.7800, 5.0096, 7.9859, 3.7357, 4.8956, 7.6202, 1.0903, 3.8846, 0.2869, 2.7718, 2.6730, 7.5658, 1.4093, 0.6238, 4.9548, 5.8408, 3.6572, 2.0209, 6.9424, 2.8576, 5.8263, 2.6573, 6.1259, 7.6424, 1.3909, 7.9008, 1.3421, 0.3613, 4.5996, 0.6480, 0.3192, 4.2864, 2.5159, 7.3168, 2.4910, 0.3599, 4.3626, 1.9689, 5.3904, 5.3859, 1.3032, 2.7957, 4.5157, 4.0436, 0.2658, 5.8818, 0.6516, 2.5576, 7.0912, 5.4708, 5.3082, 6.9799, 6.1880, 2.8000, 6.7294, 0.1005, 4.2100, 1.4102, 0.7881, 4.5280, 2.0744, 4.8993, 3.1822, 1.5646, 1.4406, 0.5660, 3.4572, 3.1336, 6.9154, 2.1643, 7.0176, 6.9640, 2.3492, 5.1240, 0.4699, 4.8285, 7.4047, 1.6012, 7.6404, 7.1432, 7.0300, 4.1464, 5.9459, 2.6955, 1.8738, 6.8444, 7.5487, 4.4960, 4.8697, 1.0032, 3.5624, 1.4587, 5.4314, 3.2115, 5.9787, 1.1923, 6.9602, 0.8226, 7.5288, 6.0303, 6.0276, 2.6214, 2.2432, 4.2800, 0.8287, 3.0364, 5.2872, 4.0118, 3.5202, 4.6080, 0.8404, 6.9952, 0.1756, 3.8337, 6.6387, 0.7860, 7.0632, 6.4522, 3.9792, 3.0393, 3.5510, 5.4460, 0.4154, 5.6676, 0.0876, 1.1853, 5.3723, 3.0764, 5.1228, 2.9087, 5.7966, 6.6157, 6.2671, 3.4255, 3.1701, 1.0846, 4.0804, 6.8460, 7.5992, 1.4338, 6.6349, 0.2019, 5.3499, 5.5132, 5.7672, 4.8868, 6.4586, 5.4582, 0.2452, 2.8516, 1.4202, 3.8380, 2.1376, 3.3741, 1.5763, 5.0530, 5.4554, 4.4543, 2.4195, 0.5250, 3.8868, 5.7545, 2.3565, 2.3665, 3.3252, 3.6468, 6.1778, 4.5187, 6.4279, 2.4445, 2.4811, 2.7029, 3.8953, 3.8504, 5.8432, 2.8327, 7.9493, 5.4044, 0.7016, 7.8289, 2.2453, 5.0201, 2.1568, 6.2203, 4.6280, 5.0117, 6.1196, 1.8308, 2.8756, 6.5035, 4.5096, 0.0968, 2.8974, 3.4845, 1.6640, 4.3239, 3.1774, 0.2272, 0.6837, 1.7579, 7.4527, 1.5621, 5.3519, 6.7796, 1.2269, 1.0723, 2.6572, 2.0776, 4.0596, 1.3232, 5.8615, 5.7372, 6.0761, 2.5930, 7.9360, 3.6361, 1.0130, 0.1084, 5.2825, 7.4289, 3.6800, 0.6135, 7.2821, 5.5604, 6.9334, 6.6464, 1.9784, 2.5324, 1.4004, 4.2479, 4.0002, 7.8367, 0.3812, 1.7926, 2.1284, 4.2556, 2.9091, 4.4428, 1.4005, 3.7640, 2.4541, 2.9934, 6.5049, 4.0605, 1.1920, 2.0153, 6.6861, 7.6456, 3.2406, 7.9372, 1.4405, 6.0259, 5.5092, 1.2033, 7.4240, 6.0920, 5.5829, 5.3668, 3.7608, 5.8665, 5.7191, 4.8791, 0.4224, 0.0424, 4.8499, 3.3728, 3.6364, 0.7954, 4.2334, 3.3851, 7.2456, 4.9787, 3.8035, 2.9326, 0.5616, 7.4564, 7.6565, 1.0776, 2.5736, 0.7036, 5.3272, 1.6532, 1.9889, 2.2111, 3.1240, 3.9384, 4.4145, 1.6754, 6.0161, 5.5692, 1.2398, 7.3015, 1.4595, 7.2931, 4.4245, 1.5604, 5.6226, 4.9672, 4.0494, 0.9008, 7.6817, 1.5705, 0.2357, 5.2941, 4.0224, 2.9376, 3.9533, 4.2603, 5.0578, 4.5048, 6.3822, 0.0160, 3.9049, 6.0782, 1.9427, 7.5437, 5.9302, 4.3033, 2.4970, 2.1124, 2.5280, 3.6237, 0.8052, 5.0748, 3.8349, 7.1546, 6.7792, 2.0377, 3.4805, 6.3911, 7.2185, 6.6497, 2.0272, 0.7786, 4.2602, 6.1494, 6.7072, 7.6984, 2.5869, 1.2116, 3.8957, 6.2549, 5.5687, 3.8530, 2.2429, 0.6960, 2.4225, 3.7944, 2.5542, 1.2816, 0.9071, 5.8552, 4.2337, 5.9669, 5.7718, 6.8684, 3.9196, 0.2918, 1.5005, 0.2273, 3.4040, 7.2410, 5.8140, 4.6949, 0.9121, 4.9735, 6.7266, 4.3410, 0.0433, 0.9068, 0.5588, 2.1484, 3.0909, 3.3224, 5.2196, 2.5677, 5.9411, 6.9876, 4.5656, 0.7910, 5.2672, 3.2989, 3.2829, 5.9777, 1.6117, 1.9447, 2.0389, 2.5644, 2.5329, 3.7555, 0.9654, 3.7528, 1.8475, 2.5178, 2.2598, 0.3136, 4.2136, 5.7356, 3.6390, 2.6310, 6.0544, 1.7326, 5.9521, 4.6783, 2.7676, 7.4298, 1.2780, 3.6000, 2.1162, 2.3473, 2.5261, 5.0563, 0.7340, 2.0088, 4.7571, 2.2182, 5.8806, 2.4408, 4.7242, 1.8988, 7.3134, 0.8473, 4.0477, 2.4208, 4.4778, 7.6529, 6.8486, 4.4848, 3.6134, 2.7042, 5.4713, 2.5632, 0.1579, 2.7286, 2.7487, 3.1368, 4.2754, 3.2141, 7.1377, 3.4728, 7.9376, 3.9520, 7.9060, 4.5305, 2.0141, 4.1248, 0.5096, 7.3273, 3.1528, 6.5360, 7.4264, 7.9586, 2.4440, 1.0268, 7.4501, 6.5085, 2.4566, 7.6633, 3.5725, 2.4488, 7.0418, 5.7929, 6.2378, 3.8862, 1.9089, 6.1759, 2.4712, 6.3763, 7.3368, 7.0958, 7.0874, 1.6122, 5.3936, 1.2778, 4.7960, 6.5130, 6.0245, 7.6673, 5.4848, 4.7676, 7.9749, 1.3024, 7.4741, 3.3870, 5.0617, 0.8494, 7.3640, 5.2059, 4.7387, 3.7948, 5.3240, 0.7865, 0.0145, 3.6281, 7.8125, 0.6139, 2.4323, 6.9200, 6.3290, 2.6729, 0.2566, 3.2037, 0.6576, 4.1986, 6.1204, 7.9690, 5.3632, 0.4708, 0.3581, 3.1380, 5.5049, 6.5256, 7.4260, 1.6372, 3.8707, 2.1246, 0.5197, 3.1905, 4.6415, 5.7936, 2.4888, 4.8348, 0.7171, 4.0711, 4.7035, 6.6752, 5.3088, 7.1875, 0.5373, 7.4780, 3.7230, 6.4387, 0.5676, 7.9262, 7.7706, 5.2400, 7.5844, 7.1364, 5.4951, 4.2756, 0.6303, 4.8820, 0.8360, 6.1582, 4.4828, 2.7327, 1.0767, 2.5857, 6.6065, 5.9269, 0.7656, 1.3166, 1.3798, 7.8177, 4.9008, 2.8802, 0.8336, 2.9000, 3.2052, 1.1055, 2.2614, 6.7842, 0.1697, 5.0048, 2.2100, 2.4616, 2.1796, 0.0526, 6.5840, 4.3395, 2.3500, 7.6695, 6.3067, 2.5539, 2.3982, 4.3363, 0.2127, 3.1204, 6.9211, 3.4080, 2.7198, 5.7051, 3.7856, 0.2555, 5.3116, 7.3469, 1.0321, 3.6129, 7.0187, 3.3012, 2.4277, 7.7366, 3.5593, 0.5592, 4.7463, 5.4871, 1.2811, 1.9072, 0.8284, 7.6339, 5.5649, 0.5890, 7.4039, 3.4202, 7.9349, 3.8083, 3.6248, 7.3131, 4.1484, 5.3214, 2.6802, 4.6297, 2.7936, 5.3988, 6.7708, 2.2494, 6.2114, 3.4828, 5.7085, 3.8900, 6.7624, 6.0684, 4.2090, 4.9419, 2.1929, 3.3233, 0.1242, 5.2360, 1.5728, 2.7688, 7.9892, 6.1548, 6.6778, 2.1468, 0.2695, 7.6664, 5.9232, 6.0291, 0.9595, 2.3097, 2.2584, 6.7190, 1.8930, 4.0331, 4.2566, 0.1282, 6.4232, 5.7772, 1.2547, 1.4663, 7.2552, 3.0988, 0.5364, 4.3420, 4.9725, 0.5227, 2.3160, 7.1593, 2.2104, 0.1538, 3.3136, 0.0879, 0.2268, 4.2217, 6.5187, 6.1510, 5.4715, 1.4739, 0.5235, 4.6210, 7.0038, 4.8701, 3.9902, 1.5534, 5.9494, 2.7750, 7.2218, 6.5275, 7.4020, 6.5165, 2.3648, 2.3400, 5.2632, 1.9063, 2.3749, 2.8801, 2.8251, 0.8746, 3.7982, 2.6891, 5.5711, 0.7525, 7.7588, 6.5339, 5.9344, 1.5248, 2.5976, 2.7150, 6.0124, 7.4841, 7.9635, 4.7531, 3.9036, 4.2821, 3.1920, 6.5449, 3.4940, 0.8757, 6.8546, 4.2495, 3.8029, 3.4406, 1.5625, 6.4137, 3.8046, 6.8628, 0.1776, 1.9396, 0.6532, 1.5135, 5.3135, 3.8652, 2.1236, 6.7060, 1.8559, 0.6578, 0.0288, 2.9500, 5.8886, 7.4580, 2.0190, 2.4482, 5.0170, 7.1498, 3.5582, 7.6468, 6.6579, 3.4345, 4.7807, 7.1816, 4.6681, 7.3450, 1.2560, 0.4264, 0.0988, 5.1477, 7.7408, 1.8656, 6.2184, 2.9601, 2.3192, 7.1924, 7.3805, 6.6338, 1.1155, 5.9406, 1.0839, 6.8488, 7.8440, 4.9525, 1.8653, 3.4800, 6.0628, 0.8503, 4.8132, 6.0675, 5.6032, 3.6124, 3.9378, 3.4613, 4.4206, 5.2020, 6.5051, 3.9746, 7.0738, 7.7039, 0.9475, 5.2024, 0.4460, 4.0230, 1.0498, 6.8790, 5.0954, 4.3688, 0.0579, 1.5060, 7.5666, 4.5581, 1.0632, 4.7764, 6.7044, 1.4392, 4.3548, 3.3248, 7.2307, 1.4125, 6.0656, 2.6928, 6.1314, 3.8828, 7.1228, 2.7944, 0.8643, 7.5105, 2.6291, 7.7028, 7.7900, 6.9062, 7.1068, 1.2096, 5.9925, 5.5771, 7.4319, 6.8058, 5.4069, 7.5201, 4.3338, 2.1575, 7.5843, 1.2349, 6.5488, 7.0432, 3.8830, 4.9863, 1.7722, 6.5116, 0.9726, 6.2924, 5.8801, 1.4267, 4.9243, 7.7263, 3.7668, 1.8711, 1.0099, 3.5256, 4.2713, 5.7590, 7.3030, 2.5636, 3.2022, 3.5140, 2.2378, 2.9125, 7.2977, 7.7995, 4.5452, 3.7109, 0.1353, 2.9218, 4.6255, 5.1640, 7.2028, 5.4680, 6.9258, 0.9144, 4.5075, 4.8073, 0.6566, 4.5084, 1.7126, 7.1717, 6.1732, 1.9380, 0.7073, 4.5638, 6.2000, 3.8410, 0.2443, 6.7154, 2.9200, 7.6831, 5.5980, 6.2822, 3.3203, 3.1051, 5.2432, 7.0362, 6.2711, 7.0526, 7.1975, 3.8572, 1.5468, 3.9781, 6.6240, 3.3217, 4.0948, 0.9286, 7.0991, 3.0108, 7.2689, 3.8587, 5.5623, 0.2027, 3.6368, 0.0010, 1.5764, 7.5836, 7.8608, 7.5849, 3.0207, 7.8802, 7.7114, 5.5389, 0.1184, 4.5518, 2.1239, 1.0543, 5.1985, 0.2674, 7.3331, 7.7043, 5.0352, 7.3058, 5.3836, 4.0054, 6.8913, 7.2248, 3.6997, 6.8976, 6.7995, 4.1713, 6.9872, 6.3782, 3.2728, 6.2877, 6.6532, 7.5848, 6.6651, 2.7143, 7.4311, 5.7382, 4.7733, 2.3591, 7.7889, 5.5198, 6.4484, 2.9765, 0.9576, 4.0088, 0.8117, 3.1960, 7.0248, 1.7414, 1.2355, 0.7471, 7.3841, 7.9584, 5.7200, 7.4815, 3.5565, 7.0080, 3.2398, 5.8232, 0.2831, 1.3388, 5.9008, 4.0912, 4.4140, 3.5812, 6.2451, 3.2612, 1.5917, 5.2047, 7.4908, 7.4442, 2.8806, 0.1755, 3.7591, 0.7599, 1.6556, 7.6088, 4.1696, 2.1202, 4.6328, 6.6044, 3.3940, 2.5435, 3.9866, 3.7252, 0.5342, 7.0544, 3.5472, 6.3619, 4.1232, 2.2255, 3.0552, 7.2593, 0.1524, 2.4115, 4.1663, 1.7693, 1.8469, 2.6506, 6.4632, 2.5339, 0.3842, 6.4324, 2.6829, 6.4840, 0.3276, 1.6189, 3.6853, 0.3723, 6.6436, 0.9761, 4.5121, 3.4625, 3.7312, 0.9524, 7.5328, 3.3208, 6.4496, 0.5576, 3.6430, 3.2962, 6.0647, 0.0636, 3.0145, 0.7641, 3.7508, 6.1062, 5.8854, 2.9300, 3.1474, 2.0487, 1.2496, 6.5371, 5.6622, 1.4151, 3.7755, 1.6951, 3.5764, 4.9542, 2.6969, 7.1912, 7.8203, 4.9232, 4.6200, 4.5892, 1.2128, 3.6821, 1.1574, 4.4619, 1.7278, 2.7539, 7.9956, 1.3067, 3.8135, 1.9099, 0.0523, 0.1696, 1.4981, 3.8686, 0.9680, 4.8313, 4.6916, 0.2617, 4.9999, 6.7270, 0.9291, 0.1190, 3.6454, 4.3806, 4.0452, 0.7444, 4.3136, 6.6594, 6.9706, 6.6868, 7.4025, 4.4097, 4.8531, 4.6524, 3.9393, 3.6397, 7.4877, 3.0394, 5.8194, 6.2051, 7.6235, 2.4220, 6.2710, 7.7192, 7.9259, 5.8960, 5.3438, 3.5736, 2.3736, 3.7104, 4.3736, 2.0457, 7.3725, 4.7461, 2.1755, 0.8789, 3.2911, 0.4676, 3.3015, 6.8944, 3.7300, 4.9800, 5.4142, 7.4139, 2.4429, 0.3317, 6.5580, 1.9414, 2.6403, 4.3637, 6.7428, 6.2721, 0.3794, 1.2533, 5.6627, 6.4110, 6.7113, 1.0856, 2.0018, 0.2991, 4.6396, 4.9570, 6.8228, 7.9510, 3.5832, 4.7687, 0.5380, 4.4252, 5.3900, 6.4062, 7.7868, 0.6674, 0.0309, 6.6380, 2.1952, 5.6948, 1.5398, 4.8854, 6.0330, 5.6440, 1.5772, 3.5856, 3.8557, 7.5692, 0.5413, 7.3397, 5.6695, 7.2016, 0.6088, 3.7986, 6.5897, 4.0366, 4.9704, 1.9805, 6.3577, 2.0309, 5.3308, 0.0550, 0.6742, 1.5402, 2.2699, 2.4627, 3.5933, 2.0408, 0.0239, 0.0971, 0.6956, 1.5884, 1.4084, 1.4374, 0.4663, 5.0872, 4.5344, 7.6418, 7.1740, 7.4505, 6.5688, 2.5196, 7.4500, 7.5772, 4.9806, 4.1442, 7.3340, 2.9986, 3.7759, 7.6722, 3.9766, 7.3816, 4.0449, 2.3140, 3.5400, 4.7256, 3.1192, 7.3570, 5.3960, 5.3658, 1.6708, 1.3634, 7.7704, 0.5747, 6.2734, 4.6136, 0.4078, 3.5092, 1.2492, 7.1318, 5.0564, 4.1827, 6.6042, 4.9092, 2.4698, 1.1892, 3.6349, 7.7770, 5.2891, 3.5994, 0.1942, 2.5149, 0.1904, 1.0206, 5.0804, 0.4862, 1.5296, 0.8881, 1.1175, 0.7388, 6.5236, 5.8606, 5.8910, 7.2787, 1.3738, 7.7421, 1.1236, 5.6742, 4.3992, 2.3419, 2.0541, 6.9160, 1.5529, 6.4935, 6.0292, 7.2795, 6.6336, 2.1432, 0.2792, 1.1530, 4.1287, 1.2838, 0.2018, 5.4884, 4.5500, 0.2200, 7.1448, 1.5872, 2.3367, 0.2500, 1.8526, 6.0889, 1.1487, 1.8413, 6.3315, 4.6130, 2.2189, 0.5001, 2.5153, 7.6037, 2.0524, 2.4736, 7.8806, 0.5118, 1.4690, 3.4762, 5.3060, 7.3329, 7.7092, 1.7251, 4.0470, 1.5903, 1.4062, 0.6783, 2.3644, 5.7233, 3.7629, 0.8803, 1.4248, 3.2237, 0.7943, 3.6350, 6.6856, 7.8513, 1.2554, 5.5772, 0.9031, 5.6873, 2.4742, 5.2017, 5.2772, 3.6756, 7.6253, 3.4658, 2.3668, 4.2135, 3.0880, 0.5980, 7.2848, 5.6077, 1.8349, 3.7863, 3.4616, 0.9496, 2.7727, 6.3663, 7.1933, 2.7008, 0.9964, 7.0492, 6.7498, 5.2116, 2.0480, 0.8077, 7.3828, 7.9022, 0.2206, 3.4536, 0.4984, 1.6113, 7.7449, 3.9086, 3.7890, 1.6253, 3.9405, 5.0533, 5.3292, 5.2280, 0.4701, 0.7611, 7.5886, 0.3206, 3.2711, 5.7794, 4.0821, 1.9102, 3.2460, 4.1305, 3.5538, 1.9236, 6.7594, 6.8661, 5.8683, 5.1100, 3.2893, 3.9143, 3.4015, 1.7003, 0.7146, 7.4422, 7.4611, 2.3118, 2.2240, 4.3538, 4.7084, 5.5891, 5.7842, 2.5376, 7.0398, 4.6960, 7.0309, 6.8012, 0.5091, 3.4600, 5.7254, 4.6909, 7.7493, 4.4935, 5.5033, 6.1252, 7.6348, 7.6292, 1.4364, 3.6488, 1.7601, 4.2507, 4.5921, 5.5303, 2.3324, 0.3411, 2.2309, 3.0314, 1.6045, 6.5380, 5.5061, 6.7666, 3.2904, 4.8659, 2.2880, 1.6478, 4.4290, 6.4984, 2.8036, 4.1238, 7.7414, 7.5972, 3.2787, 0.7964, 7.2853, 3.6554, 2.2668, 2.8237, 2.1084, 6.9000, 7.5809, 2.4132, 5.3306, 1.6059, 0.0998, 6.0500, 2.2782, 0.6493, 6.6038, 6.7185, 6.7422, 0.3644, 6.7541, 5.4525, 0.8172, 2.5661, 3.4534, 2.3724, 6.9461, 3.6209, 3.5528, 4.0793, 4.0872, 7.7210, 5.8245, 3.8916, 4.2765, 2.1661, 4.5979, 7.7511, 5.1687, 2.6048, 7.4348, 1.7528, 4.0243, 4.6832, 1.8978, 4.6435, 1.7046, 0.6400, 5.9460, 6.7400, 1.5716, 4.8103, 7.9764, 0.8659, 4.5217, 3.4782, 7.6320, 4.8368, 5.7285, 3.0728, 1.4386, 3.7992, 0.1528, 1.3950, 5.7168, 7.3019, 1.4910, 5.5382, 6.3919, 0.2650, 2.3214, 3.5398, 2.9827, 5.9213, 4.0071, 2.3088, 2.5628, 7.1247, 0.6448, 7.0144, 5.0729, 0.0933, 5.3833, 5.2721, 1.4156, 5.7571, 1.5470, 2.4237, 0.0048, 6.9536, 5.4936, 5.7436, 2.6628, 0.4558, 3.6072, 2.0880, 0.1679, 1.9029, 3.0034, 0.4438, 7.3468, 6.5351, 7.0660, 7.7664, 4.5323, 6.3988, 2.1552, 2.1069, 7.2644, 2.5626, 0.6053, 3.2249, 4.2596, 0.8127, 7.8896, 7.1762, 5.4012, 5.9244, 1.0709, 1.4388, 0.0540, 4.6004, 4.4704, 1.8290, 4.3931, 1.5168, 7.8178, 3.4696, 0.8277, 2.6044, 1.1135, 0.2082, 4.2286, 1.0809, 5.3155, 6.1568, 7.8739, 7.3472, 6.2938, 3.8060, 2.5346, 7.1715, 7.3998, 0.4965, 4.9814, 6.6144, 5.2049, 7.6952, 5.9050, 4.2975, 1.1832, 6.3545, 4.8793, 7.9697, 4.6911, 0.4311, 4.9605, 1.4457, 7.5702, 7.6721, 4.2636, 5.2516, 4.1538, 2.4999, 2.2616, 3.6576, 2.8936, 1.4868, 2.8356, 0.7688, 7.8757, 2.4577, 0.9168, 2.6710, 0.4876, 5.4400, 1.1508, 5.6692, 4.2259, 7.2253, 3.7885, 1.2907, 3.8864, 4.7151, 2.8350, 6.6723, 0.4835, 6.8007, 2.0373, 0.2448, 5.4537, 2.2992, 5.5949, 3.1501, 0.2445, 2.4048, 2.9186, 6.8220, 0.6885, 6.2245, 4.6176, 1.8362, 4.2855, 3.6914, 1.3504, 6.4999, 1.3749, 6.8164, 3.3833, 6.4753, 2.1982, 1.6301, 2.1242, 3.1990, 1.0836, 1.5300, 1.2903, 0.6926, 2.2919, 3.0081, 6.8806, 7.8442, 0.3784, 1.6695, 0.9419, 4.2024, 1.0633, 6.9556, 1.9042, 6.6293, 2.7980, 2.2252, 7.3420, 3.5499, 3.6744, 4.3697, 4.9971, 4.4710, 5.9482, 2.4283, 2.0430, 5.6234, 3.3432, 5.8332, 0.5000, 6.9533, 3.2527, 5.4126, 6.4470, 2.0851, 7.0930, 1.6098, 2.6588, 6.5322, 2.0855, 4.5529, 6.9756, 6.4118, 4.5053, 2.7714, 2.6030, 6.3252, 7.7623, 3.4003, 6.2956, 3.8676, 5.2194, 4.3870, 2.8963, 1.0995, 3.1880, 1.7707, 4.2167, 2.0456, 2.7871, 4.2256, 3.8445, 4.2437, 7.1621, 1.8321, 6.0984, 3.3827, 4.5675, 3.7112, 0.0441, 7.9650, 0.5971, 4.8640, 3.0589, 6.0445, 7.7459, 7.1529, 3.2585, 2.6003, 2.4940, 5.0456, 5.5333, 1.3900, 5.3773, 3.1128, 7.9768, 2.2316, 0.1143, 6.7634, 0.9328, 3.2924, 7.9968, 4.0520, 4.2058, 4.5617, 2.1331, 1.7905, 7.2943, 1.6104, 2.3956, 2.2052, 2.4986, 4.6503, 2.1482, 2.0725, 1.4499, 4.8961, 4.6647, 2.7624, 3.8446, 4.8399, 6.8484, 3.7556, 2.8441, 7.8874, 6.6992, 3.0116, 4.9474, 5.2757, 0.4307, 0.5736, 0.4827, 3.7063, 2.5601, 3.5668, 3.8570, 6.9497, 7.5218, 4.9955, 3.0862, 2.0277, 6.1288, 3.5044, 1.9230, 2.3369, 1.2449, 6.0052, 2.2727, 1.4976, 6.0980, 2.7312, 3.1558, 4.3120, 2.9107, 3.2984, 2.8675, 2.8797, 5.7429, 4.0116, 4.4262, 2.7018, 1.3373, 5.4040, 3.6126, 3.7592, 2.5790, 0.2997, 4.7683, 6.6239, 5.1108, 5.5094, 0.4762, 6.1184, 2.2462, 6.2093, 6.8753, 5.4320, 7.9912, 7.1408, 2.6350, 6.8101, 3.5663, 7.8612, 1.0514, 3.4730, 4.7806, 2.5136, 6.8249, 0.0772, 1.2766, 4.7682, 4.8698, 0.4832, 3.7370, 5.8709, 1.2503, 5.3325, 2.8274, 4.1988, 0.2411, 0.6616, 1.4906, 3.5374, 5.8720, 3.8921, 0.4046, 7.1761, 4.8060, 7.9176, 0.0691, 2.8867, 3.9948, 6.9908, 0.6817, 5.0219, 5.2468, 4.9067, 7.7142, 0.7850, 2.2907, 5.6964, 6.3068, 7.1648, 2.7025, 3.3928, 2.4984, 2.9735, 2.3907, 1.7427, 4.2313, 4.9084, 7.2068, 3.3722, 7.3289, 3.7530, 5.5230, 7.8283, 3.3636, 4.9261, 7.0909, 7.5470, 3.2478, 0.7206, 5.0288, 2.4991, 0.5621, 1.1330, 0.4182, 2.8983, 7.9891, 3.5484, 0.7571, 2.3134, 2.4288, 2.0471, 1.9930, 4.8100, 7.6550, 2.5647, 7.2477, 6.8788, 4.1299, 6.1657, 6.4859, 2.2582, 0.3027, 4.7850, 1.8572, 1.4376, 5.2245, 4.5445, 2.1496, 7.8308, 6.1278, 3.7775, 1.9481, 3.9306, 2.2308, 2.7086, 7.7583, 4.4384, 7.3976, 2.7793, 7.7136, 3.6540, 3.3835, 2.2832, 0.7221, 6.3433, 2.7725, 7.4837, 0.3929, 4.2185, 4.7067, 6.5941, 0.7061, 3.4988, 5.0548, 4.9156, 1.9344, 2.9396, 1.8720, 6.6728, 7.2279, 0.0987, 6.1652, 6.8856, 1.4088, 7.3749, 5.4120, 2.0560, 4.7279, 1.7664, 6.1841, 0.7903, 1.9173, 1.2782, 2.8407, 0.4768, 4.3432, 4.7600, 0.1553, 2.9212, 6.2844, 7.0839, 4.5968, 5.0217, 4.4351, 2.6480, 6.9119, 0.3328, 0.0924, 0.7570, 6.3645, 5.2976, 6.6356, 1.5800, 6.0280, 4.6825, 5.5590, 7.2961, 7.0409, 5.9235, 2.4937, 6.2883, 3.8843, 2.5204, 3.3288, 0.6513, 3.3610, 1.3256, 7.5149, 5.3314, 4.7840, 3.2976, 5.0020, 7.0560, 0.2358, 3.6964, 6.0623, 7.2075, 6.6272, 1.3526, 5.3732, 0.8935, 5.2638, 3.6466, 5.6480, 2.7636, 0.6774, 4.1930, 4.8916, 5.9944, 1.0884, 4.4536, 5.6370, 3.4120, 5.5576, 2.3953, 4.0297, 7.8270, 2.2706, 7.3581, 7.6780, 2.6111, 0.2536, 6.1440, 7.1277, 4.6624, 5.2006, 6.0451, 5.6338, 3.7551, 1.1835, 6.7357, 0.6296, 4.7570, 2.5306, 6.3895, 3.2458, 2.8800, 6.4348, 5.4000, 0.0831, 5.1659, 4.4308, 3.8149, 2.1666, 7.8298, 5.1608, 2.6524, 5.3086, 1.7609, 1.9088, 5.8576, 2.9996, 5.7265, 0.0008, 7.6906, 0.2876, 1.5836, 7.6013, 0.8312, 6.4111, 5.5655, 6.0975, 3.7609, 3.6033, 7.3333, 4.3722, 6.4812, 0.1049, 1.7310, 7.3627, 2.9514, 4.0566, 0.8600, 5.5311, 5.4860, 0.3054, 5.7924, 5.8592, 6.9568, 2.2395, 1.0415, 4.1720, 4.5995, 3.0943, 6.2776, 0.2316, 2.4671, 0.4416, 1.1886, 3.3612, 7.7331, 6.6883, 5.4588, 4.4843, 4.5010, 1.9580, 3.0489, 1.5750, 0.2296, 3.9728, 6.8172, 4.0190, 2.3432, 2.1044, 0.3120, 3.2094, 5.5690, 4.7585, 6.3036, 5.5563, 1.7294, 1.1452, 6.8512, 2.6189, 0.7343, 3.6883, 5.6388, 3.4953, 1.9966, 7.5884, 0.2091, 4.2512, 0.2012, 5.9796, 1.9207, 3.5210, 3.8976, 4.9886, 7.5800, 1.6224, 2.3071, 4.1062, 6.2560, 5.1524, 3.3974, 4.3791, 7.9041, 3.1179, 5.7036, 6.4402, 5.2593, 2.0735, 2.0127, 2.0920, 7.2840, 4.3619, 3.1824, 4.3520, 0.8080, 7.3603, 5.9031, 3.1718, 1.6552, 5.6726, 4.6273, 7.2014, 4.2571, 0.5637, 7.2460, 5.9695, 4.9285, 2.3462, 3.9243, 2.2736, 6.1477, 3.0823, 6.1624, 2.5325, 7.4456, 3.7702, 7.8969, 7.2344, 1.4804, 6.3560, 6.3848, 3.4975, 6.5267, 5.2126, 4.4981, 6.5430, 3.9719, 0.7098, 6.8184, 5.3888, 7.0536, 3.3488, 3.9124, 6.8864, 5.7606, 3.0520, 4.1034, 7.5387, 5.1629, 4.6903, 5.3242, 5.1407, 6.5528, 7.7086, 5.5152, 4.4727, 3.3372, 5.6908, 4.7718, 5.8272, 3.9849, 2.7603, 0.8614, 4.1021, 7.3081, 4.6478, 6.7592, 4.8256, 1.7122, 0.7436, 7.1731, 7.5406, 1.9534, 6.0742, 3.5188, 4.4748, 3.4925, 2.1168, 3.1629, 6.8115, 4.5093, 5.8256, 3.9723, 2.9384, 0.2132, 1.1787, 6.4939, 5.1035, 3.4979, 6.2288, 6.7198, 5.3484, 7.9901, 1.2762, 4.3034, 2.7151, 0.3957, 0.2920, 6.9408, 1.1811, 5.8995, 1.6560, 3.8114, 7.5867, 7.6788, 1.8275, 2.3920, 5.8061, 3.0866, 6.2331, 3.7320, 7.8520, 5.5188, 1.9730, 5.1423, 5.0183, 4.5189, 1.3964, 3.4360, 6.3420, 2.1282, 3.8081, 6.8800, 0.2894, 1.6530, 7.2827, 6.4363, 0.3364, 7.1910, 0.6914, 0.6574, 6.6040, 4.7372, 7.6862, 0.6711, 0.9054, 4.2130, 1.9946, 0.7751, 7.8161, 4.1901, 0.7160, 3.6908, 3.6641, 4.0389, 1.9900, 5.2773, 6.6744, 3.8019, 2.8689, 4.0630, 2.2044, 2.3101, 3.2403, 2.9624, 5.7206, 0.6028, 3.1448, 0.9880, 6.0936, 1.8537, 5.9444, 4.9941, 5.4653, 2.9886, 2.3145, 2.1626, 0.0512, 3.0028, 0.8182, 7.4412, 5.2166, 0.0529, 6.0805, 7.2678, 4.0780, 1.9751, 4.0343, 2.2976, 4.4184, 0.5533, 1.1770, 7.7316, 6.2431, 4.7333, 0.5689, 6.3684, 1.7683, 2.1582, 7.7538, 4.0666, 0.4269, 4.6784, 5.6788, 7.8091, 0.2419, 7.3177, 3.7006, 5.7235, 1.3662, 5.1557, 1.5124, 5.8355, 6.3014, 5.5304, 3.2308, 2.0227, 3.6469, 3.8376, 6.3806, 5.2250, 1.0368, 3.4124, 3.6876, 6.4749, 3.4652, 4.4939, 2.2300, 2.0352, 0.6354, 7.0899, 6.9192, 3.7138, 0.8145, 7.3010, 1.6798, 4.4853, 3.7032, 0.4630, 1.2362, 4.1585, 1.3395, 2.0686, 0.3251, 7.6589, 0.4516, 1.5656, 7.4685, 3.5328, 1.0193, 5.1853, 7.1414, 7.6190, 1.9346, 7.5118, 7.9183, 1.8252, 0.8805, 0.0519, 7.1162, 1.4843, 2.5536, 2.2613, 2.5724, 4.5435, 2.1772, 4.6966, 2.2443, 3.6798, 7.7161, 1.5550, 7.2217, 3.1729, 2.5792, 3.6960, 2.3479, 2.0876, 2.6965, 6.2284, 2.2912, 0.0711, 3.2139, 6.0382, 3.2684, 5.7767, 7.3692, 7.2901, 2.5707, 5.4648, 6.5813, 6.9220, 0.5331, 1.0434, 2.8925, 5.0304, 6.0208, 6.6576, 1.9720, 1.9823, 6.0919, 2.7776, 3.1816, 2.5145, 6.8866, 1.5948, 3.8579, 5.8451, 5.8580, 1.4116, 6.9909, 1.3747, 4.3648, 1.8452, 4.3341, 1.1389, 7.4484, 7.8102, 0.2795, 3.2772, 6.6533, 6.1542, 1.5345, 0.9424, 6.2368, 1.1035, 2.8257, 5.9250, 1.1926, 1.0086, 2.3530, 5.4308, 7.2534, 6.8534, 6.5842, 2.8852, 0.6144, 5.0259, 6.0321, 6.7999, 5.7084, 1.2777, 7.5089, 4.9344, 0.1932, 0.1988, 1.4785, 7.3284, 2.4006, 3.6220, 4.8253, 1.6164, 5.4234, 1.1581, 4.5748, 2.8245, 3.5207, 4.5138, 5.1161, 5.4515, 1.4115, 3.3669, 1.3620, 2.0586, 4.8083, 5.1940, 0.8850, 3.7004, 6.3185, 5.5115, 7.5482, 6.0064, 0.7097, 5.5431, 2.2379, 2.9052, 0.7585, 4.7143, 1.6821, 5.2666, 1.6247, 7.1069, 5.7196, 0.9082, 5.6201, 5.9770, 2.9880, 6.5693, 3.4271, 4.1039, 3.6814, 4.6089, 6.7958, 3.3032, 7.0712, 0.3597, 1.5026, 4.8485, 3.3640, 1.6204, 4.2035, 3.2472, 2.1443, 6.4690, 5.7964, 5.6800, 7.3157, 4.1811, 7.4597, 6.5837, 0.2298, 3.8040, 1.0988, 6.2872, 2.4108, 2.7336, 6.8060, 3.9664, 5.7530, 2.7604, 2.3752, 3.3320, 0.9577, 3.8964, 2.5343, 3.9108, 7.8190, 2.7716, 1.8003, 5.5866, 1.0816, 2.5104, 7.6752, 2.1644, 2.5643, 4.9120, 4.5351, 1.4864, 7.2600, 0.7060, 1.8804, 2.5332, 3.9092, 5.5737, 7.2214, 6.8203, 1.1399, 7.9595, 7.9348, 5.3197, 5.6918, 7.3969, 7.5173, 7.3983, 3.0098, 0.3441, 6.5376, 3.6662, 7.0672, 3.7172, 3.4693, 2.6391, 3.4947, 4.8613, 5.9064, 3.2592, 6.4215, 0.0149, 2.1792, 6.8575, 0.3307, 5.4451, 3.7054, 3.4865, 3.1072, 4.8252, 0.1569, 5.3400, 6.4372, 3.3721, 4.7870, 5.2979, 3.3911, 0.5608, 0.2828, 1.9710, 1.6191, 0.4328, 5.4108, 4.5539, 7.9621, 7.0763, 1.6021, 4.7448, 6.6233, 4.7312, 5.7054, 0.6051, 3.3660, 7.7944, 2.9368, 2.8158, 0.1816, 4.1420, 5.6033, 1.5652, 0.8192, 0.2720, 7.0234, 2.0611, 1.0720, 6.3586, 1.9476, 0.1884, 5.3733, 1.9308, 5.4006, 4.9046, 0.7507, 6.1506, 7.9952, 6.0634, 4.7828, 5.6332, 6.1257, 5.9968, 7.7287, 5.6664, 5.6336, 1.1728, 4.6912, 1.3952, 0.4472, 4.4700, 2.7032, 7.8439, 6.8555, 3.0143, 0.7321, 7.5161, 7.8795, 2.2848, 4.7445, 6.5781, 4.3262, 3.6156, 3.5515, 1.8376, 5.0236, 2.0121, 1.8895, 7.7305, 3.4093, 0.4174, 3.1927, 2.4116, 6.1556, 7.9536, 4.7375, 0.8358, 0.8664, 4.1826, 7.9559, 3.7257, 6.5463, 6.5499, 5.8214, 4.1527, 2.7846, 6.2332, 1.4439, 7.0221, 7.5035, 4.1286, 4.1234, 2.2796, 2.9356, 7.6713, 0.0398, 0.1379, 5.1966, 2.8048, 2.6877, 4.7219, 6.6382, 3.8795, 5.0163, 7.1100, 5.7044, 5.3173, 0.2880, 7.4153, 7.8554, 4.0606, 6.9968, 6.3487, 1.4569, 0.0738, 7.3360, 5.0652, 1.1924, 2.6612, 1.7298, 4.9760, 0.4644, 5.4045, 1.3652, 2.8888, 4.3956, 3.7505, 2.5824, 5.6861, 4.7798, 1.4988, 5.7198, 2.3961, 3.2709, 0.9104, 5.7751, 7.2754, 6.7743, 6.7556, 5.4695, 4.2261, 6.9540, 2.7817, 0.0161, 2.2665, 5.5139, 5.6655, 2.0198, 6.5330, 5.0100, 1.2485, 5.9809, 6.3488, 1.0566, 1.9657, 2.3275, 3.5380, 4.3147, 6.9422, 5.4304, 7.7767, 5.6884, 4.5708, 2.2624, 3.0249, 0.2800, 1.9756, 5.9017, 1.0612, 1.5908, 4.7970, 2.8915, 4.3049, 1.0636, 1.2956, 4.9417, 6.2019, 5.8103, 1.9341, 3.2087, 7.2708, 7.8500, 6.6107, 7.3873, 3.3887, 4.2760, 7.1493, 2.4282, 3.4338, 2.8709, 1.9369, 6.0962, 4.3441, 3.5513, 5.0596, 5.9240, 3.3558, 2.9815, 3.7768, 7.6185, 1.2837, 0.6408, 1.9136, 6.6084, 0.6348, 3.9493, 4.8690, 6.1967, 2.8881, 4.7393, 5.4729, 2.8711, 6.1155, 6.0311, 0.9025, 6.5108, 6.7883, 6.4507, 3.9935, 0.3766, 3.3564, 2.3344, 1.7613, 0.5806, 4.9682, 7.0767, 6.8394, 5.8406, 6.8189, 0.6268, 4.2000, 0.8375, 6.7746, 1.4590, 6.0198, 1.7747, 3.9238, 0.4766, 5.3470, 2.8566, 4.2976, 4.4042, 5.2340, 2.2159, 4.7199, 3.4276, 7.2836, 6.8104, 5.3032, 7.0099, 4.5994, 2.6201, 4.4546, 2.2398, 7.6318, 3.8556, 4.6702, 1.7700, 3.8600, 2.7466, 3.3714, 3.9765, 7.1503, 4.5398, 1.0408, 3.3547, 4.8109, 4.2414, 5.7421, 1.9041, 5.6118, 4.0828, 5.9024, 4.1262, 0.7399, 5.5283, 1.9408, 6.3366, 7.8121, 5.7135, 1.9493, 4.8276, 1.7327, 6.6758, 4.5437, 0.8901, 4.5012, 7.0633, 2.2021, 0.1960, 7.2364, 5.3342, 7.6849, 0.6013, 0.6590, 7.2122, 7.1637, 6.8656, 3.6616, 5.1258, 2.7897, 0.2936, 3.4020, 0.8904, 2.5090, 7.4200, 0.5967, 0.7764, 5.1069, 4.1949, 3.2068, 0.1782, 4.5705, 4.1579, 4.9184, 0.5920, 0.3688, 6.5804, 3.4070, 5.6912, 1.8826, 7.2551, 4.6620, 2.5746, 3.8531, 4.8789, 2.2011, 6.5740, 4.7540, 6.7020, 2.9127, 3.3679, 4.7822, 2.3804, 1.8326, 7.5376, 7.5308, 0.2372, 3.6928, 3.1733, 0.1429, 5.6004, 4.7187, 4.7662, 2.4032, 2.0549, 3.2549, 1.5350, 3.6133, 7.5997, 2.7093, 5.1927, 7.3768, 5.7654, 6.6646, 4.5935, 6.1192, 1.3858, 5.1169, 1.9442, 5.7467, 0.5742, 5.5646, 7.3909, 0.8971, 3.5350, 4.2632, 2.9852, 0.5768, 7.3476, 1.3689, 1.5383, 1.0090, 1.0762, 6.3859, 4.9229, 3.9796, 1.6034, 5.2409, 3.3523, 3.5292, 7.0508, 0.2396, 2.4663, 6.5917, 6.9152, 1.0597, 5.7304, 1.3134, 7.6956, 6.0180, 5.7290, 7.1420, 4.3298, 6.6938, 6.5120, 6.2689, 5.1308, 7.7508, 1.2596, 6.7764, 7.4026, 1.5216, 4.5849, 5.2488, 5.0690, 2.5312, 5.3512, 0.1649, 7.7506, 7.3624, 4.9200, 7.0443, 7.0476, 4.3475, 4.8655, 3.1804, 2.1056, 7.8454, 7.5244, 5.1663, 7.9569, 5.6021, 4.9407, 6.3978, 5.6604, 3.4948, 7.1564, 4.4928, 1.0264, 3.4945, 0.0169, 7.5909, 2.4976, 0.9772, 5.7225, 5.7321, 0.4465, 3.8792, 3.3225, 4.6208, 2.1105, 7.8434, 5.8438, 6.8496, 6.0814, 0.7552, 2.4776, 4.7742, 1.9957, 3.0572, 3.8462, 2.0852, 1.5343, 7.1536, 3.0882, 5.4727, 6.2020, 4.7884, 1.8112, 2.2304, 3.9139, 1.2113, 4.5184, 6.6309, 7.3819, 7.1161, 0.6825, 6.2896, 3.7475, 5.1300, 6.6019, 3.8139, 5.3675, 7.3124, 1.6140, 6.7116, 6.0021, 7.8497, 2.5160, 7.0210, 2.3688, 0.6880, 6.0520, 5.9860, 3.5131, 4.3092, 1.9595, 1.2477, 6.4327, 6.5160, 5.7739, 7.3681, 7.7438, 7.8814, 2.2988, 2.9882, 7.4344, 5.6813, 4.9012, 5.0492, 7.3872, 6.5609, 3.1480, 6.7345, 2.3758, 5.3942, 3.2775, 4.1710, 5.4852, 3.1794, 7.9020, 5.5941, 1.3939, 4.8300, 5.2392, 3.9097, 0.5328, 3.9564, 5.6867, 7.0444, 2.8018, 3.3106, 4.2719, 3.9206, 1.9112, 5.0478, 3.0126, 1.6173, 5.7921, 7.6576, 6.5316, 2.2088, 2.4126, 1.7160, 0.0461, 5.8464, 4.8141, 7.0373, 0.6173, 6.1123, 3.7460, 2.6912, 7.8424, 3.0762, 0.4775, 7.1768, 0.6655, 2.6496, 4.8094, 6.3364, 4.1865, 1.2188, 6.8899, 1.5268, 4.7617, 0.3564, 5.9268, 4.2416, 4.7696, 4.9262, 7.7010, 2.5527, 4.4420, 7.5220, 4.7172, 2.3196, 1.5517, 7.1900, 5.5032, 6.8234, 6.5502, 2.6617, 7.4286, 7.5837, 3.5009, 5.6689, 4.9363, 1.2550, 7.4443, 6.2720, 1.8004, 3.4438, 4.9115, 7.8247, 1.8364, 5.5644, 4.0008, 3.0966, 0.3942, 6.3792, 7.0275, 1.8320, 0.2576, 6.4202, 3.6520, 3.3004, 5.3134, 3.7946, 5.3453, 4.0708, 4.2048, 6.7784, 1.5472, 7.0584, 7.3619, 5.5958, 3.7378, 4.5291, 6.0248, 3.6339, 3.9694, 2.2780, 5.6212, 0.6490, 5.5219, 2.6676, 3.5739, 2.7999, 0.2546, 4.0325, 0.8536, 4.1716, 0.4591, 2.0124, 2.1997, 4.5358, 5.3967, 4.1349, 6.9002, 3.9914, 0.0188, 6.8354, 1.8669, 2.0991, 2.9348, 7.1259, 1.2089, 4.3954, 7.0439, 3.2656, 2.5271, 6.0786, 3.7482, 5.6132, 3.6972, 6.2041, 7.8776, 6.3208, 6.7918, 7.7647, 3.2200, 5.2876, 0.3952, 6.3516, 0.2608, 6.2583, 1.3902, 1.0495, 7.2220, 1.0472, 4.8728, 0.5047, 2.5292, 7.2299, 3.5964, 4.5688, 1.2425, 4.5591, 5.4847, 4.8650, 4.7665, 7.4323, 6.9184, 4.5416, 7.5464, 4.7819, 7.5311, 2.2227, 3.8300, 6.9942, 1.7884, 2.4188, 1.9867, 0.7568, 7.0027, 6.4257, 2.7882, 1.6120, 5.9743, 2.0345, 0.8383, 3.5317, 2.8013, 4.3940, 7.2080, 0.6320, 7.3554, 4.4243, 7.7239, 7.1610, 3.6976, 7.9774, 4.9439, 1.8484, 3.8051, 7.9353, 7.0375, 7.4380, 0.3912, 4.0786, 4.2746, 4.8039, 0.5752, 2.7265, 3.0226, 6.8245, 5.1128, 2.3424, 7.7364, 0.0688, 6.0535, 5.2960, 3.7802, 1.7397, 0.6652, 0.1606, 6.2624, 4.3603, 0.1948, 4.6556, 1.4124, 1.9940, 1.3880, 6.6749, 2.0208, 0.7387, 0.7058, 0.2166, 5.9413, 0.6105, 5.3442, 1.5835, 1.0428, 3.4217, 7.2325, 7.8248, 4.5836, 0.5858, 5.2996, 6.3247, 6.1437, 4.1015, 4.2722, 4.3904, 2.4004, 1.5724, 1.2055, 1.4391, 5.0053, 3.9789, 2.0106, 0.0076, 7.2242, 4.2608, 3.6525, 5.8691, 4.8633, 2.6670, 4.4317, 6.6547, 0.9362, 0.9134, 5.7492, 2.0196, 6.6208, 1.5304, 0.8946, 6.3288, 6.6932, 7.5164, 7.6232, 3.6970, 1.7114, 7.7577, 7.9029, 6.3246, 6.3314, 5.4492, 6.5324, 2.9742, 0.8455, 1.6443, 5.8380, 6.9569, 3.0517, 6.8688, 2.5001, 0.4227, 4.7116, 2.6800, 5.9691, 4.0852, 0.2623, 0.6236, 4.2763, 7.5036, 7.1452, 4.9662, 4.4834, 4.9653, 0.2782, 2.9612, 3.3468, 1.2659, 4.7619, 2.1156, 3.9555, 5.6180, 2.1591, 4.5524, 0.0039, 3.7332, 1.8342, 3.3228, 4.1711, 4.9088, 4.2224, 1.1460, 5.5652, 7.4643, 4.9167, 3.7659, 4.4553, 6.0049, 2.9296, 5.4264, 3.9843, 1.4068, 2.3167, 5.7391, 6.4369, 6.9579, 6.6247, 0.2648, 6.6115, 1.1570, 5.9596, 2.0821, 3.0225, 5.6488, 6.1328, 0.3915, 7.2352, 0.0645, 5.2550, 7.7587, 2.3421, 5.0698, 7.2736, 4.9558, 7.5512, 7.7045, 2.8501, 7.6371, 0.5461, 4.5384, 1.0341, 1.4166, 6.9367, 6.7208, 6.2070, 6.3861, 2.2948, 3.6615, 4.7888, 1.1184, 4.3671, 5.0029, 0.3033, 3.1053, 4.5588, 5.3029, 5.6958, 3.0300, 2.8944, 2.2758, 4.3640, 3.2493, 7.5763, 2.6904, 4.9535, 4.9756, 2.2027, 7.8304, 1.5852, 6.9227, 6.3624, 1.1137, 2.7176, 1.3734, 6.3116, 7.3777, 3.0573, 5.9068, 7.9458, 0.1520, 0.3003, 5.3079, 4.3823, 7.3304, 7.0464, 5.0086, 3.3436, 1.2457, 5.8961, 0.3841, 5.4429, 6.0457, 7.3994, 3.6020, 2.0866, 5.3940, 7.3611, 2.0597, 0.0900, 6.7933, 2.5609, 4.2387, 5.3746, 2.9789, 1.4070, 3.4366, 2.9563, 7.8524, 6.2947, 1.9556, 6.4436, 0.7089, 0.4000, 3.9319, 3.6932, 2.6664, 3.4430, 2.6608, 0.1718, 4.2526, 0.2424, 7.8884, 4.1606, 5.2861, 4.3190, 4.3670, 2.6071, 3.3727, 4.8373, 7.3499, 6.4331, 6.4152, 6.5575, 5.6950, 6.7815, 1.8659, 5.4412, 2.6268, 6.9708, 0.3266, 1.7604, 0.8018, 0.7250, 0.4332, 3.9744, 7.1328, 2.2012, 0.2279, 0.9043, 3.7950, 4.2953, 0.3676, 3.8014, 1.4414, 1.3961, 7.1264, 6.0540, 6.7080, 3.1899, 3.2738, 1.4944, 4.9239, 0.2910, 3.1843, 1.3941, 4.4762, 7.5620, 0.8692, 7.8267, 2.8124, 4.4739, 6.6748, 0.1272, 0.7991, 4.9359, 3.7130, 2.0923, 1.3582, 6.1784, 3.5090, 2.1015, 7.4438, 0.9339, 0.0827, 1.1726, 1.5061, 6.9355, 2.2561, 4.4460, 2.8108, 1.4912, 0.6125, 4.5771, 3.8540, 5.0744, 4.0221, 3.1860, 4.0603, 0.2164, 1.8284, 2.1655, 0.5860, 4.4690, 6.8526, 3.6136, 4.4295, 5.4085, 5.1689, 7.5459, 1.1909, 4.8996, 5.8401, 4.0333, 5.6420, 3.6044, 1.2322, 3.0135, 0.0011, 1.4763, 6.1884, 3.3878, 1.2937, 5.9618, 1.8403, 4.4368, 5.9549, 1.9759, 7.0499, 7.7612, 6.5982, 5.7720, 2.9687, 4.5391, 3.5843, 4.8580, 6.3320, 3.6867, 0.7496, 2.3410, 2.5240, 6.8305, 4.5295, 2.6052, 6.9352, 6.8591, 1.2600, 6.6282, 4.5000, 3.3639, 0.1469, 6.0729, 5.7468, 4.0687, 3.8784, 2.3927, 3.2005, 5.0707, 2.9254, 5.3211, 6.5729, 0.6316, 1.4805, 4.9105, 7.9152, 4.1444, 1.5476, 1.8057, 0.1471, 6.4946, 2.3544, 6.1500, 1.8868, 7.7026, 7.9221, 2.1314, 2.0955, 7.9382, 3.1278, 1.0020, 5.3452, 1.7661, 0.6922, 0.1491, 0.0774, 4.0167, 6.2789, 6.6466, 7.5674, 1.5352, 2.8192, 1.4153, 6.4630, 6.4314, 2.1142, 6.2908, 4.6564, 7.8234, 2.3592, 2.8096, 0.0596, 7.3621, 3.3132, 1.7428, 7.4594, 7.0151, 3.4442, 0.8842, 0.8084, 3.1904, 2.5948, 0.0365, 5.5075, 0.5584, 4.4165, 1.4429, 4.1800, 7.6372, 3.7051, 7.6216, 2.8230, 0.7597, 7.1594, 6.4440, 2.5428, 4.2092, 1.6687, 5.7192, 5.2383, 1.9245, 6.9034, 6.8884, 2.1800, 1.2048, 5.6706, 6.2996, 7.1559, 3.6119, 4.3242, 6.6204, 3.8028, 2.1400, 1.7751, 3.5347, 4.9026, 0.9957, 7.5792, 4.8879, 4.1857, 5.8880, 4.1184, 1.2087, 7.7274, 0.7041, 2.0109, 3.6732, 6.4454, 2.8119, 7.8240, 3.5016, 7.9905, 3.7900, 1.7482, 6.0148, 5.9774, 3.8733, 5.1921, 7.8479, 1.6996, 5.4798, 0.8104, 3.7316, 2.9536, 7.1867, 7.3080, 1.7939, 4.2289, 4.6018, 3.1288, 0.0368, 7.3980, 3.5388, 0.7178, 5.1293, 7.3668, 3.2968, 3.1268, 2.1449, 0.7424, 2.1452, 3.3800, 0.1345, 6.4452, 0.8720, 7.7395, 5.2998, 6.3883, 3.1814, 6.7812, 2.2328, 7.8300, 3.5647, 5.1280, 7.5496, 4.6607, 1.4171, 7.4936, 1.8002, 0.4675, 7.3140, 2.1795, 5.1167, 6.7570, 3.0357, 0.0916, 6.6194, 2.6528, 7.8103, 5.9059, 2.2934, 4.2297, 4.3676, 7.4016, 3.1768, 6.2627, 3.0695, 7.7684, 7.9971, 7.5732, 5.0795, 0.6555, 4.7081, 5.4880, 1.2304, 1.2262, 4.1634, 7.6518, 6.3906, 1.7945, 2.9468, 7.5393, 2.2881, 6.2156, 5.2022, 3.7024, 4.0399, 5.1968, 0.8541, 1.8790, 3.8340, 7.7211, 0.8682, 4.4836, 7.2134, 7.2740, 6.7416, 3.2713, 7.9273, 1.9636, 3.5706, 2.9671, 2.3988, 2.2498, 0.0224, 0.2881, 0.8644, 4.0928, 4.8964, 2.9834, 2.6348, 5.5172, 3.3180, 4.5479, 6.0877, 7.8056, 6.8359, 0.1728, 2.3216, 6.6284, 7.9876, 3.9363, 3.6808, 5.8784, 1.0662, 2.8064, 5.2107, 0.9346, 5.8188, 3.6686, 5.8277, 5.4920, 2.7468, 4.8200, 6.6668, 5.9334, 5.2946, 6.2215, 2.0882, 7.6305, 4.5364, 1.1952, 3.1223, 1.3743, 6.1422, 5.8983, 1.0526, 5.5840, 3.3715, 5.9737, 1.2446, 3.4806, 0.6052, 2.7107, 2.9850, 6.8536, 5.0379, 4.2992, 2.1861, 3.9281, 1.2040, 6.4154, 5.0912, 7.9907, 0.0949, 7.9656, 4.7688, 3.4471, 7.8150, 1.4182, 2.1602, 7.0288, 4.6431, 3.6839, 5.0128, 3.6581, 3.0626, 7.6908, 2.8680, 7.0201, 3.7193, 3.5076, 4.3018, 2.6985, 2.5242, 5.3509, 2.0051, 5.0584, 4.1304, 2.6156, 2.8964, 4.6098, 5.6830, 5.9331, 6.8176, 5.3125, 4.4842, 6.5009, 6.4380, 0.9091, 0.5100, 2.2212, 2.9089, 2.2575, 7.3266, 4.0196, 4.5763, 3.0406, 3.3306, 2.5776, 0.8774, 7.7323, 7.5099, 6.7330, 7.9276, 0.7796, 5.2248, 5.1170, 4.2255, 7.7293, 0.2649, 6.6064, 5.3338, 4.0729, 0.7588, 3.2177, 7.6867, 7.9933, 4.9811, 6.2616, 4.4652, 4.7615, 4.3183, 1.1956, 6.6569, 2.2204, 3.7738, 3.5050, 2.9726, 7.1968, 4.3673, 4.0328, 1.5964, 2.9075, 3.4900, 4.1550, 5.2465, 6.7251, 1.9788, 6.1787, 1.5674, 4.6889, 3.7752, 4.0121, 7.1299, 3.1353, 0.5801, 2.7465, 6.3527, 1.5627, 5.2844, 7.8860, 2.4519, 2.7101, 0.8530, 4.2317, 5.5057, 5.5641, 4.7635, 7.2782, 0.9146, 1.3462, 1.0934, 4.3718, 2.8445, 6.2580, 2.2673, 1.0845, 3.8796, 7.2032, 2.8600, 4.4263, 5.1596, 6.3847, 0.5746, 6.5670, 1.3506, 7.6660, 1.6356, 6.0055, 1.3484, 3.7504, 6.3341, 1.0343, 4.2428, 4.0444, 7.7235, 2.1261, 4.9661, 3.0714, 2.3259, 3.8088, 5.8179, 4.5589, 4.7757, 0.0588, 7.3748, 4.3476, 0.7296, 4.7193, 0.4942, 5.0196, 7.8189, 1.9604, 4.1440, 4.4733, 0.4259, 0.0348, 4.2127, 6.1178, 7.0595, 5.2460, 3.2554, 5.6515, 2.7065, 5.2679, 2.6057, 1.5520, 0.8749, 0.4139, 4.0135, 5.4780, 3.2206, 2.3605, 0.7474, 6.1509, 2.0508, 5.2168, 4.7113, 1.5285, 1.2272, 6.9124, 7.9602, 3.6236, 5.1584, 2.2334, 5.9315, 7.6220, 0.1694, 7.0645, 4.3855, 5.0422, 2.5391, 0.8552, 0.1999, 0.3067, 0.8171, 1.9544, 3.1415, 4.5702, 3.7405, 0.5216, 7.1390, 1.1368, 2.0806, 0.2988, 0.8437, 7.7778, 7.5242, 2.6236, 7.7400, 3.4408, 7.1449, 3.7700, 2.7474, 6.1832, 7.4846, 7.0453, 4.2445, 0.3028, 5.1051, 6.3104, 3.8120, 7.0868, 2.3939, 1.2668, 1.4488, 4.8396, 1.6348, 4.0242, 4.9204, 2.1740, 0.9664, 0.3796, 2.4744, 7.7859, 4.9383, 3.6596, 2.8461, 6.1700, 2.3708, 5.4904, 7.8025, 7.1036, 0.1303, 2.1038, 5.6753, 4.3188, 7.2240, 4.6142, 4.5737, 3.0588, 4.9845, 0.5462, 6.1751, 5.4292, 1.7403, 0.2286, 6.9748, 6.3378, 7.0802, 3.1115, 7.5536, 4.1431, 5.6807, 6.1206, 4.1903, 3.7812, 4.0535, 7.8985, 1.0875, 5.0471, 6.6439, 6.7112, 3.4301, 1.0455, 1.6320, 5.5335, 3.2421, 1.4344, 5.2539, 2.6232, 0.4946, 6.9343, 0.2793, 4.1876, 6.9442, 6.8341, 2.2544, 1.3616, 5.1267, 3.5299, 4.2220, 6.0829, 2.2945, 7.8090, 5.1410, 5.2394, 3.3909, 3.7107, 0.6478, 1.7531, 1.7133, 0.1536, 5.9079, 4.7213, 5.4164, 3.4041, 4.4276, 1.5636, 1.9463, 4.7364, 5.6025, 5.6237, 1.5843, 3.9831, 2.2061, 2.7134, 1.5475, 3.8936, 0.6020, 2.5852, 7.2055, 6.3060, 7.2391, 5.6974, 3.2352, 6.1280, 4.4000, 2.9014, 0.6553, 4.0531, 6.0725, 7.4435, 0.1368, 1.7876, 7.2616, 3.9583, 3.5696, 2.8254, 4.1544, 3.1555, 3.0595, 3.2852, 7.8849, 2.9992, 0.6340, 2.7724, 4.7361, 0.0796, 0.9541, 7.8166, 4.0628, 5.3296, 7.4140, 0.3329, 1.6567, 1.8124, 7.1598, 7.3606, 0.6310, 3.0014, 1.9575, 1.0608, 7.6460, 2.8737, 1.9539, 6.7108, 4.9076, 2.3223, 1.6260, 6.4100, 1.9923, 3.9022, 1.6806, 4.8712, 1.9998, 4.6767, 4.4186, 1.9967, 3.9904, 3.4100, 5.9917, 3.0937, 0.2718, 2.6209, 4.0700, 6.4112, 6.2369, 7.7179, 0.2913, 0.3391, 0.6001, 2.5366, 4.0287, 6.8074, 4.7759, 1.4913, 7.7485, 4.9793, 5.7241, 0.4969, 2.8919, 3.9828, 1.3447, 0.4868, 3.4148, 3.6671, 3.1446, 5.7115, 7.1336, 4.1852, 0.3967, 0.9307, 5.3255, 3.0006, 1.9549, 2.4069, 4.7190, 6.6176, 2.8195, 7.0008, 2.5433, 7.4979, 2.6424, 2.0940, 7.4295, 5.0425, 7.4777, 2.8040, 1.6057, 6.0484, 1.5539, 3.3666, 4.2016, 2.3735, 6.8022, 4.9113, 7.3055, 2.5973, 0.7432, 4.2997, 4.6929, 7.7504, 2.6139, 7.9660, 3.4556, 0.2752, 5.3080, 5.0820, 5.6127, 5.4922, 4.8320, 1.7995, 6.2707, 1.3420, 5.8139, 2.3717, 2.8946, 5.7491, 3.4174, 2.6444, 2.6303, 3.3978, 3.3571, 4.2995, 7.5229, 1.6065, 2.3714, 0.7189, 2.2916, 3.9544, 2.9072, 0.0792, 1.4332, 3.7451, 4.4467, 2.6141, 4.2832, 0.4694, 1.1228, 4.0868, 3.1292, 5.1792, 2.7910, 2.6244, 6.2247, 1.0530, 0.4688, 3.1935, 7.5130, 1.1552, 2.1058, 0.4418, 4.7106, 7.5709, 2.2803, 6.6906, 6.6328, 4.2613, 1.9668, 0.1447, 1.7867, 3.0568, 0.5882, 0.6833, 3.6805, 2.6558, 2.0156, 7.7671, 5.9187, 1.0442, 3.3254, 0.3904, 7.8916, 2.7470, 6.5843, 0.5183, 4.3236, 0.0476, 2.5201, 2.7228, 4.1584, 6.4033, 3.3986, 3.7284, 5.2061, 2.5752, 7.0296, 0.3633, 6.1508, 0.9030, 7.0828, 0.8976, 7.8732, 4.1312, 6.7808, 7.0589, 5.2966, 6.7603, 6.9790, 6.5321, 3.8788, 5.1976, 1.9616, 5.0361, 7.8171, 0.5308, 7.8950, 0.7339, 1.0381, 6.7980, 3.8944, 4.0577, 0.9160, 6.9992, 0.4776, 1.7980, 6.4292, 1.0571, 5.1181, 1.0227, 2.5348, 6.4973, 5.8866, 1.8386, 0.8908, 7.0396, 1.0525, 7.5680, 6.8771, 6.8687, 6.8564, 2.9872, 3.3880, 2.9432, 7.8801, 5.1746, 4.8337, 1.1355, 2.9407, 0.6405, 0.9231, 2.8347, 4.2104, 4.6263, 5.8927, 2.6759, 5.5400, 1.8584, 5.7858, 7.8183, 5.4261, 2.3168, 5.1502, 1.3876, 1.0103, 6.9597, 5.7091, 4.5193, 3.5769, 0.4528, 6.2299, 0.6535, 4.4596, 1.0275, 2.3676, 2.3164, 4.2796, 1.5101, 2.7068, 6.3808, 0.8486, 5.0552, 2.2478, 7.3353, 6.4115, 1.4971, 5.4560, 7.7976, 1.8216, 7.2370, 5.2328, 6.6384, 2.5341, 7.6726, 5.5607, 5.1223, 0.7210, 7.5571, 7.7313, 1.0872, 2.0054, 3.7308, 2.0657, 5.6068, 6.4646, 4.7057, 5.1797, 5.4500, 2.7691, 6.2670, 4.9990, 0.9609, 5.5052, 2.1944, 6.2467, 3.2310, 0.7422, 4.0978, 5.0311, 6.6132, 1.2900, 5.8093, 5.2712, 1.2298, 6.3639, 2.4117, 2.9644, 3.1375, 3.1424, 0.2610, 1.4736, 0.9816, 3.5341, 0.8141, 2.9320, 7.4460, 1.3707, 1.1565, 0.2508, 4.0413, 0.6435, 1.4543, 0.5038, 2.2840, 0.7227, 7.7822, 7.6021, 4.5993, 4.8050, 7.2924, 2.3317, 6.8430, 0.1532, 2.1915, 0.7866, 2.6819, 6.3889, 7.0867, 6.8450, 2.3706, 2.6600, 2.2781, 1.0574, 7.4136, 7.8033, 0.9952, 3.7660, 5.4179, 1.3700, 1.1616, 4.1364, 2.5856, 0.3308, 4.2316, 2.5706, 5.3166, 7.3102, 7.0145, 4.6881, 5.0588, 1.9810, 0.3272, 0.3979, 5.2156, 2.5901, 7.1204, 4.6271, 1.8476, 7.5983, 5.2884, 6.1484, 2.0715, 5.4740, 3.0957, 6.6552, 4.6622, 1.4464, 2.1723, 6.7848, 5.8666, 1.8170, 2.2533, 1.8447, 3.1511, 3.3859, 2.5680, 3.0858, 5.9876, 0.6693, 6.9509, 5.9379, 5.0979, 0.5719, 7.8781, 4.0988, 4.1268, 3.5900, 6.7456, 3.0440, 0.9468, 1.0348, 3.0632, 7.9444, 7.2313, 4.7680, 2.9700, 4.0644, 5.2265, 6.4942, 5.1493, 6.9415, 7.2839, 3.5808, 4.3288, 0.1882, 6.1634, 2.6906, 0.8388, 0.7772, 2.3385, 0.0063, 7.0236, 6.3486, 0.3902, 4.2456, 3.6492, 2.6746, 3.5325, 0.5502, 3.6188, 4.0396, 2.2891, 2.8844, 4.9427, 6.2796, 1.7916, 5.3232, 2.2440, 3.2939, 0.7804, 5.9520, 6.8519, 7.9607, 3.6763, 7.4396, 7.4522, 7.7957, 3.4197, 6.4258, 4.9017, 5.6862, 1.1673, 0.8026, 2.9219, 2.4767, 7.2222, 4.0718, 2.5400, 4.2041, 7.8995, 4.1816, 6.2661, 4.4123, 2.0739, 7.2020, 1.0080, 7.5236, 5.1068, 2.1377, 7.0403, 7.1039, 1.3842, 3.9635, 3.8932, 2.6124, 2.7358, 6.2173, 2.5541, 3.9545, 3.0485, 0.4080, 1.8927, 3.3205, 7.4410, 6.1156, 2.2605, 1.9456, 3.9968, 4.8846, 1.1628, 7.2781, 7.7589, 4.9822, 7.5397, 6.6936, 7.6854, 5.3848, 5.8848, 2.3193, 0.9873, 5.9632, 6.1976, 4.3811, 5.8792, 3.4067, 6.3437, 3.9067, 2.9813, 0.7064, 7.7112, 7.8202, 1.2334, 3.1924, 4.8864, 7.7865, 4.3252, 2.6548, 4.9440, 6.1896, 6.7212, 6.0799, 5.2100, 6.5382, 6.0640, 7.6472, 7.6070, 5.1803, 0.3786, 2.4407, 0.4404, 7.9198, 4.6828, 0.8564, 2.5228, 2.1337, 6.9245, 3.5733, 6.9721, 6.0840, 5.3118, 7.7914, 4.5658, 1.5451, 7.2674, 4.0585, 4.7185, 1.1684, 1.3076, 5.5868, 1.3020, 2.3267, 3.7412, 6.3331, 3.7527, 6.9372, 1.2277, 4.1972, 5.5407, 3.2058, 0.0123, 6.3631, 7.7382, 4.5319, 1.5748, 1.2101, 5.9634, 4.0540, 3.8663, 7.4876, 5.8399, 1.2289, 7.4272, 4.2628, 7.6363, 5.5022, 3.2588, 1.5340, 7.2612, 2.5043, 3.6875, 1.8904, 3.1702, 3.8941, 3.7064, 1.6130, 4.2083, 2.4422, 4.6332, 7.6269, 3.0022, 4.4956, 6.2926, 6.5208, 5.2533, 3.5232, 5.4907, 0.3449, 0.3361, 2.0845, 5.8936, 5.7049, 0.3640, 0.1189, 2.8716, 2.5848, 2.7974, 0.7490, 7.4956, 6.7188, 5.7942, 1.5920, 5.0572, 7.7751, 2.7383, 0.4938, 2.8623, 2.3017, 0.3998, 0.7778, 3.4390, 1.1685, 1.8525, 0.6106, 5.3244, 4.2237, 2.1490, 5.0176, 0.3135, 4.4126, 1.3500, 5.0040, 6.6045, 5.8184, 5.2640, 5.8877, 0.9723, 3.0420, 6.6535, 6.0258, 4.9802, 3.9853, 4.7605, 4.4944, 6.4663, 5.5265, 2.0027, 6.1698, 7.0012, 5.2312, 0.8371, 6.4818, 0.9691, 7.9514, 6.6219, 4.2690, 4.8520, 2.7156, 2.1660, 5.8908, 0.0518, 5.0592, 4.4008, 2.1840, 5.9562, 3.4245, 4.1980, 5.5452, 1.3408, 3.6260, 0.1366, 0.0084, 7.9556, 4.0095, 3.5564, 4.9580, 1.8962, 5.9202, 7.2847, 4.6996, 0.5918, 6.8182, 6.2544, 0.3292, 4.1501, 1.3120, 4.6099, 0.3452, 3.4729, 1.5020, 6.7853, 7.7817, 6.5332, 0.6326, 7.5644, 3.9474, 1.4316, 0.2643, 7.9752, 5.0915, 0.6138, 5.7908, 3.1320, 1.5208, 6.6616, 4.3820, 3.4944, 5.1384, 6.8993, 5.7540, 6.7316, 6.3204, 0.7548, 1.8799, 6.2164, 4.7472, 6.1948, 0.6771, 7.5136, 5.1997, 7.0594, 2.0740, 2.2585, 2.2973, 0.5208, 6.9678, 4.1089, 6.7232, 4.4054, 6.4626, 0.0720, 3.1360, 1.4738, 3.8599, 3.0012, 4.6442, 2.7084, 6.6148, 0.6941, 3.5840, 1.0221, 6.4145, 6.9776, 6.4553, 2.1022, 4.7313, 5.6539, 5.0160, 7.8257, 1.4573, 5.4316, 7.6309, 2.1344, 6.2731, 2.8465, 1.0484, 2.8599, 3.0037, 7.9019, 1.4212, 6.1956, 6.2804, 0.5368, 1.3374, 4.2664, 0.3184, 2.9904, 2.6037, 3.1269, 4.2459, 2.0601, 3.4426, 4.8343, 3.3068, 6.6063, 0.5710, 1.7377, 2.3210, 5.7640, 1.6391, 0.7245, 3.1832, 2.9244, 6.9886, 5.9635, 4.5092, 0.1717, 7.4714, 6.3480, 2.3174, 3.0352, 2.8684, 3.5596, 1.0560, 6.7005, 6.9104, 0.9758, 6.6351, 5.5906, 2.6045, 1.3005, 7.3834, 2.9889, 6.4828, 2.4506, 0.3404, 5.9392, 3.1414, 5.1644, 3.0689, 0.9563, 1.2455, 0.3905, 3.2097, 0.8550, 1.1324, 0.7276, 6.2176, 6.2315, 6.7229, 4.8126, 7.7128, 2.8632, 2.5039, 5.9257, 4.4973, 4.3757, 0.6345, 1.8592, 1.1248, 7.0623, 6.1958, 4.6670, 7.9232, 1.7597, 6.2191, 5.4910, 0.9010, 2.6547, 1.8766, 3.7619, 0.0828, 2.5281, 2.1781, 7.7469, 6.9528, 4.9951, 3.5008, 4.1449, 0.1609, 5.9134, 3.1372, 2.7700, 1.7458, 1.4500, 1.1955, 5.3906, 3.2994, 7.7052, 2.0608, 1.1185, 6.9189, 0.3070, 4.5696, 5.2756, 2.8183, 0.1977, 5.7911, 7.5545, 2.4692, 0.6305, 6.0909, 3.2792, 6.8890, 7.7616, 6.5299, 1.5698, 1.8689, 4.3545, 2.0620, 7.5465, 6.7435, 3.8727, 0.9437, 4.4670, 5.2544, 1.9713, 4.8288, 5.0263, 7.4696, 4.5774, 2.4235, 0.5350, 6.4063, 7.3126, 7.3764, 4.5076, 2.0217, 0.1735, 4.8328, 4.2043, 0.7450, 3.6838, 5.4487, 4.3709, 7.1987, 0.8836, 7.3887, 0.6418, 5.1420, 7.0620, 0.6869, 7.5132, 0.6569, 2.6313, 1.4652, 7.3569, 4.8609, 1.0943, 6.9297, 4.3833, 0.0990, 3.9364, 4.8006, 5.4732, 1.7936, 4.9784, 4.2904, 6.9733, 7.3747, 1.4707, 0.4824, 7.3164, 0.2592, 2.8518, 5.0365, 1.6290, 3.5019, 2.7920, 6.7169, 1.6276, 6.7499, 1.1476, 2.9527, 7.7714, 1.8561, 6.3313, 1.7931, 4.2007, 6.9468, 4.7751, 0.2671, 7.7560, 6.2356, 6.5919, 5.3405, 6.8088, 7.9312, 1.3523, 4.3248, 7.5330, 5.9644, 5.3169, 1.0658, 0.7274, 0.1180, 5.9449, 0.7931, 1.1687, 2.1753, 0.1410, 0.3969, 5.0527, 2.6108, 7.2964, 0.7425, 6.7940, 4.8143, 5.7087, 4.7062, 1.3843, 5.7564, 6.5440, 7.4988, 3.7995, 4.7174, 1.8765, 1.0854, 0.1607, 7.2288, 7.5576, 7.7189, 1.1988, 3.9095, 4.3852, 6.0274, 2.2017, 7.2851, 6.1217, 3.1478, 5.6847, 3.5531, 1.2434, 6.8382, 0.0027, 5.1922, 2.8070, 0.7733, 0.2371, 0.1208, 2.3337, 2.8396, 4.2577, 6.0435, 0.1729, 1.5113, 6.8054, 0.4909, 0.5468, 3.8440, 2.6387, 5.6101, 0.5561, 2.9491, 3.5576, 7.0527, 5.8360, 0.1444, 1.4002, 4.6746, 2.6499, 7.1955, 4.1655, 7.6658, 6.6643, 5.4389, 0.3750, 6.3426, 3.2587, 0.3512, 1.8380, 3.0700, 2.3148, 1.3246, 6.2785, 7.6336, 2.3152, 4.0384, 5.8235, 1.7768, 2.5812, 2.8384, 3.2216, 1.8176, 2.5555, 0.2628, 5.7844, 2.8856, 1.3987, 7.9944, 6.9688, 5.4730, 5.8191, 3.9708, 0.8340, 3.1676, 3.8253, 5.4707, 3.6268, 3.1194, 0.6548, 6.0267, 5.0056, 5.7773, 7.0608, 4.2470, 5.6910, 4.7588, 5.6840, 5.7240, 6.8869, 7.3503, 4.7848, 1.2513, 7.3597, 2.3312, 5.6015, 7.7491, 0.5076, 1.4346, 7.0339, 0.4707, 7.7164, 6.4594, 2.5013, 1.6015, 0.4393, 1.6728, 0.6099, 7.9388, 1.3289, 2.7291, 4.6808, 7.4624, 6.9654, 6.0926, 1.7199, 3.3184, 4.3406, 3.5308, 1.5239, 6.0364, 0.8615, 7.5956, 2.1332, 4.0367, 3.3316, 7.5892, 4.7377, 3.6099, 5.1044, 6.8997, 5.0607, 2.2897, 4.2357, 1.2674, 1.3382, 1.7716, 7.9477, 6.0871, 7.7308, 6.7816, 2.3085, 0.7681, 3.7496, 2.0936, 3.9859, 6.2088, 6.2674, 3.9047, 2.9128, 7.6686, 2.2688, 7.7352, 2.5810, 3.1046, 1.7238, 3.0063, 6.8590, 3.8124, 6.7096, 2.7221, 4.5528, 3.6975, 7.9086, 7.0419, 1.8565, 1.9932, 6.4772, 0.1132, 0.4464, 5.9660, 4.6721, 5.1772, 3.4577, 1.5232, 1.1864, 2.2374, 3.5512, 7.0971, 7.6704, 3.2837, 6.4237, 1.6151, 6.2281, 6.9704, 4.2932, 1.4600, 2.8241, 4.1028, 4.6545, 0.0187, 2.0236, 7.1500, 5.9209, 7.4188, 0.8219, 7.6204, 0.3760, 2.1302, 6.6445, 0.9552, 7.6478, 3.0244, 5.8027, 4.6016, 0.1544, 5.0984, 7.8412, 5.0988, 6.4744, 1.7392, 1.1972, 7.3645, 7.9168, 2.0333, 0.8747, 1.9172, 1.9992, 2.9104, 2.1216, 0.6645, 5.0678, 5.9560, 4.2684, 3.0923, 3.4792, 7.6473, 7.2542, 4.4378, 7.9637, 3.1772, 5.5097, 3.6476, 4.3924, 0.5335, 6.3168, 5.7609, 0.9779, 6.2031, 3.1404, 5.1238, 1.5144, 0.1648, 1.6940, 4.1889, 2.2949, 7.4616, 2.0914, 6.4952, 7.5116, 6.1584, 4.9910, 4.2345, 6.8821, 3.3337, 3.4146, 7.5223, 4.4050, 0.6811, 4.0103, 3.4165, 4.7432, 7.0153, 5.6060, 1.6629, 3.2861, 5.4572, 2.3607, 6.7704, 5.8048, 0.2832, 6.4321, 4.1308, 5.6153, 6.5020, 5.4302, 3.8580, 2.7112, 4.7336, 4.3159, 1.9634, 0.1352, 4.0208, 7.4983, 1.0564, 2.8178, 3.0788, 0.6584, 0.0425, 3.1848, 7.8789, 3.6132, 4.8088, 3.0409, 4.6868, 7.2444, 2.9380, 4.7704, 5.3004, 7.9009, 4.6403, 0.0749, 7.1104, 4.3597, 0.5481, 0.4132, 6.2855, 1.2984, 3.0940, 4.5467, 7.1839, 4.8733, 0.1726, 4.3088, 4.5493, 6.8506, 0.6628, 7.3255, 4.0583, 2.8202, 7.5447, 5.6335, 5.5352, 7.5333, 2.5528, 3.1560, 0.5501, 6.4167, 2.3908, 2.3480, 7.2531, 5.4724, 4.1675, 7.1797, 2.6388, 4.3846, 4.4048, 0.1947, 6.3599, 2.2368, 5.4624, 0.4289, 3.0719, 4.7620, 3.5280, 4.1503, 7.6423, 3.0537, 4.0831, 7.7756, 3.9864, 7.8736, 1.4890, 6.1128, 6.0235, 3.8020, 4.7211, 3.9964, 7.9261, 4.1751, 6.1786, 2.8710, 6.0247, 1.0154, 2.6184, 3.0089, 7.2982, 1.7858, 2.7253, 5.9759, 4.1652, 6.8224, 0.9928, 0.7517, 1.7388, 6.5889, 1.1913, 0.1056, 3.9550, 3.5806, 1.7201, 5.6410, 5.3672, 2.2524, 5.6558, 5.7088, 6.8352, 5.8164, 0.9365, 5.9388, 0.6844, 7.8087, 1.8556, 4.6063, 7.3052, 1.7137, 2.7509, 1.1276, 0.8797, 7.3114, 0.0383, 4.9256, 4.0897, 6.5107, 1.9283, 0.8562, 3.9402, 5.2527, 3.9464, 7.0624, 5.8365, 4.7504, 7.3542, 7.5928, 6.2636, 0.1809, 0.8724, 1.7087, 7.6515, 5.5586, 1.6947, 5.8292, 1.4755, 2.1716, 2.6747, 5.8537, 7.0973, 3.6075, 1.4989, 1.5266, 3.2287, 0.9554, 0.3270, 0.5015, 0.4852, 2.5936, 6.5714, 2.0804, 7.6877, 0.9885, 3.5940, 0.3825, 7.9541, 7.4518, 4.1697, 4.0956, 3.8768, 6.9348, 4.2551, 1.0833, 1.3352, 0.6618, 6.2886, 6.6529, 3.9987, 4.8532, 6.2074, 2.7271, 2.9371, 0.2865, 1.7192, 6.1177, 6.4328, 2.6868, 6.9436, 4.2807, 6.7340, 5.6108, 5.2691, 1.0100, 6.5098, 6.7010, 0.8063, 2.6192, 1.8276, 4.1882, 4.9708, 0.3990, 7.5259, 3.1172, 1.7892, 3.1248, 0.9924, 3.8468, 6.4360, 3.8175, 6.4541, 5.6936, 5.9831, 3.5073, 2.4074, 0.9530, 1.8405, 5.7133, 1.9536, 0.2264, 0.5060, 3.8241, 2.8217, 1.8587, 4.7916, 1.6358, 4.9172, 5.4025, 3.7254, 2.3620, 2.2697, 7.7257, 7.7956, 1.1607, 2.3490, 7.4890, 4.1496, 7.7947, 3.4544, 0.8416, 0.1048, 2.4780, 4.1128, 1.7140, 0.4326, 6.4659, 7.2171, 6.2540, 3.2181, 7.3751, 6.9234, 5.6344, 1.8085, 3.8534, 5.2053, 0.1404, 1.6089, 5.6433, 1.0728, 3.1890, 1.7840, 2.5304, 3.5201, 3.7824, 6.8004, 0.5662, 3.5550, 2.1808, 7.4121, 6.8275, 0.0209, 0.8275, 6.8059, 0.7627, 1.1347, 2.1014, 0.6556, 3.0429, 5.9161, 0.3304, 7.2067, 6.9078, 6.1144, 1.1036, 2.6636, 2.7767, 6.0183, 0.3584, 3.2004, 2.8747, 6.0584, 7.6467, 6.8020, 1.0149, 0.5204, 7.6815, 4.4919, 6.7785, 2.3185, 1.7120, 0.0718, 4.8197, 6.0908, 3.2076, 3.7795, 1.5927, 6.8413, 0.5883, 0.8500, 5.4043, 2.2687, 6.8667, 6.4700, 5.3671, 1.2532, 3.5096, 0.5003, 5.3160, 0.9356, 5.2348, 6.3256, 4.2452, 1.6338, 4.2934, 1.7461, 3.2946, 0.0979, 7.4283, 0.9639, 4.7204, 1.3226, 4.8214, 6.2080, 5.1609, 7.7084, 5.0806, 6.2488, 2.3098, 0.7405, 3.7830, 6.0099, 5.6924, 7.0352, 7.2144, 0.2540, 5.3644, 5.5167, 0.5647, 2.5257, 3.0507, 3.7602, 2.7211, 4.3372, 1.0627, 5.6836, 3.2065, 2.9099, 1.5749, 5.4041, 1.6159, 5.7596, 6.6704, 4.5209, 1.0631, 3.5381, 1.4203, 1.5446, 0.0366, 2.2739, 7.4062, 2.2035, 7.0506, 3.6408, 6.5538, 7.4903, 0.9841, 3.3578, 2.2692, 2.3121, 2.3858, 2.3798, 7.2802, 2.0329, 5.9812, 4.2936, 4.5302, 4.0205, 7.0155, 4.1004, 1.1412, 7.4785, 3.3651, 5.7172, 0.5163, 1.3475, 0.6176, 4.8081, 0.1312, 0.5147, 3.1484, 0.1373, 6.0952, 6.6974, 0.1658, 4.3249, 3.4578, 4.8512, 5.8338, 0.1327, 2.2387, 1.8613, 6.4303, 7.0390, 5.4346, 2.0459, 1.1004, 6.6561, 0.9548, 5.8206, 7.4896, 4.5420, 5.6244, 7.5386, 7.3232, 2.2421, 3.1635, 7.9928, 0.8922, 5.4143, 1.3130, 6.0203, 4.9307, 5.4516, 4.1219, 4.4850, 5.1597, 7.9600, 3.0041, 0.1794, 0.2108, 0.9962, 7.1760, 3.9890, 6.2362, 5.4575, 2.9753, 5.8949, 0.3670, 4.9387, 7.9051, 2.6908, 7.7795, 7.1806, 5.8148, 2.9984, 7.8432, 2.8432, 6.1981, 4.4314, 4.9690, 1.2380, 4.3366, 4.7740, 3.7250, 3.4061, 7.5046, 1.5072, 1.9613, 0.8589, 5.8490, 4.9522, 7.0801, 2.8004, 7.7677, 2.0193, 5.8096, 5.3530, 0.0952, 6.7568, 0.2194, 6.8329, 4.9376, 4.6992, 0.7580, 7.5701, 2.2264, 1.2254, 4.4012, 0.9757, 4.3848, 0.8056, 4.4763, 4.0244, 6.8292, 7.2786, 2.7288, 6.9988, 4.1397, 3.3041, 7.3954, 1.8750, 2.6138, 2.0701, 1.2104, 4.6266, 4.7182, 0.4375, 2.2023, 6.2640, 0.4878, 0.8490, 3.7200, 2.6328, 4.0176, 6.7227, 7.0597, 6.8989, 0.3674, 4.2240, 0.3303, 0.4066, 3.8016, 0.3464, 0.2775, 0.6858, 6.7596, 1.8257, 6.0848, 7.4006, 0.9888, 6.7952, 4.1653, 6.5132, 3.2495, 3.0057, 0.1228, 1.0008, 7.8990, 2.3931, 6.3135, 2.4787, 6.7586, 2.9394, 3.5908, 0.3451, 2.4646, 1.4609, 7.1781, 1.1351, 3.6923, 3.9775, 5.2686, 3.7914, 1.5824, 2.1283, 5.4265, 4.9752, 6.6457, 6.7326, 5.7610, 2.5611, 1.9656, 5.6437, 5.2591, 5.0646, 1.0402, 5.1592, 7.9408, 0.2686, 1.0964, 5.3849, 3.5822, 4.6945, 7.5912, 3.2676, 7.5760, 7.5563, 3.2741, 7.0668, 3.8721, 3.8265, 1.6917, 7.1907, 6.4499, 1.8075, 7.4543, 5.2954, 5.4830, 0.3588, 7.5455, 0.3240, 6.4300, 3.6001, 0.9137, 3.6594, 0.8440, 5.0838, 2.4966, 3.3709, 0.0707, 0.9480, 2.6476, 6.3064, 3.3775, 0.7513, 0.6285, 6.7864, 6.9674, 6.1402, 2.7408, 4.6860, 2.9513, 6.7087, 4.0337, 5.2372, 0.7916, 5.8587, 6.7258, 1.2414, 5.3520, 4.7121, 6.6587, 1.8215, 2.9901, 4.4277, 2.0504, 1.0462, 7.2580, 3.2569, 2.8526, 3.1210, 0.0448, 0.5443, 3.3991, 2.5301, 4.9133, 2.9450, 6.2729, 1.5998, 4.7300, 4.8150, 6.5707, 6.3553, 5.3111, 7.5048, 1.2949, 0.0626, 1.7235, 7.3970, 4.8264, 1.2804, 4.6677, 1.1053, 1.2152, 5.0502, 1.3403, 3.7434, 7.4208, 3.5047, 5.8038, 3.6168, 4.0885, 3.2123, 7.3431, 7.3198, 2.2924, 3.3325, 6.6092, 2.4916, 3.0805, 2.9272, 0.8506, 6.1788, 1.6688, 2.8451, 7.3225, 7.5401, 6.2748, 5.6313, 3.2136, 3.4221, 1.7927, 5.1124, 7.6816, 1.4128, 6.3016, 2.3482, 6.5019, 3.4514, 3.0211, 2.5029, 4.6932, 0.2609, 1.0748, 7.7187, 2.8759, 0.9303, 4.8944, 2.6464, 6.2487, 2.9392, 6.2415, 7.2108, 0.7029, 5.9744, 7.5775, 4.0645, 6.2072, 0.8937, 7.9368, 1.8580, 6.4435, 2.1228, 0.1276, 3.4034, 3.6996, 0.1823, 3.2680, 2.9332, 5.5158, 3.0119, 3.1126, 4.7042, 5.5800, 2.1692, 3.4088, 3.2078, 1.7612, 7.1307, 5.5968, 2.3230, 1.1365, 4.3701, 0.4585, 1.9811, 7.6926, 1.9439, 7.0521, 4.6326, 1.2904, 1.9545, 6.8468, 1.9421, 4.7409, 0.7262, 6.9276, 5.9664, 5.3064, 2.1424, 0.9154, 3.6634, 1.8899, 5.2925, 1.7328, 2.6595, 0.4968, 2.6913, 7.1880, 1.6020, 3.6336, 1.6746, 5.1789, 0.4897, 7.8539, 7.1642, 5.1693, 7.9225, 4.8852, 7.4144, 6.0796, 1.8408, 2.4660, 7.7890, 4.6615, 1.1265, 3.4660, 7.0128, 3.0851, 1.5084, 3.1144, 1.4693, 6.0327, 1.6489, 4.2275, 3.8520, 6.9875, 0.6934, 4.1957, 1.2187, 0.7748, 1.5274, 6.3195, 0.3442, 0.1304, 1.1786, 2.3348, 6.0529, 3.6032, 0.9825, 5.1523, 2.4420, 6.0325, 1.1086, 2.1623, 1.1559, 3.9005, 0.3024, 6.3077, 1.5021, 6.2285, 3.5996, 1.4847, 5.6359, 0.5318, 6.5240, 4.6287, 6.1638, 6.6481, 1.6711, 4.9880, 0.2052, 0.6843, 2.5357, 1.2066, 7.6196, 6.4075, 0.6336, 6.4517, 2.9455, 7.0616, 5.7025, 2.3962, 2.8541, 6.3956, 4.2905, 0.8202, 7.4820, 3.6348, 1.9644, 2.5966, 6.1628, 1.3096, 0.0081, 2.1295, 2.6939, 3.7926, 3.3264, 7.4322, 7.6873, 2.9192, 1.1554, 7.9668, 6.9321, 7.8471, 4.1555, 5.5736, 4.7414, 5.5356, 5.7646, 0.2078, 6.2300, 4.5911, 3.2316, 2.4640, 1.6533, 6.1799, 7.0980, 1.2406, 3.2755, 7.0367, 6.7865, 7.9877, 5.0287, 0.6160, 2.6116, 4.2696, 7.6351, 2.3881, 0.7684, 2.5129, 3.6818, 3.1168, 0.7330, 1.6878, 5.7700, 2.2203, 2.2060, 5.1933, 1.7630, 0.8479, 7.3726, 6.2572, 4.6900, 6.8044, 5.3243, 1.8723, 4.7898, 2.2648, 1.3985, 7.6864, 5.7743, 3.2916, 6.1000, 0.1326, 2.0181, 1.7968, 5.2078, 5.1445, 5.0995, 7.2212, 1.8513, 1.9021, 0.8573, 2.3987, 7.0830, 5.6095, 0.2157, 0.5315, 1.8648, 1.6531, 6.7820, 7.3728, 5.4332, 6.3833, 1.3036, 2.3112, 1.7022, 1.0350, 6.5987, 0.6589, 3.0452, 4.6859, 3.1958, 2.2194, 1.7146, 4.2671, 4.5477, 0.8578, 7.0198, 3.9275, 7.5711, 2.1849, 6.4448, 0.6476, 0.4803, 3.6881, 6.5776, 1.4300, 3.1512, 0.3552, 5.6353, 1.8360, 6.0333, 4.8578, 3.6749, 5.1970, 6.8586, 0.6518, 3.6497, 5.6494, 0.4090, 7.3580, 6.7245, 6.0813, 0.1668, 0.4714, 3.2116, 5.5519, 1.1480, 2.4265, 4.8061, 7.5215, 0.2292, 5.6352, 1.9026, 0.6944, 5.7460, 4.0405, 0.1915, 7.2396, 0.2811, 1.9506, 4.1376, 3.3178, 5.6854, 6.8254, 0.3816, 3.0579, 3.9601, 6.8742, 2.5515, 3.7884, 7.4154, 1.9740, 7.6689, 6.0999, 4.3056, 5.7392, 6.2933, 4.5568, 0.8887, 1.1366, 6.9792, 1.3549, 4.8232, 5.3676, 0.0292, 4.6160, 6.3945, 0.5329, 0.7038, 6.4166, 4.1632, 6.2819, 0.6297, 3.3522, 0.0298, 0.0020, 0.7188, 2.4293, 3.2836, 7.4536, 5.2205, 3.6988, 3.6299, 2.6305, 4.5786, 2.4788, 7.4164, 3.4894, 4.3152, 5.3420, 5.0059, 3.2749, 2.7570, 6.2271, 4.8410, 5.1415, 0.6184, 6.6924, 7.3560, 6.6215, 7.9715, 2.9309, 0.9984, 7.2256, 3.0284, 2.5762, 7.3631, 2.6074, 4.9928, 1.1263, 0.8670, 5.7644, 1.9723, 6.1145, 4.6347, 7.1489, 4.8333, 2.7764, 7.0481, 5.2626, 4.7184, 7.3305, 2.1122, 4.6228, 0.7056, 4.8524, 0.1148, 4.5839, 7.2672, 4.3768, 0.9911, 0.8281, 7.2436, 4.0864, 6.2400, 5.9511, 3.8699, 2.6693, 2.8492, 4.7996, 6.1034, 7.9418, 3.3956, 4.7800, 5.2344, 1.4158, 7.3280, 6.0388, 3.3052, 1.5854, 1.4505, 4.1471, 3.1060, 7.5896, 7.0180, 7.6243, 1.4821, 0.4003, 2.0574, 7.8135, 0.5394, 7.8292, 6.4500, 3.9276, 1.2386, 6.5548, 4.4554, 0.9629, 2.4431, 6.4515, 3.8700, 0.2057, 1.2664, 2.9990, 1.6519, 0.6100, 3.5771, 0.0168, 4.0024, 0.8439, 7.7730, 2.1434, 2.8129, 3.8067, 7.8381, 1.9901, 6.1544, 2.6817, 4.0911, 7.5528, 2.2493, 0.5377, 2.6389, 4.5988, 3.2298, 5.7798, 5.4434, 1.7305, 2.1617, 5.4004, 7.2926, 1.8614, 6.7161, 7.2172, 3.1651, 5.2892, 2.0585, 3.0470, 6.5042, 7.8929, 1.1255, 1.2988, 5.9452, 5.7947, 6.8527, 6.4343, 5.7142, 0.5612, 1.1138, 5.3785, 5.6724, 4.8722, 0.8660, 4.4052, 0.0135, 5.1945, 6.4140, 4.0675, 5.3186, 3.0254, 2.7941, 1.9402, 0.6813, 2.7352, 1.1252, 3.5199, 2.2801, 7.2856, 6.7221, 2.1678, 0.0391, 4.6473, 1.8350, 0.4371, 5.0850, 6.9103, 6.2220, 7.0976, 4.1340, 5.8276, 6.4610, 1.9791, 0.9432, 4.3095, 1.2942, 5.3925, 3.0251, 2.7679, 4.0508, 0.6036, 4.8952, 1.7848, 3.9096, 6.7056, 4.2389, 4.6254, 4.4231, 2.3356, 0.2591, 2.0363, 1.1162, 4.5860, 3.1065, 1.3293, 7.9924, 5.0760, 0.8457, 3.2631, 0.2359, 2.7428, 5.9054, 1.4624, 3.8489, 7.5852, 5.3549, 6.0910, 5.7557, 3.8465, 2.9873, 3.3404, 1.1709, 7.7748, 1.7475, 0.2109, 2.9876, 3.3494, 7.1245, 1.3340, 5.5080, 0.0795, 4.2490, 6.3699, 2.8494, 7.9664, 6.8770, 6.2192, 7.7448, 1.6055, 0.9968, 6.7531, 1.2465, 6.8320, 0.3396, 3.3617, 5.4439, 4.5580, 7.5291, 1.8995, 6.3578, 0.0403, 0.5496, 6.0476, 0.1002, 5.9846, 5.8649, 3.0592, 6.0559, 2.6429, 7.8888, 7.9452, 3.0836, 5.7451, 3.5164, 5.9283, 6.4699, 0.8393, 3.0084, 5.6993, 1.1784, 7.5987, 3.2800, 4.0476, 0.9129, 2.9370, 4.4373, 2.9106, 4.2156, 6.2867, 1.8115, 6.4921, 6.9717, 3.3863, 4.9551, 3.1524, 0.3055, 6.7122, 4.2969, 5.1442, 4.8775, 5.5834, 5.6328, 1.7072, 3.9470, 0.5082, 0.1115, 7.3718, 4.1695, 5.2832, 7.2107, 2.6508, 5.9667, 7.4088, 1.4076, 5.3262, 6.3696, 1.9804, 5.4875, 6.3736, 0.9532, 6.4464, 7.3933, 6.9106, 0.2099, 1.9311, 6.8524, 1.7080, 4.1915, 2.2115, 6.5992, 0.4220, 5.9984, 5.2296, 6.9529, 7.1176, 5.3425, 3.5352, 1.2206, 1.4656, 5.4881, 3.8128, 2.9047, 2.7943, 1.7712, 3.4971, 0.3828, 7.7223, 0.2833, 0.6136, 5.1819, 5.5757, 6.0072, 0.9813, 3.3780, 5.2669, 5.3239, 0.9808, 0.5813, 6.6196, 7.5722, 2.9870, 0.5196, 2.0498, 0.1570, 4.6320, 6.0750, 2.0635, 3.4512, 7.7721, 2.8387, 7.5713, 0.3607, 3.7396, 5.5312, 6.5018, 0.3652, 6.6801, 2.2517, 5.5978, 6.0159, 3.7115, 1.5526, 7.7804, 0.9527, 3.6316, 1.6732, 0.2305, 2.8505, 3.4708, 6.8051, 0.7815, 3.7061, 5.3687, 7.0889, 4.5525, 6.8481, 6.7939, 0.5670, 6.2827, 4.3100, 5.8500, 6.2007, 6.7204, 4.8182, 2.2157, 7.7776, 2.1466, 6.8580, 7.8335, 1.5115, 6.2870, 6.0090, 0.9370, 3.3406, 4.3186, 4.5220, 7.0316, 5.8677, 7.0854, 4.3907, 3.7132, 0.8309, 5.6933, 7.0892, 3.3165, 5.1852, 1.9043, 3.4032, 0.1908, 5.0516, 1.5057, 4.2248, 1.4028, 2.8127, 7.9300, 6.2050, 0.6300, 0.0700, 0.1479, 2.9304, 3.0889, 0.5872, 0.8372, 7.4964, 5.9124, 3.4568, 1.4544, 0.5305, 6.5592, 7.8093, 7.8409, 6.6911, 3.4716, 3.3054, 3.3063, 0.7264, 7.9346, 5.4549, 5.9970, 6.3715, 2.6216, 6.7955, 5.2016, 6.4226, 7.0629, 4.0604, 0.4440, 4.8834, 7.8235, 2.9386, 0.9376, 3.4506, 6.3732, 3.7730, 3.8931, 7.5894, 3.0985, 0.9802, 3.2944, 3.4284, 0.5360, 5.7373, 4.5340, 1.8933, 1.7944, 0.4681, 6.4589, 5.1156, 3.8268, 4.0006, 4.2565, 6.2372, 2.7311, 3.1995, 3.8008, 4.3433, 2.7409, 5.6866, 4.0862, 2.3128, 4.6795, 6.6476, 3.0124, 2.0767, 7.7306, 3.0619, 2.8165, 6.0356, 5.8679, 6.1132, 4.2252, 1.3073, 1.7349, 0.8732, 0.0208, 4.0357, 5.2817, 6.3851, 7.7760, 3.2320, 3.6282, 3.9111, 3.6131, 5.7517, 5.2847, 1.2512, 0.4070, 3.4997, 1.7704, 0.4570, 3.7636, 4.6528, 0.7756, 0.3306, 2.6894, 2.3475, 1.5157, 6.8776, 6.1848, 4.6976, 5.1047, 2.1151, 6.3749, 1.2792, 1.8871, 6.9527, 7.9413, 7.2512, 2.2036, 3.2636, 0.5127, 0.8955, 2.1096, 1.4193, 6.5684, 7.7937, 6.3584, 4.0316, 5.9827, 5.7670, 0.2094, 4.3899, 3.3098, 5.6968, 6.4040, 6.6810, 6.8069, 7.2712, 2.2196, 4.4418, 4.1129, 4.1298, 5.0485, 4.2178, 3.5100, 2.6255, 1.9978, 1.8902, 1.5697, 1.6580, 7.1195, 3.9995, 4.5848, 2.0055, 1.9816, 6.2892, 5.3120, 3.5627, 4.9165, 4.9314, 3.2266, 2.2456, 0.3155, 1.1973, 6.6960, 7.1974, 7.8876, 0.6790, 5.1901, 4.0800, 2.4502, 3.6472, 2.3664, 1.5271, 7.9404, 0.7322, 6.6335, 1.6473, 0.9860, 0.3117, 7.4844, 0.8678, 7.5056, 5.7322, 2.3514, 7.5476, 4.9884, 4.0933, 0.7269, 0.8956, 4.6474, 1.5530, 6.1800, 0.5085, 4.7961, 3.2457, 3.5155, 3.7981, 3.6017, 7.4373, 1.2980, 1.5482, 1.0600, 3.2295, 7.3480, 5.3142, 5.0408, 6.6000, 4.9906, 1.6860, 0.2116, 3.8778, 7.2449, 0.5396, 4.8058, 0.8240, 0.0751, 3.9478, 4.7879, 1.4228, 5.4882, 0.2192, 4.1244, 5.5329, 5.5983, 3.2214, 4.5773, 5.6059, 5.0899, 6.8240, 6.9362, 0.6401, 2.1440, 4.0532, 7.7942, 7.1678, 5.7578, 7.0516, 4.4180, 7.1044, 0.0886, 0.4627, 6.3466, 4.7462, 4.3352, 4.1152, 0.4257, 6.2224, 4.6126, 1.0174, 3.7135, 4.6848, 2.5784, 0.8428, 0.5714, 3.9852, 3.4267, 2.8688, 4.0784, 0.8592, 3.5237, 0.9212, 3.9487, 1.7915, 7.7321, 5.1531, 6.6191, 0.7316, 6.5277, 1.2832, 5.4349, 6.2688, 4.8844, 3.6214, 6.5244, 2.2950, 0.0271, 6.4374, 7.5757, 5.5596, 7.1691, 2.2968, 4.0524, 4.5606, 3.9039, 5.0715, 0.6404, 5.2943, 5.7230, 2.9919, 3.0817, 4.8053, 0.0702, 7.6444, 0.3840, 1.4480, 4.4019, 7.5460, 5.0501, 3.0444, 7.5816, 4.7265, 5.4971, 6.8844, 5.5716, 3.0250, 6.5174, 0.9736, 5.7780, 3.2687, 4.9425, 7.3985, 2.3882, 3.4731, 1.4396, 1.1541, 2.7753, 1.9140, 0.2486, 5.8933, 4.6436, 7.8430, 2.1862, 1.4000, 1.9984, 7.1888, 1.3069, 0.4312, 7.1376, 3.0671, 1.4546, 0.0643, 1.2653, 1.6619, 0.8855, 6.2084, 5.6365, 7.3094, 1.2250, 2.3739, 4.7128, 1.5459, 6.6852, 6.7652, 5.0675, 1.0425, 4.1265, 5.8870, 6.2976, 5.0512, 1.7441, 2.9892, 1.3376, 1.7586, 4.1745, 6.8168, 3.2180, 0.1740, 1.4241, 1.2775, 6.7183, 7.5628, 1.7011, 4.9116, 6.4898, 4.1040, 1.8114, 3.1289, 7.0421, 0.7790, 3.4064, 2.5556, 6.1012, 2.8115, 3.2418, 7.0661, 4.1784, 4.9727, 1.5499, 2.7841, 7.0844, 5.1843, 0.6177, 2.7598, 1.8480, 3.6956, 0.7300, 2.6673, 3.7471, 4.2724, 4.5122, 4.5576, 3.0150, 5.4311, 4.9313, 0.4104, 4.2783, 5.8470, 3.3074, 4.0537, 1.8878, 4.6456, 3.7861, 7.8636, 1.2529, 1.0517, 0.0420, 7.6322, 4.5326, 7.6427, 3.8228, 6.5692, 6.5533, 3.5930, 4.3951, 0.1113, 2.5858, 4.4100, 3.5411, 1.1585, 0.2530, 1.0156, 3.2488, 2.7407, 4.2788, 0.5479, 2.4296, 6.7146, 5.7323, 4.6024, 7.8316, 7.5619, 1.5935, 2.4843, 0.4568, 6.8464, 6.6623, 0.8546, 2.5466, 0.0770, 5.8320, 6.0196, 3.0724, 6.2360, 5.4642, 4.6978, 7.0254, 3.5436, 2.3212, 2.0339, 6.2137, 1.9010, 4.2153, 5.1460, 3.0263, 1.7688, 0.6675, 5.1241, 3.7260, 7.9100, 3.9933, 1.8725, 7.6304, 0.8364, 0.2606, 4.4592, 0.1478, 1.5390, 7.2755, 7.8816, 0.3970, 3.9410, 0.3747, 2.2095, 0.8265, 3.0261, 5.5732, 5.9403, 1.2024, 4.4664, 5.3268, 1.4489, 1.0366, 5.2972, 3.3884, 7.0154, 0.5692, 7.5780, 1.1828, 5.7320, 0.6131, 0.7792, 3.5204, 7.3519, 6.6202, 2.7583, 6.4415, 1.2561, 7.9140, 5.6135, 6.9794, 2.0812, 2.1613, 1.2351, 6.4941, 0.0893, 1.5571, 3.4398, 1.1419, 3.9932, 1.2848, 6.6665, 4.3531, 7.0179, 6.9705, 5.6588, 5.2411, 3.3844, 5.1352, 0.2374, 5.5325, 7.5739, 2.9816, 4.8632, 7.7078, 6.2779, 3.6306, 5.5715, 5.5609, 2.5642, 0.4660, 1.0955, 4.0501, 1.2886, 5.5248, 2.6402, 2.6927, 2.4428, 6.1059, 0.5784, 5.3071, 7.7654, 0.1398, 7.1430, 5.4404, 5.6832, 0.8066, 6.9453, 3.4922, 1.1743, 6.4590, 7.7873, 0.1058, 0.3030, 7.3966, 3.8639, 7.9936, 2.3294, 1.4681, 5.3660, 3.2701, 1.6819, 1.5668, 4.2687, 3.4591, 3.4478, 1.8106, 5.8441, 3.2589, 2.0522, 3.5681, 3.9700, 1.2129, 0.3085, 7.3169, 2.9600, 7.6256, 4.7823, 2.0302, 1.4492, 4.7068, 0.8462, 0.1223, 2.1721, 7.6461, 6.5553, 5.2146, 0.8741, 2.6018, 2.8932, 4.9620, 0.2465, 0.6898, 4.9888, 1.6585, 1.0420, 4.7367, 5.7583, 4.9487, 0.2637, 6.1383, 7.8180, 4.0736, 0.4604, 6.0201, 5.2444, 5.2332, 4.7045, 5.2928, 3.9729, 4.0260, 7.4251, 4.1818, 3.8872, 0.9386, 5.8599, 0.2993, 5.5028, 5.5601, 4.7856, 1.7134, 7.6623, 0.2676, 5.6877, 2.7959, 5.4392, 2.7287, 5.8535, 2.8032, 2.9056, 2.7022, 6.6596, 3.5421, 3.6096, 2.7424, 4.0280, 4.1623, 0.1676, 0.0453, 6.9936, 5.6168, 7.9256, 1.3819, 1.0451, 0.7190, 5.8601, 0.0104, 6.1644, 3.1956, 0.6067, 2.8216, 7.5793, 7.1241, 3.3788, 1.0497, 2.8850, 0.5654, 4.3624, 1.3591, 7.6616, 1.9276, 4.9137, 3.1928, 2.4951, 2.9328, 7.4179, 5.3182, 0.4453, 3.5468, 2.7592, 6.5060, 2.6552, 6.9558, 1.1028, 3.0776, 5.1248, 5.5996, 5.4986, 5.9985, 3.9416, 1.2562, 1.6786, 6.5179, 7.0796, 1.5700, 7.8717, 2.7927, 2.8088, 1.4063, 5.3317, 1.1527, 6.4804, 3.2028, 2.9964, 5.5620, 6.0488, 4.6355, 1.5936, 5.3192, 3.4897, 4.3110, 6.1932, 6.0732, 2.7440, 5.6343, 1.4294, 0.1187, 6.0956, 2.0381, 4.5267, 4.2186, 5.4524, 7.7741, 6.5113, 4.2937, 7.3742, 7.2386, 1.6456, 6.9349, 2.5562, 7.5613, 5.9472, 2.0284, 3.8084, 0.4348, 6.9229, 1.6288, 1.7309, 0.6171, 7.9146, 4.2163, 3.5114, 3.2560, 1.8382, 6.5124, 1.2643, 1.5414, 6.7862, 2.5368, 4.4612, 4.8966, 2.3636, 2.2112, 7.2992, 3.8417, 6.6261, 2.8401, 2.8120, 6.0296, 0.0978, 3.6860, 7.5106, 2.5674, 1.4554, 3.7699, 2.9935, 0.0823, 7.9709, 3.8799, 2.3054, 4.0924, 3.1647, 1.5809, 2.8887, 2.6860, 3.2928, 1.7406, 5.9732, 2.4505, 1.8119, 3.1138, 5.7260, 1.1256, 5.8197, 5.2087, 0.7369, 0.5880, 7.8405, 1.6615, 5.7778, 6.7488, 0.0406, 6.6624, 7.5600, 2.8203, 4.8975, 6.2162, 6.6631, 6.0950, 7.3505, 6.5559, 3.4929, 7.8035, 2.1217, 6.6358, 3.8950, 4.5984, 3.4265, 7.0713, 0.4242, 2.8799, 5.9544, 3.1791, 0.5796, 0.7114, 7.9937, 7.3427, 3.0114, 0.4344, 5.7943, 5.4530, 7.5850, 3.5171, 1.7315, 3.1985, 5.6312, 5.8462, 2.0189, 5.5802, 7.9391, 2.7738, 7.3595, 2.6412, 2.4777, 7.3926, 1.3998, 1.6581, 0.7601, 3.6389, 2.2628, 6.8494, 6.1762, 7.3664, 7.3090, 6.4709, 3.5236, 5.6152, 2.2372, 4.2022, 1.3482, 7.5580, 5.4372, 7.9124, 5.7856, 0.5493, 7.8592, 0.0003, 3.7630, 2.7376, 6.6437, 3.3977, 5.4696, 2.9103, 6.9851, 2.6733, 2.4877, 3.7560, 5.1967, 3.7407, 0.8209, 1.3413, 4.4404, 4.5851, 0.9396, 5.1186, 3.0136, 0.2594, 4.4600, 1.7168, 0.0230, 4.5769, 5.4060, 0.1956, 5.8040, 4.0612, 2.5044, 3.5942, 2.9788, 7.4606, 6.1101, 1.1356, 5.7994, 0.5605, 3.9173, 1.3984, 2.1785, 5.8403, 1.9752, 4.3809, 4.7359, 1.7752, 2.9864, 4.9641, 5.3864, 5.1568, 3.8525, 5.2131, 7.1778, 1.9884, 5.3202, 0.9122, 2.4268, 0.8039, 4.2736, 5.9168, 7.0428, 6.5447, 3.8757, 5.2284, 2.7284, 1.8854, 0.1175, 2.7099, 1.4092, 3.8296, 3.0504, 1.4479, 5.6361, 7.7412, 5.9224, 1.6644, 5.0071, 6.8156, 4.8117, 1.9790, 6.0443, 4.7860, 2.8525, 5.5216, 6.6048, 3.4260, 2.6264, 5.8510, 2.2282, 2.3023, 3.3563, 1.8905, 7.9651, 4.1462, 7.9525, 3.4407, 4.8940, 4.9267, 0.6200, 0.3477, 1.7002, 0.5388, 0.4384, 7.4676, 1.7018, 5.1549, 1.8924, 1.6215, 0.4112, 6.5826, 6.7929, 1.4539, 0.8228, 5.8972, 2.0392, 6.8592, 1.9174, 0.3629, 4.1874, 1.1290, 3.7787, 6.7928, 2.1441, 1.2394, 2.8316, 6.8386, 6.2879, 3.4252, 1.5986, 6.2727, 0.0804, 0.2527, 7.3688, 4.1284, 7.7710, 4.3361, 7.3705, 3.8798, 2.7643, 2.1535, 0.0364, 7.4192, 5.2725, 1.2628, 4.7154, 3.1564, 4.4551, 4.5912, 7.5755, 5.7539, 3.9844, 0.8710, 3.3868, 6.7852, 2.0126, 7.0056, 0.8878, 1.1188, 2.4688, 7.4196, 4.4544, 1.2120, 3.0751, 1.1597, 7.6120, 5.9864, 6.6007, 2.6419, 1.8107, 4.0478, 3.0652, 3.7436, 5.4529, 0.1240, 5.3901, 4.5894, 5.5705, 7.8256, 4.3700, 1.4184, 5.9840, 2.9199, 0.8535, 6.7699, 4.7099, 4.8912, 5.4072, 5.6702, 6.5161, 4.2309, 0.7975, 2.0056, 7.5519, 2.3820, 7.0167, 2.1292, 3.3576, 3.4461, 1.4584, 6.9750, 1.0493, 1.5861, 4.0232, 2.4948, 5.5469, 0.7876, 1.3752, 6.3065, 2.4406, 2.7712, 6.5233, 0.1944, 1.0507, 6.7493, 4.2182, 6.8538, 7.6358, 0.3384, 6.9394, 3.2426, 2.8522, 1.2423, 3.6907, 7.5703, 7.4056, 7.2940, 0.7957, 2.4485, 5.8173, 5.4070, 6.2753, 1.3853, 2.1769, 5.7423, 2.7298, 2.0171, 1.9695, 2.0358, 3.7492, 3.1535, 0.0276, 6.6344, 4.1386, 4.6634, 1.8813, 5.6577, 6.3679, 5.9676, 3.4846, 2.8089, 0.6007, 7.9878, 0.9812, 0.9838, 6.3666, 4.4728, 6.8852, 5.0772, 1.6172, 7.9393, 2.7908, 1.1378, 5.3708, 5.0307, 7.5416, 5.5613, 5.9576, 1.0014, 3.9787, 6.7173, 5.0568, 7.6809, 7.8064, 3.9068, 2.0755, 6.7110, 2.7462, 2.1123, 4.9355, 5.2737, 4.0137, 3.9383, 4.5820, 6.1357, 2.8482, 5.2377, 4.2860, 5.8029, 4.4803, 6.3148, 2.1764, 4.8553, 7.3419, 3.6165, 7.2138, 7.7585, 3.0824, 0.9940, 5.5898, 2.2074, 6.4624, 2.9745, 6.2968, 2.0700, 6.8808, 1.7941, 0.2901, 4.0544, 7.6464, 6.0122, 2.2467, 2.0405, 7.7621, 1.4460, 5.7880, 0.6368, 7.3290, 6.8307, 3.5271, 4.2772, 3.9419, 7.5941, 4.4684, 2.7075, 4.8317, 3.4264, 3.8381, 3.5597, 2.9476, 0.6415, 4.7784, 7.3995, 5.8302, 1.9372, 2.0497, 1.4327, 5.9356, 0.0454, 2.9465, 0.6398, 3.8164, 7.9129, 0.6892, 4.7464, 5.2448, 2.7056, 0.5863, 2.8724, 0.3073, 4.1522, 5.2935, 0.0650, 7.6061, 4.2099, 3.0565, 2.3408, 3.6673, 4.1345, 1.1464, 4.3829, 3.1696, 0.6114, 0.4890, 5.9361, 6.9619, 3.9368, 3.2793, 4.0140, 7.8008, 3.6531, 5.9612, 6.5379, 2.9956, 0.3851, 7.6139, 5.8234, 5.1814, 0.9200, 2.4507, 5.3081, 2.2586, 0.1657, 7.4104, 0.8970, 7.5361, 4.9089, 3.1366, 3.5161, 6.3756, 5.7388, 6.9178, 2.2864, 1.8716, 4.0091, 4.6068, 4.4259, 6.1990, 7.2682, 2.3087, 3.2176, 7.4840, 3.6445, 6.4881, 1.3924, 0.7608, 5.2082, 0.5724, 4.6864, 6.2444, 4.6386, 3.7386, 6.2756, 3.5312, 5.7663, 1.5500, 4.8924, 5.4286, 5.3364, 0.8403, 4.5592, 0.1864, 7.6218, 3.2149, 5.1911, 5.0268, 4.1692, 2.6843, 7.0269, 0.4423, 1.8108, 3.9479, 6.0423, 6.8393, 5.6504, 3.9931, 4.5585, 4.4643, 4.9065, 0.7049, 1.5012, 4.2644, 1.5496, 6.8888, 2.7308, 2.4809, 4.0921, 5.1719, 1.1866, 0.8639, 5.0032, 4.4627, 5.9736, 0.2868, 3.9260, 5.8158, 5.8168, 4.2342, 3.1159, 6.1236, 1.4337, 4.6292, 2.0753, 1.0373, 6.7922, 5.8253, 5.5822, 4.0788, 1.8056, 2.0349, 4.6207, 4.0504, 6.1486, 5.7542, 3.9050, 7.7202, 3.2396, 0.4032, 3.4248, 7.6500, 4.9686, 5.1405, 6.9278, 5.6114, 3.0264, 0.3984, 4.6197, 0.1912, 1.4431, 0.8957, 6.6813, 1.9286, 6.6673, 3.5774, 5.1796, 3.1217, 7.1936, 5.3782, 5.1027, 2.0240, 0.9792, 1.8939, 1.6047, 1.3048, 6.0265, 3.9621, 1.6524, 5.5636, 6.1810, 1.2432, 7.1876, 6.3248, 3.9164, 1.8219, 5.3853, 7.5647, 7.6268, 4.7000, 0.5441, 6.1475, 1.9951, 1.4247, 7.0873, 0.2922, 2.3995, 7.6350, 1.3284, 3.1143, 0.1547, 3.5632, 7.2064, 1.6568, 1.9014, 5.6205, 0.0322, 2.4417, 5.4918, 5.1612, 6.0014, 0.8912, 7.0621, 7.6252, 7.5627, 6.9460, 2.8592, 0.6897, 1.0504, 7.2889, 3.0600, 2.7120, 0.5046, 7.3220, 5.4640, 5.5222, 0.6494, 6.8421, 4.6765, 6.9793, 2.7071, 6.1704, 1.4767, 4.1537, 2.8633, 3.4196, 5.6863, 4.9496, 4.5446, 5.2692, 4.2790, 2.8340, 7.9485, 7.0699, 3.9996, 7.3593, 2.4253, 6.5293, 3.0087, 2.6849, 4.4742, 3.1788, 7.9521, 3.3204, 6.6183, 2.3399, 1.2154, 1.7453, 4.6260, 4.4965, 0.1042, 2.4434, 7.1744, 7.2045, 2.9666, 2.5791, 4.0076, 6.1331, 3.4464, 4.5948, 4.0951, 4.9433, 0.0324, 3.3398, 5.8008, 4.9203, 7.2724, 4.0409, 3.2651, 3.8480, 0.0484, 5.0943, 0.6170, 3.4192, 6.8056, 2.0832, 3.5068, 1.6150, 6.0716, 6.9012, 1.3739, 1.2826, 4.9004, 6.8000, 7.6853, 6.0340, 2.3534, 0.1220, 7.2079, 4.9584, 6.7264, 7.5020, 5.5217, 1.4604, 2.8378, 4.7716, 5.0262, 1.5672, 4.3180, 3.8678, 3.3605, 7.9417, 2.9158, 7.9340, 2.0340, 3.5983, 6.3616, 6.0964, 0.3114, 0.3026, 6.2492, 5.3594, 1.9116, 5.2824, 1.4683, 6.5400, 4.2813, 0.4452, 7.7830, 1.2396, 6.8443, 3.2107, 6.3037, 3.5480, 2.0157, 4.3350, 7.4864, 2.8464, 2.8098, 1.2117, 6.5657, 1.8822, 7.3008, 0.6879, 2.0771, 6.0095, 2.8553, 7.4051, 4.7168, 4.2592, 0.4292, 0.6126, 2.3861, 2.3537, 5.0212, 3.1492, 5.8610, 7.6899, 2.3293, 2.2829, 5.3376, 5.3478, 6.8655, 0.2162, 4.4271, 6.0899, 0.9206, 0.1198, 4.9315, 7.8858, 7.5483, 1.1489, 6.1238, 0.5294, 1.4813, 1.6278, 4.3821, 1.6240, 6.7827, 1.0353, 3.8899, 0.3500, 2.0300, 6.1904, 1.0499, 0.3394, 2.7124, 3.3000, 5.5317, 3.6761, 7.1048, 4.5927, 6.4726, 3.1944, 2.4740, 1.2017, 6.3927, 0.6208, 7.5204, 6.1881, 2.2218, 2.5263, 7.1372, 4.8225, 7.1692, 2.3510, 4.2802, 1.1043, 3.7390, 0.7304, 4.3601, 3.5931, 7.5353, 7.2957, 2.9767, 5.3341, 0.8017, 3.2016, 6.7276, 6.9777, 2.8130, 5.1062, 2.9246, 0.9332, 4.8235, 3.5824, 1.2688, 5.4352, 6.6068, 4.6639, 1.8017, 3.0431, 5.3779, 4.0982, 1.3454, 5.2676, 7.2792, 4.0175, 4.4946, 6.0054, 4.2084, 1.8181, 7.5213, 5.0520, 2.9823, 4.6836, 6.8016, 2.0463, 5.7140, 4.1208, 7.3185, 2.7798, 4.8294, 7.4502, 1.7063, 3.0070, 4.5316, 0.0520, 1.6952, 5.8612, 4.0217, 7.1985, 3.7540, 4.0776, 1.1192, 7.8436, 1.7444, 2.5945, 0.9584, 5.5321, 7.8254, 0.1004, 3.7921, 1.5263, 6.8677, 5.3311, 2.8296, 7.1074, 2.0986, 2.6732, 7.6262, 4.2204, 2.2756, 7.1236, 1.2690, 4.3861, 5.4018, 2.2406, 0.7696, 7.4102, 6.3661, 6.2366, 3.0556, 2.7262, 5.5645, 4.8249, 3.8749, 4.7484, 0.4524, 1.0804, 5.8951, 3.8054, 6.9082, 4.0896, 7.2576, 7.3629, 7.1357, 7.7601, 6.3194, 7.9785, 2.5513, 1.7370, 2.0706, 7.8665, 4.3271, 7.9135, 2.4460, 5.2732, 3.9885, 5.5443, 6.4886, 2.7246, 5.3664, 6.5766, 3.4920, 5.6107, 5.2112, 2.5096, 0.9401, 3.8308, 2.1528, 1.2316, 7.0004, 6.4827, 6.7469, 1.3339, 7.2969, 3.2044, 5.8382, 4.0206, 1.7249, 2.5034, 1.5890, 7.8284, 0.1194, 3.2644, 7.4317, 5.4868, 6.5058, 0.1463, 4.4726, 6.0867, 6.3520, 6.2250, 6.8178, 1.5096, 3.9579, 2.2844, 5.0935, 3.0820, 4.9636, 7.6680, 2.7229, 5.4436, 1.1896, 2.7772, 4.8352, 5.9679, 0.5101, 6.0914, 7.6836, 0.3082, 0.0993, 5.7367, 3.4180, 7.5529, 6.5770, 0.6456, 6.2946, 2.6379, 1.1872, 1.5280, 2.4988, 5.3295, 4.0584, 0.5794, 6.3340, 3.3328, 7.0150, 7.2260, 0.2061, 2.7508, 2.1746, 0.9313, 4.2330, 6.0403, 6.2277, 5.1544, 5.4484, 7.7688, 6.0588, 1.4072, 5.9450, 1.0036, 1.3423, 7.1967, 4.5783, 0.9832, 4.2449, 1.4932, 2.2740, 7.0440, 4.3693, 0.0287, 3.8108, 1.7572, 0.4753, 3.9186, 1.6014, 7.7907, 3.4280, 0.1408, 3.9595, 0.6570, 4.3828, 0.4600, 3.8822, 3.5338, 7.5534, 1.3548, 0.7823, 1.8820, 0.7998, 3.7596, 2.4024, 2.6655, 4.9927, 4.2463, 2.5968, 1.7379, 6.7904, 1.3966, 0.4124, 7.6630, 6.3734, 3.5520, 1.6092, 0.3022, 5.6646, 5.2839, 5.8364, 0.3578, 2.6922, 2.1705, 1.4426, 5.6013, 1.4762, 6.3377, 3.2744, 4.7379, 1.8678, 4.1687, 7.1194, 0.8571, 5.8708, 5.3992, 4.3256, 4.2168, 3.7763, 3.8880, 4.3618, 0.0672, 5.7632, 0.3002, 6.5052, 0.0504, 2.8846, 7.7085, 0.2205, 3.1650, 1.4373, 6.1084, 1.1532, 1.1208, 1.9914, 2.6281, 7.8072, 6.3820, 3.1872, 0.9939, 7.7148, 5.7941, 7.2385, 7.5980, 4.6579, 3.7098, 5.4407, 1.2773, 5.2512, 2.6825, 2.3091, 0.3377, 2.5833, 5.4111, 0.2968, 6.1221, 5.4761, 7.5224, 5.3903, 2.2208, 7.4740, 7.3060, 7.2052, 2.6451, 0.1396, 4.8390, 1.2359, 4.1368, 4.8570, 0.2506, 2.5834, 4.1301, 0.1262, 0.4260, 7.4439, 0.2904, 7.6924, 2.0426, 7.3332, 5.8412, 6.4320, 1.5062, 5.0443, 4.4249, 1.7170, 2.8302, 6.5743, 6.0020, 0.9301, 2.2932, 2.7366, 1.2860, 7.4613, 7.6768, 3.6342, 4.4093, 1.3877, 2.6585, 3.1319, 1.1865, 0.5823, 7.9204, 6.3854, 4.6781, 0.3309, 1.0952, 5.3309, 1.9358, 0.1684, 2.1416, 2.4757, 7.1088, 5.4927, 4.6518, 4.0435, 7.0188, 3.1385, 1.8825, 1.0496, 3.2193, 7.0709, 6.0379, 0.9240, 5.7617, 2.6920, 5.8512, 6.1840, 5.1698, 3.2845, 0.8031, 7.3172, 6.6363, 0.7935, 2.5864, 6.0428, 4.8528, 3.7071, 2.9619, 2.5380, 6.1559, 7.1083, 5.0317, 2.7748, 3.5146, 2.7964, 4.6308, 0.9002, 5.3279, 6.1255, 0.8472, 5.3148, 7.0825, 7.9357, 4.8257, 2.8297, 5.5629, 6.1675, 6.5979, 6.9849, 4.4818, 4.4768, 4.7516, 2.3960, 6.0862, 4.7608, 1.1310, 2.2350, 3.1238, 4.1688, 4.9603, 0.9575, 6.6520, 7.6040, 1.9881, 0.5632, 5.8827, 1.4833, 6.5698, 4.0560, 2.5020, 1.5994, 6.8177, 6.5284, 2.9102, 6.9980, 1.1830, 4.8076, 0.3545, 2.7290, 0.0571, 7.5345, 6.6617, 4.6322, 0.7402, 4.6817, 3.4043, 3.9594, 1.4272, 2.4865, 2.5737, 6.3326, 0.4691, 5.6972, 4.7343, 5.0556, 6.0916, 5.8598, 5.0504, 6.4592, 4.4832, 5.1598, 6.6964, 3.1884, 0.0291, 7.2883, 5.9655, 0.8519, 6.8570, 2.7185, 7.7351, 1.1500, 6.4267, 0.4657, 4.5880, 5.4288, 2.9416, 1.8688, 3.6991, 0.9546, 6.8690, 0.5426, 4.0960, 1.1815, 1.2744, 2.0969, 7.6053, 7.3604, 0.4116, 5.9132, 6.5723, 3.2349, 1.3856, 4.8715, 1.5612, 0.8263, 3.3532, 6.8239, 2.7074, 4.0883, 3.4278, 1.5196, 3.2520, 0.6859, 6.6700, 6.2987, 2.4841, 5.9218, 7.6090, 4.4496, 5.1808, 1.9064, 3.9112, 0.6860, 2.7223, 6.5742, 7.1790, 2.9472, 6.9500, 4.5088, 3.8192, 4.2003, 7.9333, 2.1396, 5.6811, 4.5513, 7.0618, 2.6269, 7.1989, 7.4679, 2.2428, 5.1820, 7.7005, 3.9064, 7.3452, 7.5171, 0.4560, 6.4400, 5.9337, 6.8750, 5.6389, 3.7725, 1.4323, 3.1021, 3.6746, 0.9937, 0.4320, 7.7663, 0.8790, 7.0928, 3.4899, 6.5375, 5.9182, 1.6586, 4.8546, 6.5207, 7.3348, 5.7031, 1.0460, 7.2627, 2.7618, 4.1611, 2.3737, 1.2774, 4.2493, 1.8270, 5.7838, 1.0456, 4.2134, 1.2939, 4.5148, 7.1324, 5.7677, 4.6272, 7.7275, 3.9755, 3.3914, 3.9246, 7.1057, 4.6636, 1.7108, 7.4684, 7.5156, 2.4133, 3.9747, 5.4692, 7.2500, 0.2160, 0.0356, 0.7669, 1.2623, 0.1509, 2.9847, 0.7280, 4.6930, 1.0596, 5.0330, 3.8056, 7.3388, 7.8156, 0.8518, 6.7404, 7.0587, 1.2660, 0.6463, 4.2668, 4.5852, 3.4620, 5.1075, 4.3783, 2.2836, 1.6196, 4.2335, 6.9176, 5.5730, 0.1339, 4.5934, 5.4185, 5.6184, 4.4680, 6.5755, 3.4263, 4.2977, 5.4827, 0.0514, 4.2093, 5.3553, 5.2968, 4.2514, 4.7101, 1.3444, 5.5442, 2.1363, 6.1049, 2.2435, 1.7814, 1.1423, 7.2030, 5.5364, 5.8632, 6.8634, 2.3935, 0.8542, 3.6173, 4.6510, 6.5492, 4.5937, 1.6040, 5.8948, 3.3574, 1.7154, 3.8808, 2.7195, 3.4320, 0.0602, 4.3712, 4.3571, 1.5396, 2.2619, 0.5818, 4.1581, 2.5123, 5.2504, 5.4604, 4.3487, 6.5473, 0.5606, 3.3631, 4.8506, 4.0254, 3.4151, 3.1146, 1.8311, 3.8729, 4.9409, 1.7062, 1.4865, 7.1809, 6.2944, 1.7335, 7.9883, 1.9850, 4.4996, 3.6849, 3.5357, 4.9622, 2.3760, 4.5230, 0.8605, 5.4719, 6.1397, 3.2204, 1.6116, 3.0864, 3.8170, 0.9960, 4.8971, 7.7912, 4.7896, 4.5577, 6.7300, 3.2593, 3.7935, 1.3585, 0.1245, 7.5413, 3.8306, 0.4552, 0.0538, 1.9715, 1.6772, 1.6351, 7.2785, 2.5866, 2.8311, 4.2192, 3.1583, 5.6795, 5.9410, 2.4647, 4.8104, 2.7300, 3.1256, 2.8510, 4.5415, 5.0774, 1.3333, 5.2235, 6.5312, 6.6076, 6.0737, 3.3892, 1.8212, 1.8860, 0.1053, 1.4626, 2.1094, 5.5013, 0.8821, 0.2976, 7.9821, 3.1656, 4.1525, 2.3285, 7.7523, 0.6996, 5.1315, 4.0843, 1.9841, 5.3419, 1.6515, 3.4273, 4.5070, 0.8962, 3.0555, 2.5780, 7.1061, 2.2690, 4.9275, 4.5331, 2.0440, 6.3469, 5.8514, 6.9993, 5.2702, 0.9980, 2.0235, 4.1428, 0.3001, 5.4952, 6.0387, 1.3249, 2.7212, 4.1365, 1.1625, 2.7249, 1.4437, 6.8682, 7.4887, 5.5051, 3.8510, 4.3480, 4.3165, 6.8737, 1.0815, 4.3678, 6.5860, 4.0727, 0.0400, 3.3659, 3.2595, 2.3836, 5.9629, 3.5148, 5.9922, 0.1072, 0.1588, 7.9921, 6.7160, 7.4170, 3.8764, 1.8334, 3.3906, 0.0885, 5.8452, 2.1636, 6.8061, 7.7225, 0.2035, 2.9194, 0.8399, 1.6652, 4.1918, 1.5178, 4.0528, 0.5615, 7.5448, 0.4127, 5.4886, 7.8538, 6.3827, 4.6772, 5.6436, 7.1677, 2.3386, 0.8260, 0.2912, 3.5498, 1.2912, 6.2406, 5.7556, 2.2276, 0.1966, 2.4085, 5.5288, 2.4824, 7.9174, 3.8171, 1.4795, 2.0676, 4.3142, 1.5456, 1.2216, 0.7135, 2.3980, 4.9849, 7.9044, 0.8296, 0.5207, 7.0883, 1.4963, 1.0683, 1.9897, 4.8332, 4.1529, 6.9631, 5.8810, 0.3916, 5.8478, 6.2304, 3.0212, 2.3379, 7.2156, 0.8064, 4.6384, 1.6468, 6.6627, 7.9084, 0.0042, 3.7201, 7.3182, 1.5161, 2.1384, 4.4608, 3.5174, 0.2342, 6.5810, 5.3829, 2.2315, 3.7500, 0.3269, 7.6553, 7.5828, 7.3444, 3.3552, 3.6777, 2.3572, 4.0903, 4.5346, 5.7379, 5.2459, 7.5378, 2.9512, 3.5756, 0.7406, 2.5838, 1.2312, 5.6181, 2.9354, 4.2509, 0.9223, 2.9912, 0.0944, 0.1560, 5.8371, 6.4142, 6.1613, 5.0689, 3.8152, 1.9926, 3.4156, 6.5896, 2.4240, 6.9735, 5.6428, 7.6901, 7.3104, 6.4540, 4.6294, 1.5793, 4.5506, 4.1303, 1.6820, 7.9814, 1.4077, 2.8001, 5.4222, 5.5610, 5.7584, 2.6586, 4.7650, 1.3840, 7.5297, 0.7446, 3.1875, 7.7432, 6.6100, 0.7174, 5.8997, 3.1736, 2.9016, 0.5374, 4.7105, 7.6407, 4.0536, 7.6376, 1.0905, 0.2840, 5.1635, 2.7569, 5.2616, 4.2994, 2.5840, 3.2724, 5.7126, 6.9337, 5.5030, 7.1508, 7.9870, 2.0602, 3.9207, 2.4458, 3.9667, 4.2804, 3.5810, 6.1906, 1.4048, 1.9584, 6.2340, 4.4084, 4.8732, 1.8956, 5.7264, 2.6648, 3.3152, 4.6036, 1.0902, 2.2536, 3.1628, 2.1989, 4.9455, 1.7176, 4.4129, 3.5320, 7.3729, 5.2418, 0.3620, 1.9532, 3.7846, 1.9733, 3.7221, 0.6966, 6.1496, 1.9655, 6.2151, 5.0300, 5.7417, 7.4796, 3.9840, 1.9589, 5.9005, 5.9305, 7.9374, 4.2528, 3.5914, 4.1968, 1.8266, 7.6412, 1.9665, 6.8915, 0.8135, 5.5877, 0.2745, 7.9601, 0.3068, 1.3471, 2.2064, 6.4961, 5.0453, 3.7650, 7.9151, 5.2096, 2.8304, 3.9336, 3.8812, 4.8537, 3.6113, 7.2700, 3.2784, 6.9723, 6.1910, 0.1552, 6.9272, 7.2642, 2.4186, 6.1441, 0.8588, 1.1788, 1.2222, 7.8186, 3.4581, 1.2916, 2.8182, 6.1574, 3.8871, 3.7977, 2.6140, 1.9861, 4.7230, 7.8147, 6.6136, 6.3873, 3.4482, 4.1793, 0.1397, 6.9580, 7.1183, 2.3403, 5.4508, 1.4998, 5.4285, 2.8570, 6.3617, 7.3723, 1.6200, 5.5896, 4.6789, 2.5356, 7.0911, 0.1529, 1.2095, 1.0248, 1.3509, 1.6330, 1.9362, 1.1312, 3.3051, 4.9321, 1.6252, 4.1629, 2.4539, 5.3791, 5.8192, 5.8724, 3.4044, 3.6931, 5.4241, 7.0465, 1.9163, 7.9292, 3.5947, 1.2192, 7.4588, 2.8788, 6.8505, 5.0768, 3.2896, 2.1756, 5.3665, 6.3532, 1.8919, 1.1996, 4.2539, 0.5428, 0.9665, 0.4028, 7.6996, 7.1792, 2.0183, 3.1711, 5.9500, 1.5827, 5.3158, 2.6820, 2.2508, 3.5752, 3.6609, 4.6611, 6.3318, 6.4485, 1.0063, 3.8421, 0.3196, 3.2020, 7.8220, 2.3505, 1.2167, 4.7344, 4.5054, 7.4748, 4.9821, 2.1777, 6.2208, 3.5859, 6.0067, 2.6844, 4.7124, 4.9209, 5.7664, 7.8364, 2.5258, 2.8288, 3.2586, 2.9701, 5.1701, 0.4489, 4.5388, 6.2379, 1.3680, 2.1237, 2.5378, 0.9164, 1.9755, 4.0426, 1.8324, 1.0027, 3.0948, 1.0468, 1.5243, 7.2206, 0.0510, 1.0305, 3.5628, 1.4737, 0.1853, 3.5473, 4.5294, 1.1599, 2.7775, 7.8900, 7.4933, 2.2355, 0.5212, 5.8044, 5.6460, 0.3350, 4.1814, 0.3732, 6.2152, 2.5822, 6.1660, 6.7159, 7.9330, 0.9464, 5.5492, 5.8125, 2.6157, 6.4888, 4.4236, 5.5918, 1.7521, 2.9196, 3.2045, 7.1368, 2.8960, 1.2711, 0.0976, 4.9639, 2.8921, 1.6796, 7.0382, 0.8880, 3.7657, 5.3580, 2.9501, 7.9341, 0.1719, 5.9564, 4.4323, 7.7297, 7.8618, 0.5513, 7.6882, 3.4774, 6.4038, 2.1198, 2.8594, 5.8616, 4.5750, 0.4444, 2.8722, 4.9792, 2.7662, 6.9091, 5.5867, 4.9246, 3.7048, 6.9420, 6.8867, 2.4872, 5.4232, 2.8698, 7.1892, 3.5972, 5.2108, 6.8608, 6.3268, 1.8676, 7.3810, 6.0234, 3.0168, 3.8884, 3.0662, 4.5917, 6.2197, 1.8657, 4.4198, 1.6094, 2.7340, 7.2147, 6.2322, 7.2499, 1.5680, 5.1533, 6.9677, 1.5615, 6.7645, 3.5572, 7.2377, 7.8604, 6.8528, 3.8746, 0.5132, 3.4685, 2.8645, 5.3572, 2.5327, 4.9444, 6.8969, 4.9103, 6.2994, 6.7324, 4.9048, 3.4144, 2.7852, 6.5362, 4.8901, 5.7574, 4.6095, 7.5315, 0.1582, 5.8420, 6.5048, 6.7459, 1.4549, 0.5182, 2.3184, 0.4079, 3.9272, 0.2470, 1.3528, 5.0368, 3.7976, 3.7020, 7.4428, 5.6441, 7.5553, 2.0499, 1.3895, 4.6107, 3.1954, 4.8152, 5.4112, 2.9955, 0.0429, 0.2080, 1.6177, 0.7240, 2.9418, 5.1472, 2.0909, 6.0214, 6.9164
};
#define math_min(a, b) ((a) < (b) ? (a) : (b))
#define math_max(a, b) ((a) > (b) ? (a) : (b))
struct Timer {
LARGE_INTEGER frequency;
LARGE_INTEGER start;
LARGE_INTEGER end;
double interval;
};
inline Timer TimerInit() {
Timer result = { 0 };
if (::QueryPerformanceFrequency(&result.frequency) == FALSE) {
std::cout << "Could not create timer\n";
}
return result;
}
inline void TimerStart(Timer& timer) {
if (::QueryPerformanceCounter(&timer.start) == FALSE) {
std::cout << "could not start timer\n";
}
}
inline double TimerStop(Timer& timer) { // In seconds
if (::QueryPerformanceCounter(&timer.end) == FALSE) {
std::cout << "Could not end timer\n";
}
timer.interval = static_cast<double>(timer.end.QuadPart - timer.start.QuadPart) / timer.frequency.QuadPart;
return timer.interval;
}
#else
#include "MyMath.h"
#include "RandoFloat.h"
#include "Timer.h"
#endif
struct WindowData {
HWND hwnd;
HDC hdcDisplay; // Front Buffer DC
HDC hdcMemory; // Back Buffer DC
HINSTANCE hInstance; // Window instance
};
// This is sample data, can we move it into an appropriate struct? Or at least on the bottom into the lifecycle stuff
typedef double (*MathFunction )(double val);
void* Initialize(const WindowData& window) {
return (void*) (& window);
}
void Shutdown(void* userData) {
}
void Update(void* userData, float deltatTime) {
}
//
double power(double base, int exp) {
if (exp < 0) {
if (base == 0) {
return -0; // Error!!
}
return 1 / (base * power(base, (-exp) - 1));
}
if (exp == 0) {
return 1;
}
if (exp == 1) {
return base;
}
return base * power(base, exp - 1);
}
int fact(int n) {
return n <= 0 ? 1 : n * fact(n - 1);
}
double cos_121s(double x) {
const double c1 = 0.99999999999925182;
const double c2 = -0.49999999997024012;
const double c3 = 0.041666666473384543;
const double c4 = -0.001388888418000423;
const double c5 = 0.0000248010406484558;
const double c6 = -0.0000002752469638432;
const double c7 = 0.0000000019907856854;
double x2 = x * x;
return (c1 + x2 * (c2 + x2 * (c3 + x2 * (c4 + x2 * (c5 + x2 * (c6 + c7 * x2))))));
}
double cos_121(double x) {
double const pi = 3.1415926535897932384626433; // pi
double const twopi = 2.0 * pi; // pi times 2
double const two_over_pi = 2.0 / pi; // 2/pi
x = fmod(x, twopi); // Get rid of values > 2* pi
if (x < 0)x = -x; // cos(-x) = cos(x)
int quad = int(x * two_over_pi); // Get quadrant # (0 to 3) we're in
if (quad < 0) {
quad = -quad;
}
switch (quad) {
case 0: return cos_121s(x);
case 1: return -cos_121s(pi - x);
case 2: return -cos_121s(x - pi);
case 3: return cos_121s(twopi - x);
}
}
double sine(double rad) {
{
const double pi = 3.14159265358979323846;
const double twoPi = 6.28318530717958623200;
const double invTwoPi = 0.15915494309189534561;
// Range reduction (-2pi to 2pi)
int k = (int)((double)rad * invTwoPi);
double x = (double)rad - (double)k * twoPi;
// Range reduce to (-pi/2 to pi/2)
x = math_min(x, pi - x);
x = math_max(x, -pi - x);
x = math_min(x, pi - x);
rad = x;
}
#if 0
const int TERMS = 5;
double sin = 0;
for (int i = 0; i < TERMS; i++) { // That's Taylor series!!
sin += power(-1, i) * power(rad, 2 * i + 1) / (double)fact(2 * i + 1);
}
return sin;
#else
double const pi = 3.1415926535897932384626433; // pi
double const halfpi = pi / 2.0; // pi divided by 2
return cos_121(halfpi - rad);
#endif
}
double cosine(double rad) {
const int TERMS = 6;
double flip = 1.0f;
{
const double pi = 3.14159265358979323846;
const double twoPi = 6.28318530717958623200;
const double invTwoPi = 0.15915494309189534561;
const double halfPi = 1.57079632679489655800;
// Range reduction (-2pi to 2pi)
int k = (int)((double)rad * invTwoPi);
double x = (double)rad - (double)k * twoPi;
// Range reduce -pi to pi
if (x < -pi) {
x = pi - (-pi - x);
}
else if (x > pi) {
x = -pi + (x - pi);
}
// Range reduce to -pi/2 to pi/2
if (x < -halfPi) {
x = -(x + pi);
flip = -1.0f;
}
else if (x > halfPi) {
flip = -1.0f;
x = -(pi - x);
}
rad = x;
}
#if 0
double cos = 0;
for (int i = 0; i < TERMS; i++) { // That's also Taylor series!!
cos += power(-1, i) * power(rad, 2 * i) / (double)fact(2 * i);
}
return cos * flip;
#else
return cos_121(rad) * flip;
#endif
}
double tan_82s(double x) {
const double c1 = 211.849369664121;
const double c2 = -12.5288887278448;
const double c3 = 269.7350131214121;
const double c4 = -71.4145309347748;
double x2 = x * x;
return (x * (c1 + c2 * x2) / (c3 + x2 * (c4 + x2)));
}
double tan_82(double x) {
const double pi = 3.1415926535897932384626433; // pi
const double four_over_pi = 4.0 / pi; // 4/pi, used in tan routines
const double twoPi = 6.28318530717958623200;
const double invTwoPi = 0.15915494309189534561;
const double qtrpi = pi / 4.0; // pi/4.0, used in tan routines
const double halfpi = pi / 2.0; // pi divided by 2
const double threehalfpi = 3.0 * pi / 2.0; // pi times 3/2, used in tan routines
const double twopi = 2.0 * pi; // pi times 2
const double halfPi = 1.57079632679489655800;
// Range reduction (-2pi to 2pi)
int k = (int)((double)x * invTwoPi);
x = (double)x - (double)k * twoPi;
// Range reduce to 0 to 2 pi
if (x < 0.0) {
x = twoPi - (- x);
}
// 0 to pi
if (x > pi) {
x = x - pi;
}
// 0 to pi / 2
double flip = 1.0f;
if (x > halfPi) {
x = (halfPi - (x - halfPi));
flip = -flip;
}
int octant = int(x * four_over_pi); // Get octant # (0 to 7)
if (octant < 0) {
octant = -octant;
}
switch (octant) {
case 0: return tan_82s(x * four_over_pi) * flip;
case 1: return 1.0 / tan_82s((halfpi - x) * four_over_pi) * flip;
case 2: return -1.0 / tan_82s((x - halfpi) * four_over_pi) * flip;
case 3: return -tan_82s((pi - x) * four_over_pi) * flip;
case 4: return tan_82s((x - pi) * four_over_pi) * flip;
case 5: return 1.0 / tan_82s((threehalfpi - x) * four_over_pi) * flip;
case 6: return -1.0 / tan_82s((x - threehalfpi) * four_over_pi) * flip;
case 7: return -tan_82s((twopi - x) * four_over_pi) * flip;
}
return 0;
}
double tangent(double rad) {
#if 1
double denom = 0.0f;
return sine(rad) / cosine(rad);
#else
return tan_82(rad);
#endif
}
//
void Render(void* userData, HDC backBuffer, RECT client) {
WindowData& window = *(WindowData*)userData;
COLORREF bgColor = RGB(30, 30, 30);
HBRUSH bgBrush = CreateSolidBrush(bgColor);
HBRUSH oldBrush = (HBRUSH)SelectObject(backBuffer, bgBrush);
FillRect(backBuffer, &client, bgBrush);
SelectObject(backBuffer, oldBrush);
DeleteObject(bgBrush);
int middle = (client.bottom - client.top) / 2;
int width = (client.right - client.left);
int height = (client.bottom - client.top);
float xAxisLength = 14.0f;
float xAxisValue = -7.0f;
float xAxisStep = xAxisLength / (float)width;
float yAxisScale = 150.0f;
float yAxisValue = 0.0f;
HGDIOBJ ogPen = SelectObject(backBuffer, GetStockObject(DC_PEN));
SetDCPenColor(backBuffer, RGB(180, 20, 20));
MoveToEx(backBuffer, width / 2, 0, (LPPOINT)NULL);
LineTo(backBuffer, width / 2, height);
const double pi = (3.14159265358979323846 / 14.0) * (double)width;
const double halfPi = ((3.14159265358979323846 / 2.0) / 14.0) * (double)width;
SetDCPenColor(backBuffer, RGB(20, 180, 20));
MoveToEx(backBuffer, (double)(width / 2) - pi, 0, (LPPOINT)NULL);
LineTo(backBuffer, (double)(width / 2) - pi, height);
MoveToEx(backBuffer, (double)(width / 2) + pi, 0, (LPPOINT)NULL);
LineTo(backBuffer, (double)(width / 2) + pi, height);
SetDCPenColor(backBuffer, RGB(20, 20, 180));
MoveToEx(backBuffer, (double)(width / 2) - halfPi, 0, (LPPOINT)NULL);
LineTo(backBuffer, (double)(width / 2) - halfPi, height);
MoveToEx(backBuffer, (double)(width / 2) + halfPi, 0, (LPPOINT)NULL);
LineTo(backBuffer, (double)(width / 2) + halfPi, height);
#if 1
MathFunction baseFun = std::tan;
MathFunction compFun = tangent;
#elif 0
MathFunction baseFun = std::sin;
MathFunction compFun = sine;
#elif 0
MathFunction baseFun = std::cos;
MathFunction compFun = cosine;
#endif
SetDCPenColor(backBuffer, RGB(255, 255, 255));
if (true) { // sin
xAxisValue = -7.0f;
yAxisValue = baseFun(xAxisValue)* yAxisScale + (float)middle;
MoveToEx(backBuffer, 0, yAxisValue, (LPPOINT)NULL);
xAxisValue += xAxisStep;
for (int x = 1; x < width; ++x) {
yAxisValue = baseFun(xAxisValue) * yAxisScale + (float)middle;
LineTo(backBuffer, x, yAxisValue);
xAxisValue += xAxisStep;
if (xAxisValue > xAxisLength) {
std::cout << "Error, bad axis\n";
}
}
}
SetDCPenColor(backBuffer, RGB(0, 0, 0));
{ // sin
xAxisValue = -7.0f;
yAxisValue = compFun(xAxisValue) * yAxisScale + (float)middle;
MoveToEx(backBuffer, 0, yAxisValue, (LPPOINT)NULL);
xAxisValue += xAxisStep;
for (int x = 1; x < width; ++x) {
yAxisValue = compFun(xAxisValue) * yAxisScale + (float)middle;
LineTo(backBuffer, x, yAxisValue);
xAxisValue += xAxisStep;
if (xAxisValue > xAxisLength) {
std::cout << "Error, bad axis\n";
}
}
}
SelectObject(backBuffer, ogPen);
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
WNDCLASSA wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wndclass.lpszMenuName = 0;
wndclass.lpszClassName = WINDOW_CLASS;
RegisterClassA(&wndclass);
RECT rClient;
SetRect(&rClient, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);
AdjustWindowRect(&rClient, WS_OVERLAPPEDWINDOW | WS_VISIBLE, FALSE);
const char* title_a = WINDOW_TITLE;
wchar_t title_w[64] = { 0 };
for (int i = 0; i < 63 && title_a[i] != 0; title_w[i] = title_a[i], ++i);
HWND hwnd = CreateWindowA(WINDOW_CLASS, (char*)title_w, WS_OVERLAPPEDWINDOW | WS_VISIBLE,
(GetSystemMetrics(SM_CXSCREEN) / 2) - ((rClient.right - rClient.left) / 2),
(GetSystemMetrics(SM_CYSCREEN) / 2) - ((rClient.right - rClient.left) / 2),
(rClient.right - rClient.left), (rClient.bottom - rClient.top), NULL, NULL, hInstance, 0);
WindowData windowData = { 0 };
windowData.hwnd = hwnd;
windowData.hInstance = hInstance;
HBITMAP hbmBackBuffer; // Back Buffer Bitmap
HBITMAP hbmOld; // For restoring previous state
{ // Create back buffer
windowData.hdcDisplay = GetDC(hwnd);
windowData.hdcMemory = CreateCompatibleDC(windowData.hdcDisplay);
hbmBackBuffer = CreateCompatibleBitmap(windowData.hdcDisplay, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
hbmOld = (HBITMAP)SelectObject(windowData.hdcMemory, hbmBackBuffer);
}
LONG_PTR lptr = (LONG_PTR)(&windowData);
SetWindowLongPtrA(hwnd, GWLP_USERDATA, lptr);
ShowWindow(hwnd, SW_NORMAL);
void* userData = Initialize(windowData);
MSG msg;
bool running = true;
bool quit = false;
LARGE_INTEGER timerFrequency;
LARGE_INTEGER thisTick;
LARGE_INTEGER lastTick;
LARGE_INTEGER timerStart;
LONGLONG timeDelta;
if (!QueryPerformanceFrequency(&timerFrequency)) {
OutputDebugStringA("WinMain: QueryPerformanceFrequency failed\n");
}
QueryPerformanceCounter(&thisTick);
lastTick = thisTick;
while (!quit) {
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) {
quit = true;
break;
}
else if (msg.message == WM_DESTROY) {
Shutdown(userData);
{ // Destroy back buffer
SelectObject(windowData.hdcMemory, hbmOld);
DeleteObject(hbmBackBuffer);
DeleteDC(windowData.hdcMemory);
ReleaseDC(hwnd, windowData.hdcDisplay);
}
running = false;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if (running) {
RECT clientRect = {};
GetClientRect(hwnd, &clientRect);
QueryPerformanceCounter(&thisTick);
timeDelta = thisTick.QuadPart - lastTick.QuadPart;
double deltaTime = (double)timeDelta * 1000.0 / (double)timerFrequency.QuadPart;
Update(userData, (float)deltaTime);
Render(userData, windowData.hdcMemory, clientRect);
lastTick = thisTick;
InvalidateRect(hwnd, NULL, false);
Sleep(1);
}
}
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) {
switch (iMsg) {
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_ERASEBKGND:
return TRUE;
case WM_PAINT:
{
LONG_PTR lptr = GetWindowLongPtrA(hwnd, GWLP_USERDATA);
WindowData* windowData = (WindowData*)lptr;
RECT rClient = {};
GetClientRect(hwnd, &rClient);
BitBlt(windowData->hdcDisplay, 0, 0, rClient.right - rClient.left, rClient.bottom - rClient.top, windowData->hdcMemory, 0, 0, SRCCOPY);
ValidateRect(hwnd, NULL);
}
return TRUE;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
void TestRange(const char* name, MathFunction stock, MathFunction test) {
std::cout << "Testing: " << name << "\n";
const int loop_min = -100000;
const int loop_max = 100000;
const float max_delta = 0.00009f;
Timer stopwatch = TimerInit();
double time = 0.0f;
int err_max = 100;
int errCount = 0;
float total = 0.0f;
TimerStart(stopwatch);
for (int i = loop_min; i < loop_max; ++i) {
float result = stock((float)i);
if (result != result) {
//std::cout << "stock nan at: " << i << "\n";
errCount += 1;
if (errCount == err_max) {
//std::cout << "Too many errors, stopping\n";
break;
}
}
total += result;
}
time = TimerStop(stopwatch) * 1000.0;
std::cout << "stock(" << loop_min << " - " << loop_max << "): " << time << "ms [" << total << "]\n";
errCount = 0;
total = 0.0f;
TimerStart(stopwatch);
for (int i = loop_min; i < loop_max; ++i) {
float result = stock((float)i);
if (result != result) {
std::cout << "mine nan at: " << i << "\n";
errCount += 1;
if (errCount == err_max) {
std::cout << "Too many errors, stopping\n";
break;
}
}
total += result;
}
time = TimerStop(stopwatch) * 1000.0;
std::cout << "2nd(" << loop_min << " - " << loop_max << "): " << time << "ms [" << total << "]\n";
errCount = 0;
total = 0.0f;
TimerStart(stopwatch);
for (int i = loop_min; i < loop_max; ++i) {
float result = test((float)i);
if (result != result) {
std::cout << "mine nan at: " << i << "\n";
errCount += 1;
if (errCount == err_max) {
std::cout << "Too many errors, stopping\n";
break;
}
}
total += result;
}
time = TimerStop(stopwatch) * 1000.0;
std::cout << "mine(" << loop_min << " - " << loop_max << "): " << time << "ms [" << total << "]\n";
errCount = 0;
for (int i = loop_min; i < loop_max; ++i) {
float result1 = stock((float)i);
float result2 = test((float)i);
float delta = 0.0f;
//std::cout << i << ": " << result1 << " / " << result2 << "\n";
if (result1 > result2) {
delta = result1 - result2;
}
else if (result2 > result1) {
delta = result2 - result1;
}
if (delta > max_delta || result2 != result2) {
std::cout << "divergence at: " << i << ", with delta: " << delta << "\n";
errCount += 1;
if (errCount == err_max) {
std::cout << "Too many errors, stopping\n";
break;
}
}
}
errCount = 0;
for (int i = 0; i < num_floats; ++i) {
float result1 = stock(rando_floats[i]);
float result2 = test(rando_floats[i]);
float delta = 0.0f;
//std::cout << i << ": " << result1 << " / " << result2 << "\n";
if (result1 > result2) {
delta = result1 - result2;
}
else if (result2 > result1) {
delta = result2 - result1;
}
if (delta > max_delta || result2 != result2) {
std::cout << "divergence at: " << i << ", with delta: " << delta << "\n";
errCount += 1;
if (errCount == err_max) {
std::cout << "Too many errors, stopping\n";
break;
}
}
}
std::cout << "\n";
}
int main(int argc, char** argv) {
/*
double twoPi = 3.14159265358979323846 / 2.0;
std::cout << std::fixed << std::setprecision(20);
std::cout << "double " << twoPi << std::endl;
*/
//TestRange("cos", std::cos, cosine);
double pi = 3.14159265358979323846;
double neinty = 90.0 * (pi / 180); // Also bad at 270
std::cout << "Tan 90: " << std::tan(neinty) << " / " << tangent(neinty) << "\n";
std::cout << "Cos 90: " << std::cos(neinty) << " / " << cosine(neinty) << "\n";
TestRange("sin", std::sin, sine);
TestRange("cos", std::cos, cosine);
TestRange("tan", std::tan, tangent);
std::cout << "\nDone with tests\n";
return WinMain(GetModuleHandle(NULL), NULL, GetCommandLineA(), SW_SHOWDEFAULT);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment