assert1

Dependencies:   mbed X_NUCLEO_IHM02A1

Files at this revision

API Documentation at this revision

Comitter:
Coconara
Date:
Tue Dec 11 19:12:55 2018 +0000
Child:
1:0690cf83f060
Commit message:
asser

Changed in this revision

X_NUCLEO_IHM02A1.lib Show annotated file Show diff for this revision Revisions of this file
hardware.cpp Show annotated file Show diff for this revision Revisions of this file
hardware.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
math_precalc.cpp Show annotated file Show diff for this revision Revisions of this file
math_precalc.h Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
odometrie.cpp Show annotated file Show diff for this revision Revisions of this file
odometrie.h Show annotated file Show diff for this revision Revisions of this file
odometrie1.0.txt Show annotated file Show diff for this revision Revisions of this file
reglages.h Show annotated file Show diff for this revision Revisions of this file
tests_moteurs.cpp Show annotated file Show diff for this revision Revisions of this file
tests_moteurs.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/X_NUCLEO_IHM02A1.lib	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/ST/code/X_NUCLEO_IHM02A1/#ff67801d7cd7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hardware.cpp	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,254 @@
+#define _POSIX_C_SOURCE 199309L
+#include "mbed.h"
+#include "reglages.h"
+#include "hardware.h"
+#include "DevSPI.h"
+#include "XNucleoIHM02A1.h"
+
+// PWM_MAX est définit dans réglage;
+bool moteurs_arret = false;
+
+
+XNucleoIHM02A1 *x_nucleo_ihm02a1; //Création d'une entité pour la carte de contôle des pas à pas
+L6470_init_t init[L6470DAISYCHAINSIZE] = {
+    /* First Motor. */
+    {
+        9.0,                           /* Motor supply voltage in V. */
+        400,                           /* Min number of steps per revolution for the motor. */
+        1.7,                           /* Max motor phase voltage in A. */
+        3.06,                          /* Max motor phase voltage in V. */
+        300.0,                         /* Motor initial speed [step/s]. */
+        500.0,                         /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */
+        1500.0,                        /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */
+        992.0,                         /* Motor maximum speed [step/s]. */
+        0.0,                           /* Motor minimum speed [step/s]. */
+        602.7,                         /* Motor full-step speed threshold [step/s]. */
+        3.06,                          /* Holding kval [V]. */
+        3.06,                          /* Constant speed kval [V]. */
+        3.06,                          /* Acceleration starting kval [V]. */
+        3.06,                          /* Deceleration starting kval [V]. */
+        61.52,                         /* Intersect speed for bemf compensation curve slope changing [step/s]. */
+        392.1569e-6,                   /* Start slope [s/step]. */
+        643.1372e-6,                   /* Acceleration final slope [s/step]. */
+        643.1372e-6,                   /* Deceleration final slope [s/step]. */
+        0,                             /* Thermal compensation factor (range [0, 15]). */
+        3.06 * 1000 * 1.10,            /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */
+        3.06 * 1000 * 1.00,            /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */
+        StepperMotor::STEP_MODE_1_128, /* Step mode selection. */
+        0xFF,                          /* Alarm conditions enable. */
+        0x2E88                         /* Ic configuration. */
+    },
+
+    /* Second Motor. */
+    {
+        9.0,                           /* Motor supply voltage in V. */
+        400,                           /* Min number of steps per revolution for the motor. */
+        1.7,                           /* Max motor phase voltage in A. */
+        3.06,                          /* Max motor phase voltage in V. */
+        300.0,                         /* Motor initial speed [step/s]. */
+        500.0,                         /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */
+        1500.0,                         /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */
+        992.0,                         /* Motor maximum speed [step/s]. */
+        0.0,                           /* Motor minimum speed [step/s]. */
+        602.7,                         /* Motor full-step speed threshold [step/s]. */
+        3.06,                          /* Holding kval [V]. */
+        3.06,                          /* Constant speed kval [V]. */
+        3.06,                          /* Acceleration starting kval [V]. */
+        3.06,                          /* Deceleration starting kval [V]. */
+        61.52,                         /* Intersect speed for bemf compensation curve slope changing [step/s]. */
+        392.1569e-6,                   /* Start slope [s/step]. */
+        643.1372e-6,                   /* Acceleration final slope [s/step]. */
+        643.1372e-6,                   /* Deceleration final slope [s/step]. */
+        0,                             /* Thermal compensation factor (range [0, 15]). */
+        3.06 * 1000 * 1.10,            /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */
+        3.06 * 1000 * 1.00,            /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */
+        StepperMotor::STEP_MODE_1_128, /* Step mode selection. */
+        0xFF,                          /* Alarm conditions enable. */
+        0x2E88                         /* Ic configuration. */
+    }
+};
+
+L6470 **motors; //Instance des moteurs
+
+DigitalOut led(LED2);
+Serial pc(USBTX, USBRX); // tx, rx
+DevSPI dev_spi(D11, D12, D3);
+
+
+//Connections codeuses
+InterruptIn ENCAL(D6);
+InterruptIn ENCAJ(D5);
+InterruptIn ENCBL(D8);
+InterruptIn ENCBJ(D7);
+
+volatile long encoderValueA = 0; //nombre de tics sur l'encodeur A
+volatile long encoderValueB = 0; //nombre de tics sur l'encodeur B
+
+void init_hardware()
+{
+    pc.baud(115200); //Initialisation de l'USART pc 
+
+    /* Initializing Motor Control Expansion Board. */
+    x_nucleo_ihm02a1 = new XNucleoIHM02A1(&init[0], &init[1], A4, A5, D4, A2, &dev_spi);
+    motors = x_nucleo_ihm02a1->get_components();
+    
+    ENCAL.mode(PullUp); //Initialisation des codeuses
+    ENCAJ.mode(PullUp);
+    ENCBL.mode(PullUp);
+    ENCBJ.mode(PullUp);
+
+    ENCAL.rise(&updateEncoderA);
+    ENCAL.fall(&updateEncoderA);
+    ENCAJ.rise(&updateEncoderA);
+    ENCAJ.fall(&updateEncoderA);
+
+    ENCBL.rise(&updateEncoderB);
+    ENCBL.fall(&updateEncoderB);
+    ENCBJ.rise(&updateEncoderB);
+    ENCBJ.fall(&updateEncoderB);
+
+}
+
+void set_PWM_moteur_D(int PWM)
+{
+    if (!moteurs_arret) {
+        if (PWM > PWM_MAX) {
+            motors[0]->prepare_run(StepperMotor::BWD, PWM_MAX); //BWD = backward , FWD = forward , la vitesse doit etre positive
+        } else if (PWM <-PWM_MAX) {
+            motors[0]->prepare_run(StepperMotor::FWD, PWM_MAX);
+        } else if (PWM > 0) {
+            motors[0]->prepare_run(StepperMotor::BWD, PWM);
+        } else if (PWM < 0) {
+            motors[0]->prepare_run(StepperMotor::FWD, -PWM);
+        } else if (PWM == 0) {
+            motors[0]->prepare_run(StepperMotor::BWD, 0);
+        }
+    } else {
+        motors[0]->prepare_hard_hiz(); //mode haute impédence pour pouvoir déplacer le robot à la main
+    }
+    x_nucleo_ihm02a1->perform_prepared_actions();
+}
+
+void set_PWM_moteur_G(int PWM)
+{
+
+    if (!moteurs_arret) {
+        if (PWM > PWM_MAX) {
+            motors[1]->prepare_run(StepperMotor::FWD, PWM_MAX);
+        } else if (PWM <-PWM_MAX) {
+            motors[1]->prepare_run(StepperMotor::BWD, PWM_MAX);
+        } else if (PWM > 0) {
+            motors[1]->prepare_run(StepperMotor::FWD, PWM);
+        } else if (PWM < 0) {
+            motors[1]->prepare_run(StepperMotor::BWD, -PWM);
+        } else if (PWM == 0) {
+            motors[1]->prepare_run(StepperMotor::BWD, 0);
+        }
+    } else {
+        motors[1]->prepare_hard_hiz(); //mode haute impédence pour pouvoir déplacer le robot à la main
+    }
+    x_nucleo_ihm02a1->perform_prepared_actions();
+}
+
+long int get_nbr_tick_D()
+{
+    return encoderValueA;
+}
+
+long int get_nbr_tick_G()
+{
+    return encoderValueB;
+}
+
+void attente_synchro()
+{
+    //structute du temps d'attente de l'asservissement 10ms
+    wait(0.010);
+}
+
+void motors_stop()
+{
+    moteurs_arret=1;
+    motors[0]->prepare_hard_hiz(); //mode haute impédence pour pouvoir déplacer le robot à la main
+    motors[1]->prepare_hard_hiz(); 
+    x_nucleo_ihm02a1->perform_prepared_actions();
+}
+
+void motors_on()
+{
+    moteurs_arret=0;
+}
+
+
+void allumer_del()
+{
+    led = 1;
+}
+
+void eteindre_del()
+{
+    led = 0;
+}
+
+void delay_ms()
+{
+}
+
+void allumer_autres_del()
+{
+}
+
+void eteindre_autres_del()
+{
+}
+void toggle_autres_del() {}
+
+void set_all_led()
+{
+
+}
+
+
+volatile int lastEncodedA = 0;
+long lastencoderValueA = 0;
+int lastMSBA = 0;
+int lastLSBA = 0;
+
+void updateEncoderA()
+{
+    int MSBA = ENCAL.read(); //MSB = most significant bit
+    int LSBA = ENCAJ.read(); //LSB = least significant bit
+
+    int encodedA = (MSBA << 1) |LSBA; //converting the 2 pin value to single number
+    int sumA  = (lastEncodedA << 2) | encodedA; //adding it to the previous encoded value
+
+    if(sumA == 0b1101 || sumA == 0b0100 || sumA == 0b0010 || sumA == 0b1011) encoderValueA ++;
+    if(sumA == 0b1110 || sumA == 0b0111 || sumA == 0b0001 || sumA == 0b1000) encoderValueA --;
+
+    lastEncodedA = encodedA; //store this value for next time
+}
+
+
+volatile int lastEncodedB = 0;
+long lastencoderValueB = 0;
+int lastMSBB = 0;
+int lastLSBB = 0;
+
+void updateEncoderB()
+{
+    int MSBB = ENCBL.read(); //MSB = most significant bit
+    int LSBB = ENCBJ.read(); //LSB = least significant bit
+
+    int encodedB = (MSBB << 1) |LSBB; //converting the 2 pin value to single number
+    int sumB  = (lastEncodedB << 2) | encodedB; //adding it to the previous encoded value
+
+    if(sumB == 0b1101 || sumB == 0b0100 || sumB == 0b0010 || sumB == 0b1011) encoderValueB ++;
+    if(sumB == 0b1110 || sumB == 0b0111 || sumB == 0b0001 || sumB == 0b1000) encoderValueB --;
+
+    lastEncodedB = encodedB; //store this value for next time
+}
+
+void debugEncoder()
+{
+    printf("codeuse droite : %d, codeuse gauche : %d\n", lastEncodedB, lastEncodedA);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hardware.h	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,32 @@
+#ifndef HARDWARE_H
+#define HARDWARE_H
+
+
+void init_hardware(void);
+void set_PWM_moteur_D(int PWM);
+void set_PWM_moteur_G(int PWM);
+long int get_nbr_tick_D(void);
+long int get_nbr_tick_G(void);
+void attente_synchro(void);
+
+void allumer_del(void);
+void eteindre_del(void);
+
+void allumer_autres_del(void);
+void eteindre_autres_del(void);
+void toggle_autres_del(void);
+
+void motors_on(void);
+void motors_stop(void);
+
+int arret(void);
+
+void updateEncoderA(void);
+void updateEncoderB(void);
+
+float lecture_courrant_D();
+float lecture_courrant_G();
+
+void debugEncoder(void);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,19 @@
+#include "mbed.h"
+
+#include "hardware.h"
+#include "odometrie.h"
+#include "reglages.h"
+#include "tests_moteurs.h"
+
+int main()
+{
+    //init
+    init_odometrie();
+    init_hardware();
+    
+    test_ligne_droite(1000000, 900);
+        
+    
+
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/math_precalc.cpp	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,33 @@
+#include "math_precalc.h"
+
+
+const float t_cos_precalc[3143] = {1.000000, 1.000000, 0.999998, 0.999996, 0.999992, 0.999988, 0.999982, 0.999976, 0.999968, 0.999960, 0.999950, 0.999940, 0.999928, 0.999916, 0.999902, 0.999888, 0.999872, 0.999856, 0.999838, 0.999820, 0.999800, 0.999780, 0.999758, 0.999736, 0.999712, 0.999688, 0.999662, 0.999636, 0.999608, 0.999580, 0.999550, 0.999520, 0.999488, 0.999456, 0.999422, 0.999388, 0.999352, 0.999316, 0.999278, 0.999240, 0.999200, 0.999160, 0.999118, 0.999076, 0.999032, 0.998988, 0.998942, 0.998896, 0.998848, 0.998800, 0.998750, 0.998700, 0.998648, 0.998596, 0.998542, 0.998488, 0.998432, 0.998376, 0.998318, 0.998260, 0.998201, 0.998140, 0.998079, 0.998016, 0.997953, 0.997888, 0.997823, 0.997756, 0.997689, 0.997620, 0.997551, 0.997481, 0.997409, 0.997337, 0.997263, 0.997189, 0.997113, 0.997037, 0.996960, 0.996881, 0.996802, 0.996721, 0.996640, 0.996557, 0.996474, 0.996390, 0.996304, 0.996218, 0.996130, 0.996042, 0.995953, 0.995862, 0.995771, 0.995679, 0.995585, 0.995491, 0.995396, 0.995299, 0.995202, 0.995104, 0.995004, 0.994904, 0.994803, 0.994700, 0.994597, 0.994493, 0.994387, 0.994281, 0.994174, 0.994065, 0.993956, 0.993846, 0.993735, 0.993622, 0.993509, 0.993395, 0.993280, 0.993163, 0.993046, 0.992928, 0.992809, 0.992688, 0.992567, 0.992445, 0.992322, 0.992198, 0.992072, 0.991946, 0.991819, 0.991691, 0.991562, 0.991432, 0.991301, 0.991169, 0.991035, 0.990901, 0.990766, 0.990630, 0.990493, 0.990355, 0.990216, 0.990076, 0.989935, 0.989793, 0.989650, 0.989506, 0.989361, 0.989215, 0.989068, 0.988920, 0.988771, 0.988621, 0.988470, 0.988318, 0.988165, 0.988012, 0.987857, 0.987701, 0.987544, 0.987386, 0.987227, 0.987067, 0.986907, 0.986745, 0.986582, 0.986418, 0.986254, 0.986088, 0.985921, 0.985753, 0.985585, 0.985415, 0.985244, 0.985073, 0.984900, 0.984727, 0.984552, 0.984376, 0.984200, 0.984022, 0.983844, 0.983664, 0.983484, 0.983302, 0.983120, 0.982936, 0.982752, 0.982566, 0.982380, 0.982193, 0.982004, 0.981815, 0.981625, 0.981433, 0.981241, 0.981048, 0.980853, 0.980658, 0.980462, 0.980265, 0.980067, 0.979867, 0.979667, 0.979466, 0.979264, 0.979061, 0.978857, 0.978652, 0.978446, 0.978239, 0.978031, 0.977822, 0.977612, 0.977401, 0.977189, 0.976976, 0.976763, 0.976548, 0.976332, 0.976115, 0.975897, 0.975679, 0.975459, 0.975238, 0.975017, 0.974794, 0.974571, 0.974346, 0.974120, 0.973894, 0.973666, 0.973438, 0.973208, 0.972978, 0.972747, 0.972514, 0.972281, 0.972047, 0.971811, 0.971575, 0.971338, 0.971100, 0.970861, 0.970620, 0.970379, 0.970137, 0.969894, 0.969650, 0.969405, 0.969159, 0.968912, 0.968665, 0.968416, 0.968166, 0.967915, 0.967663, 0.967411, 0.967157, 0.966902, 0.966647, 0.966390, 0.966132, 0.965874, 0.965614, 0.965354, 0.965093, 0.964830, 0.964567, 0.964302, 0.964037, 0.963771, 0.963504, 0.963236, 0.962966, 0.962696, 0.962425, 0.962153, 0.961880, 0.961606, 0.961331, 0.961055, 0.960779, 0.960501, 0.960222, 0.959942, 0.959662, 0.959380, 0.959097, 0.958814, 0.958529, 0.958244, 0.957957, 0.957670, 0.957382, 0.957092, 0.956802, 0.956511, 0.956219, 0.955926, 0.955632, 0.955336, 0.955040, 0.954744, 0.954446, 0.954147, 0.953847, 0.953546, 0.953244, 0.952942, 0.952638, 0.952334, 0.952028, 0.951722, 0.951414, 0.951106, 0.950796, 0.950486, 0.950175, 0.949863, 0.949550, 0.949235, 0.948920, 0.948604, 0.948287, 0.947970, 0.947651, 0.947331, 0.947010, 0.946689, 0.946366, 0.946042, 0.945718, 0.945392, 0.945066, 0.944739, 0.944410, 0.944081, 0.943751, 0.943420, 0.943088, 0.942755, 0.942421, 0.942086, 0.941750, 0.941413, 0.941075, 0.940737, 0.940397, 0.940057, 0.939715, 0.939373, 0.939029, 0.938685, 0.938340, 0.937994, 0.937646, 0.937298, 0.936949, 0.936599, 0.936249, 0.935897, 0.935544, 0.935190, 0.934836, 0.934480, 0.934124, 0.933766, 0.933408, 0.933049, 0.932688, 0.932327, 0.931965, 0.931602, 0.931238, 0.930873, 0.930508, 0.930141, 0.929773, 0.929405, 0.929035, 0.928665, 0.928293, 0.927921, 0.927548, 0.927174, 0.926798, 0.926422, 0.926045, 0.925668, 0.925289, 0.924909, 0.924528, 0.924147, 0.923764, 0.923381, 0.922997, 0.922611, 0.922225, 0.921838, 0.921450, 0.921061, 0.920671, 0.920280, 0.919889, 0.919496, 0.919102, 0.918708, 0.918313, 0.917916, 0.917519, 0.917121, 0.916722, 0.916322, 0.915921, 0.915519, 0.915116, 0.914713, 0.914308, 0.913903, 0.913496, 0.913089, 0.912681, 0.912272, 0.911862, 0.911451, 0.911039, 0.910626, 0.910212, 0.909798, 0.909382, 0.908966, 0.908548, 0.908130, 0.907711, 0.907291, 0.906870, 0.906448, 0.906025, 0.905602, 0.905177, 0.904752, 0.904325, 0.903898, 0.903470, 0.903041, 0.902611, 0.902180, 0.901748, 0.901315, 0.900882, 0.900447, 0.900012, 0.899575, 0.899138, 0.898700, 0.898261, 0.897821, 0.897380, 0.896939, 0.896496, 0.896052, 0.895608, 0.895163, 0.894717, 0.894270, 0.893822, 0.893373, 0.892923, 0.892472, 0.892021, 0.891568, 0.891115, 0.890661, 0.890206, 0.889750, 0.889293, 0.888835, 0.888376, 0.887917, 0.887456, 0.886995, 0.886533, 0.886070, 0.885606, 0.885141, 0.884675, 0.884208, 0.883741, 0.883272, 0.882803, 0.882333, 0.881862, 0.881390, 0.880917, 0.880443, 0.879969, 0.879493, 0.879017, 0.878540, 0.878062, 0.877583, 0.877103, 0.876622, 0.876140, 0.875658, 0.875174, 0.874690, 0.874205, 0.873719, 0.873232, 0.872745, 0.872256, 0.871766, 0.871276, 0.870785, 0.870293, 0.869800, 0.869306, 0.868811, 0.868316, 0.867819, 0.867322, 0.866824, 0.866325, 0.865825, 0.865324, 0.864822, 0.864320, 0.863816, 0.863312, 0.862807, 0.862301, 0.861794, 0.861287, 0.860778, 0.860269, 0.859758, 0.859247, 0.858735, 0.858222, 0.857709, 0.857194, 0.856679, 0.856162, 0.855645, 0.855127, 0.854608, 0.854089, 0.853568, 0.853047, 0.852525, 0.852001, 0.851477, 0.850953, 0.850427, 0.849900, 0.849373, 0.848845, 0.848316, 0.847786, 0.847255, 0.846724, 0.846191, 0.845658, 0.845124, 0.844589, 0.844053, 0.843516, 0.842979, 0.842440, 0.841901, 0.841361, 0.840820, 0.840278, 0.839736, 0.839192, 0.838648, 0.838103, 0.837557, 0.837010, 0.836463, 0.835914, 0.835365, 0.834815, 0.834264, 0.833712, 0.833159, 0.832606, 0.832052, 0.831497, 0.830941, 0.830384, 0.829826, 0.829268, 0.828709, 0.828148, 0.827588, 0.827026, 0.826463, 0.825900, 0.825336, 0.824771, 0.824205, 0.823638, 0.823070, 0.822502, 0.821933, 0.821363, 0.820792, 0.820220, 0.819648, 0.819075, 0.818501, 0.817926, 0.817350, 0.816773, 0.816196, 0.815618, 0.815039, 0.814459, 0.813878, 0.813297, 0.812715, 0.812132, 0.811548, 0.810963, 0.810378, 0.809791, 0.809204, 0.808616, 0.808028, 0.807438, 0.806848, 0.806256, 0.805664, 0.805072, 0.804478, 0.803884, 0.803289, 0.802693, 0.802096, 0.801498, 0.800900, 0.800301, 0.799701, 0.799100, 0.798498, 0.797896, 0.797293, 0.796689, 0.796084, 0.795478, 0.794872, 0.794265, 0.793657, 0.793048, 0.792438, 0.791828, 0.791217, 0.790605, 0.789992, 0.789379, 0.788764, 0.788149, 0.787533, 0.786917, 0.786299, 0.785681, 0.785062, 0.784442, 0.783822, 0.783200, 0.782578, 0.781955, 0.781331, 0.780707, 0.780082, 0.779456, 0.778829, 0.778201, 0.777573, 0.776944, 0.776314, 0.775683, 0.775051, 0.774419, 0.773786, 0.773152, 0.772518, 0.771882, 0.771246, 0.770609, 0.769971, 0.769333, 0.768694, 0.768054, 0.767413, 0.766771, 0.766129, 0.765486, 0.764842, 0.764198, 0.763552, 0.762906, 0.762259, 0.761612, 0.760963, 0.760314, 0.759664, 0.759013, 0.758362, 0.757710, 0.757057, 0.756403, 0.755748, 0.755093, 0.754437, 0.753780, 0.753123, 0.752465, 0.751806, 0.751146, 0.750485, 0.749824, 0.749162, 0.748499, 0.747836, 0.747172, 0.746507, 0.745841, 0.745174, 0.744507, 0.743839, 0.743170, 0.742501, 0.741831, 0.741160, 0.740488, 0.739816, 0.739142, 0.738469, 0.737794, 0.737119, 0.736442, 0.735766, 0.735088, 0.734410, 0.733730, 0.733051, 0.732370, 0.731689, 0.731007, 0.730324, 0.729641, 0.728956, 0.728272, 0.727586, 0.726900, 0.726212, 0.725525, 0.724836, 0.724147, 0.723457, 0.722766, 0.722075, 0.721382, 0.720689, 0.719996, 0.719302, 0.718606, 0.717911, 0.717214, 0.716517, 0.715819, 0.715120, 0.714421, 0.713721, 0.713020, 0.712319, 0.711616, 0.710914, 0.710210, 0.709506, 0.708801, 0.708095, 0.707388, 0.706681, 0.705973, 0.705265, 0.704555, 0.703845, 0.703135, 0.702423, 0.701711, 0.700998, 0.700285, 0.699571, 0.698856, 0.698140, 0.697424, 0.696707, 0.695989, 0.695271, 0.694552, 0.693832, 0.693111, 0.692390, 0.691668, 0.690946, 0.690222, 0.689498, 0.688774, 0.688048, 0.687322, 0.686596, 0.685868, 0.685140, 0.684412, 0.683682, 0.682952, 0.682221, 0.681490, 0.680758, 0.680025, 0.679291, 0.678557, 0.677822, 0.677087, 0.676350, 0.675613, 0.674876, 0.674137, 0.673399, 0.672659, 0.671919, 0.671178, 0.670436, 0.669694, 0.668951, 0.668207, 0.667463, 0.666718, 0.665972, 0.665226, 0.664479, 0.663731, 0.662983, 0.662234, 0.661484, 0.660734, 0.659983, 0.659232, 0.658479, 0.657726, 0.656973, 0.656219, 0.655464, 0.654708, 0.653952, 0.653195, 0.652437, 0.651679, 0.650920, 0.650161, 0.649401, 0.648640, 0.647879, 0.647117, 0.646354, 0.645591, 0.644827, 0.644062, 0.643297, 0.642531, 0.641764, 0.640997, 0.640229, 0.639460, 0.638691, 0.637922, 0.637151, 0.636380, 0.635608, 0.634836, 0.634063, 0.633290, 0.632515, 0.631740, 0.630965, 0.630189, 0.629412, 0.628635, 0.627857, 0.627078, 0.626299, 0.625519, 0.624738, 0.623957, 0.623175, 0.622393, 0.621610, 0.620826, 0.620042, 0.619257, 0.618472, 0.617686, 0.616899, 0.616111, 0.615324, 0.614535, 0.613746, 0.612956, 0.612166, 0.611374, 0.610583, 0.609791, 0.608998, 0.608204, 0.607410, 0.606615, 0.605820, 0.605024, 0.604228, 0.603431, 0.602633, 0.601835, 0.601036, 0.600236, 0.599436, 0.598635, 0.597834, 0.597032, 0.596230, 0.595426, 0.594623, 0.593818, 0.593014, 0.592208, 0.591402, 0.590595, 0.589788, 0.588980, 0.588172, 0.587363, 0.586553, 0.585743, 0.584932, 0.584121, 0.583309, 0.582496, 0.581683, 0.580869, 0.580055, 0.579240, 0.578425, 0.577609, 0.576792, 0.575975, 0.575157, 0.574339, 0.573520, 0.572701, 0.571880, 0.571060, 0.570239, 0.569417, 0.568595, 0.567772, 0.566948, 0.566124, 0.565300, 0.564474, 0.563649, 0.562822, 0.561995, 0.561168, 0.560340, 0.559512, 0.558682, 0.557853, 0.557023, 0.556192, 0.555360, 0.554529, 0.553696, 0.552863, 0.552030, 0.551195, 0.550361, 0.549526, 0.548690, 0.547854, 0.547017, 0.546179, 0.545341, 0.544503, 0.543664, 0.542824, 0.541984, 0.541144, 0.540302, 0.539461, 0.538618, 0.537775, 0.536932, 0.536088, 0.535244, 0.534399, 0.533553, 0.532707, 0.531861, 0.531014, 0.530166, 0.529318, 0.528469, 0.527620, 0.526770, 0.525920, 0.525069, 0.524218, 0.523366, 0.522514, 0.521661, 0.520807, 0.519953, 0.519099, 0.518244, 0.517388, 0.516532, 0.515676, 0.514819, 0.513961, 0.513103, 0.512245, 0.511386, 0.510526, 0.509666, 0.508805, 0.507944, 0.507082, 0.506220, 0.505358, 0.504494, 0.503631, 0.502767, 0.501902, 0.501037, 0.500171, 0.499305, 0.498438, 0.497571, 0.496703, 0.495835, 0.494967, 0.494097, 0.493228, 0.492358, 0.491487, 0.490616, 0.489744, 0.488872, 0.487999, 0.487126, 0.486253, 0.485379, 0.484504, 0.483629, 0.482754, 0.481878, 0.481001, 0.480124, 0.479247, 0.478369, 0.477490, 0.476612, 0.475732, 0.474852, 0.473972, 0.473091, 0.472210, 0.471328, 0.470446, 0.469564, 0.468680, 0.467797, 0.466913, 0.466028, 0.465143, 0.464258, 0.463372, 0.462485, 0.461599, 0.460711, 0.459823, 0.458935, 0.458046, 0.457157, 0.456268, 0.455378, 0.454487, 0.453596, 0.452705, 0.451813, 0.450920, 0.450028, 0.449134, 0.448241, 0.447347, 0.446452, 0.445557, 0.444662, 0.443766, 0.442869, 0.441972, 0.441075, 0.440177, 0.439279, 0.438381, 0.437482, 0.436582, 0.435682, 0.434782, 0.433881, 0.432980, 0.432079, 0.431177, 0.430274, 0.429371, 0.428468, 0.427564, 0.426660, 0.425755, 0.424850, 0.423945, 0.423039, 0.422132, 0.421226, 0.420319, 0.419411, 0.418503, 0.417595, 0.416686, 0.415776, 0.414867, 0.413957, 0.413046, 0.412135, 0.411224, 0.410312, 0.409400, 0.408487, 0.407574, 0.406661, 0.405747, 0.404833, 0.403919, 0.403004, 0.402088, 0.401172, 0.400256, 0.399340, 0.398423, 0.397505, 0.396587, 0.395669, 0.394751, 0.393832, 0.392912, 0.391992, 0.391072, 0.390152, 0.389231, 0.388309, 0.387388, 0.386466, 0.385543, 0.384620, 0.383697, 0.382773, 0.381849, 0.380925, 0.380000, 0.379075, 0.378149, 0.377223, 0.376297, 0.375370, 0.374443, 0.373516, 0.372588, 0.371660, 0.370731, 0.369802, 0.368873, 0.367943, 0.367013, 0.366083, 0.365152, 0.364221, 0.363290, 0.362358, 0.361426, 0.360493, 0.359560, 0.358627, 0.357693, 0.356759, 0.355825, 0.354890, 0.353955, 0.353019, 0.352084, 0.351147, 0.350211, 0.349274, 0.348337, 0.347399, 0.346461, 0.345523, 0.344585, 0.343646, 0.342706, 0.341767, 0.340827, 0.339887, 0.338946, 0.338005, 0.337064, 0.336122, 0.335180, 0.334238, 0.333295, 0.332352, 0.331409, 0.330465, 0.329521, 0.328577, 0.327632, 0.326687, 0.325742, 0.324796, 0.323850, 0.322904, 0.321957, 0.321011, 0.320063, 0.319116, 0.318168, 0.317220, 0.316271, 0.315322, 0.314373, 0.313424, 0.312474, 0.311524, 0.310574, 0.309623, 0.308672, 0.307720, 0.306769, 0.305817, 0.304865, 0.303912, 0.302959, 0.302006, 0.301053, 0.300099, 0.299145, 0.298190, 0.297236, 0.296281, 0.295326, 0.294370, 0.293414, 0.292458, 0.291502, 0.290545, 0.289588, 0.288631, 0.287673, 0.286715, 0.285757, 0.284799, 0.283840, 0.282881, 0.281922, 0.280962, 0.280002, 0.279042, 0.278082, 0.277121, 0.276160, 0.275199, 0.274237, 0.273275, 0.272313, 0.271351, 0.270388, 0.269425, 0.268462, 0.267499, 0.266535, 0.265571, 0.264607, 0.263642, 0.262678, 0.261713, 0.260747, 0.259782, 0.258816, 0.257850, 0.256884, 0.255917, 0.254950, 0.253983, 0.253016, 0.252048, 0.251080, 0.250112, 0.249144, 0.248175, 0.247207, 0.246238, 0.245268, 0.244299, 0.243329, 0.242359, 0.241388, 0.240418, 0.239447, 0.238476, 0.237505, 0.236533, 0.235562, 0.234590, 0.233617, 0.232645, 0.231672, 0.230699, 0.229726, 0.228753, 0.227779, 0.226805, 0.225831, 0.224857, 0.223883, 0.222908, 0.221933, 0.220958, 0.219982, 0.219007, 0.218031, 0.217055, 0.216079, 0.215102, 0.214125, 0.213148, 0.212171, 0.211194, 0.210216, 0.209239, 0.208261, 0.207283, 0.206304, 0.205326, 0.204347, 0.203368, 0.202389, 0.201409, 0.200430, 0.199450, 0.198470, 0.197490, 0.196509, 0.195529, 0.194548, 0.193567, 0.192586, 0.191604, 0.190623, 0.189641, 0.188659, 0.187677, 0.186694, 0.185712, 0.184729, 0.183746, 0.182763, 0.181780, 0.180797, 0.179813, 0.178829, 0.177845, 0.176861, 0.175877, 0.174892, 0.173908, 0.172923, 0.171938, 0.170953, 0.169967, 0.168982, 0.167996, 0.167010, 0.166024, 0.165038, 0.164051, 0.163065, 0.162078, 0.161091, 0.160104, 0.159117, 0.158130, 0.157142, 0.156155, 0.155167, 0.154179, 0.153191, 0.152202, 0.151214, 0.150225, 0.149237, 0.148248, 0.147259, 0.146270, 0.145280, 0.144291, 0.143301, 0.142312, 0.141322, 0.140332, 0.139341, 0.138351, 0.137361, 0.136370, 0.135379, 0.134388, 0.133397, 0.132406, 0.131415, 0.130424, 0.129432, 0.128441, 0.127449, 0.126457, 0.125465, 0.124473, 0.123480, 0.122488, 0.121495, 0.120503, 0.119510, 0.118517, 0.117524, 0.116531, 0.115538, 0.114544, 0.113551, 0.112557, 0.111564, 0.110570, 0.109576, 0.108582, 0.107588, 0.106593, 0.105599, 0.104605, 0.103610, 0.102615, 0.101621, 0.100626, 0.099631, 0.098636, 0.097641, 0.096645, 0.095650, 0.094654, 0.093659, 0.092663, 0.091667, 0.090672, 0.089676, 0.088680, 0.087684, 0.086687, 0.085691, 0.084695, 0.083698, 0.082702, 0.081705, 0.080708, 0.079712, 0.078715, 0.077718, 0.076721, 0.075724, 0.074727, 0.073729, 0.072732, 0.071735, 0.070737, 0.069740, 0.068742, 0.067744, 0.066747, 0.065749, 0.064751, 0.063753, 0.062755, 0.061757, 0.060759, 0.059761, 0.058762, 0.057764, 0.056766, 0.055767, 0.054769, 0.053770, 0.052772, 0.051773, 0.050774, 0.049776, 0.048777, 0.047778, 0.046779, 0.045780, 0.044781, 0.043782, 0.042783, 0.041784, 0.040785, 0.039786, 0.038787, 0.037787, 0.036788, 0.035789, 0.034789, 0.033790, 0.032790, 0.031791, 0.030791, 0.029792, 0.028792, 0.027793, 0.026793, 0.025793, 0.024794, 0.023794, 0.022794, 0.021795, 0.020795, 0.019795, 0.018795, 0.017795, 0.016796, 0.015796, 0.014796, 0.013796, 0.012796, 0.011796, 0.010796, 0.009796, 0.008796, 0.007796, 0.006796, 0.005796, 0.004796, 0.003796, 0.002796, 0.001796, 0.000796, -0.000204, -0.001204, -0.002204, -0.003204, -0.004204, -0.005204, -0.006204, -0.007204, -0.008204, -0.009204, -0.010203, -0.011203, -0.012203, -0.013203, -0.014203, -0.015203, -0.016203, -0.017203, -0.018203, -0.019202, -0.020202, -0.021202, -0.022202, -0.023202, -0.024201, -0.025201, -0.026201, -0.027200, -0.028200, -0.029200, -0.030199, -0.031199, -0.032198, -0.033198, -0.034197, -0.035196, -0.036196, -0.037195, -0.038194, -0.039194, -0.040193, -0.041192, -0.042191, -0.043190, -0.044189, -0.045188, -0.046187, -0.047186, -0.048185, -0.049184, -0.050183, -0.051181, -0.052180, -0.053179, -0.054177, -0.055176, -0.056174, -0.057172, -0.058171, -0.059169, -0.060167, -0.061165, -0.062164, -0.063162, -0.064160, -0.065157, -0.066155, -0.067153, -0.068151, -0.069148, -0.070146, -0.071144, -0.072141, -0.073138, -0.074136, -0.075133, -0.076130, -0.077127, -0.078124, -0.079121, -0.080118, -0.081114, -0.082111, -0.083108, -0.084104, -0.085101, -0.086097, -0.087093, -0.088089, -0.089085, -0.090081, -0.091077, -0.092073, -0.093069, -0.094064, -0.095060, -0.096055, -0.097051, -0.098046, -0.099041, -0.100036, -0.101031, -0.102026, -0.103021, -0.104015, -0.105010, -0.106004, -0.106998, -0.107993, -0.108987, -0.109981, -0.110975, -0.111968, -0.112962, -0.113956, -0.114949, -0.115942, -0.116936, -0.117929, -0.118922, -0.119914, -0.120907, -0.121900, -0.122892, -0.123885, -0.124877, -0.125869, -0.126861, -0.127853, -0.128844, -0.129836, -0.130828, -0.131819, -0.132810, -0.133801, -0.134792, -0.135783, -0.136774, -0.137764, -0.138755, -0.139745, -0.140735, -0.141725, -0.142715, -0.143704, -0.144694, -0.145683, -0.146673, -0.147662, -0.148651, -0.149640, -0.150628, -0.151617, -0.152605, -0.153593, -0.154581, -0.155569, -0.156557, -0.157545, -0.158532, -0.159519, -0.160506, -0.161493, -0.162480, -0.163467, -0.164453, -0.165440, -0.166426, -0.167412, -0.168397, -0.169383, -0.170369, -0.171354, -0.172339, -0.173324, -0.174309, -0.175293, -0.176278, -0.177262, -0.178246, -0.179230, -0.180214, -0.181197, -0.182181, -0.183164, -0.184147, -0.185130, -0.186112, -0.187095, -0.188077, -0.189059, -0.190041, -0.191022, -0.192004, -0.192985, -0.193966, -0.194947, -0.195928, -0.196908, -0.197889, -0.198869, -0.199849, -0.200829, -0.201808, -0.202787, -0.203767, -0.204745, -0.205724, -0.206703, -0.207681, -0.208659, -0.209637, -0.210615, -0.211592, -0.212569, -0.213546, -0.214523, -0.215500, -0.216476, -0.217452, -0.218428, -0.219404, -0.220380, -0.221355, -0.222330, -0.223305, -0.224280, -0.225254, -0.226228, -0.227202, -0.228176, -0.229149, -0.230123, -0.231096, -0.232068, -0.233041, -0.234013, -0.234986, -0.235957, -0.236929, -0.237900, -0.238872, -0.239843, -0.240813, -0.241784, -0.242754, -0.243724, -0.244694, -0.245663, -0.246632, -0.247601, -0.248570, -0.249539, -0.250507, -0.251475, -0.252442, -0.253410, -0.254377, -0.255344, -0.256311, -0.257277, -0.258244, -0.259210, -0.260175, -0.261141, -0.262106, -0.263071, -0.264035, -0.265000, -0.265964, -0.266928, -0.267891, -0.268855, -0.269818, -0.270780, -0.271743, -0.272705, -0.273667, -0.274629, -0.275590, -0.276551, -0.277512, -0.278473, -0.279433, -0.280393, -0.281353, -0.282312, -0.283272, -0.284230, -0.285189, -0.286147, -0.287105, -0.288063, -0.289021, -0.289978, -0.290935, -0.291891, -0.292848, -0.293804, -0.294759, -0.295715, -0.296670, -0.297625, -0.298579, -0.299534, -0.300487, -0.301441, -0.302394, -0.303347, -0.304300, -0.305253, -0.306205, -0.307157, -0.308108, -0.309059, -0.310010, -0.310961, -0.311911, -0.312861, -0.313811, -0.314760, -0.315709, -0.316658, -0.317606, -0.318554, -0.319502, -0.320449, -0.321396, -0.322343, -0.323290, -0.324236, -0.325182, -0.326127, -0.327072, -0.328017, -0.328962, -0.329906, -0.330850, -0.331793, -0.332736, -0.333679, -0.334622, -0.335564, -0.336506, -0.337447, -0.338388, -0.339329, -0.340270, -0.341210, -0.342150, -0.343089, -0.344028, -0.344967, -0.345905, -0.346844, -0.347781, -0.348719, -0.349656, -0.350592, -0.351529, -0.352465, -0.353400, -0.354336, -0.355271, -0.356205, -0.357140, -0.358073, -0.359007, -0.359940, -0.360873, -0.361805, -0.362737, -0.363669, -0.364600, -0.365531, -0.366462, -0.367392, -0.368322, -0.369252, -0.370181, -0.371110, -0.372038, -0.372966, -0.373894, -0.374821, -0.375748, -0.376674, -0.377601, -0.378526, -0.379452, -0.380377, -0.381301, -0.382226, -0.383150, -0.384073, -0.384996, -0.385919, -0.386841, -0.387763, -0.388685, -0.389606, -0.390527, -0.391447, -0.392367, -0.393287, -0.394206, -0.395125, -0.396043, -0.396961, -0.397879, -0.398796, -0.399713, -0.400629, -0.401545, -0.402461, -0.403376, -0.404291, -0.405206, -0.406120, -0.407033, -0.407946, -0.408859, -0.409772, -0.410684, -0.411595, -0.412506, -0.413417, -0.414327, -0.415237, -0.416147, -0.417056, -0.417965, -0.418873, -0.419781, -0.420688, -0.421595, -0.422502, -0.423408, -0.424314, -0.425219, -0.426124, -0.427028, -0.427932, -0.428836, -0.429739, -0.430642, -0.431544, -0.432446, -0.433347, -0.434248, -0.435149, -0.436049, -0.436949, -0.437848, -0.438747, -0.439645, -0.440543, -0.441441, -0.442338, -0.443234, -0.444131, -0.445026, -0.445922, -0.446816, -0.447711, -0.448605, -0.449498, -0.450391, -0.451284, -0.452176, -0.453068, -0.453959, -0.454850, -0.455740, -0.456630, -0.457520, -0.458409, -0.459297, -0.460185, -0.461073, -0.461960, -0.462846, -0.463733, -0.464618, -0.465504, -0.466389, -0.467273, -0.468157, -0.469040, -0.469923, -0.470806, -0.471688, -0.472569, -0.473450, -0.474331, -0.475211, -0.476091, -0.476970, -0.477848, -0.478727, -0.479604, -0.480482, -0.481358, -0.482235, -0.483110, -0.483986, -0.484861, -0.485735, -0.486609, -0.487482, -0.488355, -0.489227, -0.490099, -0.490971, -0.491842, -0.492712, -0.493582, -0.494451, -0.495320, -0.496189, -0.497057, -0.497924, -0.498791, -0.499658, -0.500524, -0.501389, -0.502254, -0.503119, -0.503983, -0.504846, -0.505709, -0.506572, -0.507433, -0.508295, -0.509156, -0.510016, -0.510876, -0.511736, -0.512594, -0.513453, -0.514311, -0.515168, -0.516025, -0.516881, -0.517737, -0.518592, -0.519447, -0.520301, -0.521155, -0.522008, -0.522861, -0.523713, -0.524565, -0.525416, -0.526266, -0.527116, -0.527966, -0.528815, -0.529663, -0.530511, -0.531359, -0.532206, -0.533052, -0.533898, -0.534743, -0.535588, -0.536432, -0.537276, -0.538119, -0.538961, -0.539804, -0.540645, -0.541486, -0.542326, -0.543166, -0.544006, -0.544845, -0.545683, -0.546520, -0.547358, -0.548194, -0.549030, -0.549866, -0.550701, -0.551535, -0.552369, -0.553202, -0.554035, -0.554867, -0.555699, -0.556530, -0.557361, -0.558191, -0.559020, -0.559849, -0.560677, -0.561505, -0.562332, -0.563159, -0.563985, -0.564811, -0.565635, -0.566460, -0.567284, -0.568107, -0.568930, -0.569752, -0.570573, -0.571394, -0.572215, -0.573034, -0.573854, -0.574672, -0.575490, -0.576308, -0.577125, -0.577941, -0.578757, -0.579572, -0.580387, -0.581201, -0.582014, -0.582827, -0.583640, -0.584451, -0.585262, -0.586073, -0.586883, -0.587692, -0.588501, -0.589309, -0.590117, -0.590924, -0.591730, -0.592536, -0.593341, -0.594146, -0.594950, -0.595754, -0.596557, -0.597359, -0.598160, -0.598962, -0.599762, -0.600562, -0.601361, -0.602160, -0.602958, -0.603755, -0.604552, -0.605349, -0.606144, -0.606939, -0.607734, -0.608528, -0.609321, -0.610113, -0.610905, -0.611697, -0.612488, -0.613278, -0.614067, -0.614856, -0.615645, -0.616432, -0.617219, -0.618006, -0.618792, -0.619577, -0.620362, -0.621146, -0.621929, -0.622712, -0.623494, -0.624275, -0.625056, -0.625837, -0.626616, -0.627395, -0.628174, -0.628951, -0.629729, -0.630505, -0.631281, -0.632056, -0.632831, -0.633605, -0.634378, -0.635151, -0.635923, -0.636694, -0.637465, -0.638235, -0.639005, -0.639774, -0.640542, -0.641309, -0.642076, -0.642843, -0.643608, -0.644373, -0.645138, -0.645902, -0.646665, -0.647427, -0.648189, -0.648950, -0.649711, -0.650470, -0.651230, -0.651988, -0.652746, -0.653503, -0.654260, -0.655016, -0.655771, -0.656526, -0.657280, -0.658033, -0.658786, -0.659538, -0.660289, -0.661040, -0.661790, -0.662539, -0.663288, -0.664036, -0.664783, -0.665530, -0.666276, -0.667021, -0.667766, -0.668510, -0.669254, -0.669996, -0.670738, -0.671480, -0.672220, -0.672960, -0.673700, -0.674438, -0.675176, -0.675914, -0.676650, -0.677386, -0.678122, -0.678856, -0.679590, -0.680323, -0.681056, -0.681788, -0.682519, -0.683250, -0.683979, -0.684709, -0.685437, -0.686165, -0.686892, -0.687618, -0.688344, -0.689069, -0.689793, -0.690517, -0.691240, -0.691962, -0.692684, -0.693405, -0.694125, -0.694845, -0.695563, -0.696281, -0.696999, -0.697716, -0.698432, -0.699147, -0.699862, -0.700575, -0.701289, -0.702001, -0.702713, -0.703424, -0.704135, -0.704844, -0.705553, -0.706262, -0.706969, -0.707676, -0.708382, -0.709088, -0.709793, -0.710497, -0.711200, -0.711903, -0.712605, -0.713306, -0.714006, -0.714706, -0.715405, -0.716103, -0.716801, -0.717498, -0.718194, -0.718890, -0.719584, -0.720278, -0.720972, -0.721664, -0.722356, -0.723047, -0.723738, -0.724428, -0.725117, -0.725805, -0.726492, -0.727179, -0.727865, -0.728551, -0.729235, -0.729919, -0.730602, -0.731285, -0.731966, -0.732647, -0.733328, -0.734007, -0.734686, -0.735364, -0.736041, -0.736718, -0.737394, -0.738069, -0.738743, -0.739417, -0.740090, -0.740762, -0.741433, -0.742104, -0.742774, -0.743443, -0.744111, -0.744779, -0.745446, -0.746112, -0.746778, -0.747442, -0.748106, -0.748769, -0.749432, -0.750094, -0.750755, -0.751415, -0.752074, -0.752733, -0.753391, -0.754048, -0.754705, -0.755360, -0.756015, -0.756669, -0.757323, -0.757975, -0.758627, -0.759278, -0.759929, -0.760578, -0.761227, -0.761875, -0.762523, -0.763169, -0.763815, -0.764460, -0.765105, -0.765748, -0.766391, -0.767033, -0.767674, -0.768314, -0.768954, -0.769593, -0.770231, -0.770869, -0.771505, -0.772141, -0.772776, -0.773410, -0.774044, -0.774677, -0.775309, -0.775940, -0.776570, -0.777200, -0.777829, -0.778457, -0.779084, -0.779711, -0.780336, -0.780961, -0.781586, -0.782209, -0.782832, -0.783453, -0.784075, -0.784695, -0.785314, -0.785933, -0.786551, -0.787168, -0.787784, -0.788400, -0.789015, -0.789629, -0.790242, -0.790854, -0.791466, -0.792077, -0.792687, -0.793296, -0.793904, -0.794512, -0.795119, -0.795725, -0.796330, -0.796935, -0.797538, -0.798141, -0.798743, -0.799345, -0.799945, -0.800545, -0.801144, -0.801742, -0.802339, -0.802935, -0.803531, -0.804126, -0.804720, -0.805313, -0.805906, -0.806497, -0.807088, -0.807678, -0.808267, -0.808856, -0.809443, -0.810030, -0.810616, -0.811201, -0.811786, -0.812369, -0.812952, -0.813534, -0.814115, -0.814695, -0.815275, -0.815854, -0.816431, -0.817008, -0.817585, -0.818160, -0.818735, -0.819308, -0.819881, -0.820453, -0.821025, -0.821595, -0.822165, -0.822734, -0.823302, -0.823869, -0.824435, -0.825001, -0.825566, -0.826129, -0.826693, -0.827255, -0.827816, -0.828377, -0.828937, -0.829495, -0.830054, -0.830611, -0.831167, -0.831723, -0.832278, -0.832832, -0.833385, -0.833937, -0.834488, -0.835039, -0.835589, -0.836138, -0.836686, -0.837233, -0.837780, -0.838325, -0.838870, -0.839414, -0.839957, -0.840499, -0.841040, -0.841581, -0.842121, -0.842660, -0.843198, -0.843735, -0.844271, -0.844807, -0.845341, -0.845875, -0.846408, -0.846940, -0.847471, -0.848002, -0.848531, -0.849060, -0.849588, -0.850115, -0.850641, -0.851167, -0.851691, -0.852215, -0.852737, -0.853259, -0.853780, -0.854301, -0.854820, -0.855338, -0.855856, -0.856373, -0.856889, -0.857404, -0.857918, -0.858431, -0.858944, -0.859456, -0.859966, -0.860476, -0.860985, -0.861493, -0.862001, -0.862507, -0.863013, -0.863518, -0.864022, -0.864525, -0.865027, -0.865528, -0.866028, -0.866528, -0.867027, -0.867525, -0.868022, -0.868518, -0.869013, -0.869507, -0.870001, -0.870493, -0.870985, -0.871476, -0.871966, -0.872455, -0.872943, -0.873431, -0.873917, -0.874403, -0.874888, -0.875371, -0.875854, -0.876337, -0.876818, -0.877298, -0.877778, -0.878256, -0.878734, -0.879211, -0.879687, -0.880162, -0.880636, -0.881110, -0.881582, -0.882054, -0.882524, -0.882994, -0.883463, -0.883931, -0.884398, -0.884865, -0.885330, -0.885795, -0.886258, -0.886721, -0.887183, -0.887644, -0.888104, -0.888563, -0.889022, -0.889479, -0.889935, -0.890391, -0.890846, -0.891300, -0.891753, -0.892205, -0.892656, -0.893106, -0.893556, -0.894004, -0.894452, -0.894898, -0.895344, -0.895789, -0.896233, -0.896676, -0.897119, -0.897560, -0.898000, -0.898440, -0.898879, -0.899316, -0.899753, -0.900189, -0.900624, -0.901058, -0.901492, -0.901924, -0.902355, -0.902786, -0.903216, -0.903644, -0.904072, -0.904499, -0.904925, -0.905350, -0.905774, -0.906198, -0.906620, -0.907042, -0.907462, -0.907882, -0.908301, -0.908719, -0.909135, -0.909552, -0.909967, -0.910381, -0.910794, -0.911207, -0.911618, -0.912029, -0.912438, -0.912847, -0.913255, -0.913662, -0.914068, -0.914473, -0.914877, -0.915280, -0.915683, -0.916084, -0.916485, -0.916884, -0.917283, -0.917681, -0.918078, -0.918474, -0.918869, -0.919263, -0.919656, -0.920048, -0.920440, -0.920830, -0.921220, -0.921608, -0.921996, -0.922383, -0.922768, -0.923153, -0.923537, -0.923920, -0.924302, -0.924684, -0.925064, -0.925443, -0.925822, -0.926199, -0.926576, -0.926951, -0.927326, -0.927700, -0.928073, -0.928445, -0.928816, -0.929186, -0.929555, -0.929923, -0.930290, -0.930657, -0.931022, -0.931387, -0.931750, -0.932113, -0.932475, -0.932835, -0.933195, -0.933554, -0.933912, -0.934269, -0.934625, -0.934980, -0.935335, -0.935688, -0.936040, -0.936392, -0.936742, -0.937092, -0.937440, -0.937788, -0.938135, -0.938481, -0.938825, -0.939169, -0.939512, -0.939854, -0.940195, -0.940536, -0.940875, -0.941213, -0.941550, -0.941887, -0.942222, -0.942557, -0.942890, -0.943223, -0.943555, -0.943885, -0.944215, -0.944544, -0.944872, -0.945199, -0.945525, -0.945850, -0.946174, -0.946497, -0.946820, -0.947141, -0.947461, -0.947781, -0.948099, -0.948417, -0.948733, -0.949049, -0.949363, -0.949677, -0.949990, -0.950302, -0.950613, -0.950923, -0.951231, -0.951539, -0.951847, -0.952153, -0.952458, -0.952762, -0.953065, -0.953367, -0.953669, -0.953969, -0.954269, -0.954567, -0.954865, -0.955161, -0.955457, -0.955751, -0.956045, -0.956338, -0.956630, -0.956920, -0.957210, -0.957499, -0.957787, -0.958074, -0.958360, -0.958645, -0.958929, -0.959213, -0.959495, -0.959776, -0.960056, -0.960336, -0.960614, -0.960891, -0.961168, -0.961443, -0.961718, -0.961991, -0.962264, -0.962536, -0.962806, -0.963076, -0.963345, -0.963613, -0.963879, -0.964145, -0.964410, -0.964674, -0.964937, -0.965199, -0.965460, -0.965720, -0.965979, -0.966237, -0.966495, -0.966751, -0.967006, -0.967260, -0.967514, -0.967766, -0.968017, -0.968268, -0.968517, -0.968766, -0.969013, -0.969260, -0.969505, -0.969750, -0.969993, -0.970236, -0.970478, -0.970718, -0.970958, -0.971197, -0.971435, -0.971672, -0.971907, -0.972142, -0.972376, -0.972609, -0.972841, -0.973072, -0.973302, -0.973531, -0.973759, -0.973986, -0.974212, -0.974438, -0.974662, -0.974885, -0.975107, -0.975328, -0.975549, -0.975768, -0.975986, -0.976204, -0.976420, -0.976635, -0.976850, -0.977063, -0.977276, -0.977487, -0.977698, -0.977907, -0.978116, -0.978323, -0.978530, -0.978736, -0.978940, -0.979144, -0.979347, -0.979548, -0.979749, -0.979949, -0.980147, -0.980345, -0.980542, -0.980738, -0.980933, -0.981127, -0.981319, -0.981511, -0.981702, -0.981892, -0.982081, -0.982269, -0.982456, -0.982642, -0.982827, -0.983011, -0.983194, -0.983376, -0.983557, -0.983737, -0.983917, -0.984095, -0.984272, -0.984448, -0.984623, -0.984797, -0.984971, -0.985143, -0.985314, -0.985484, -0.985654, -0.985822, -0.985989, -0.986156, -0.986321, -0.986485, -0.986649, -0.986811, -0.986972, -0.987133, -0.987292, -0.987451, -0.987608, -0.987764, -0.987920, -0.988074, -0.988228, -0.988380, -0.988532, -0.988682, -0.988832, -0.988980, -0.989128, -0.989275, -0.989420, -0.989565, -0.989708, -0.989851, -0.989992, -0.990133, -0.990273, -0.990411, -0.990549, -0.990686, -0.990821, -0.990956, -0.991090, -0.991222, -0.991354, -0.991485, -0.991615, -0.991743, -0.991871, -0.991998, -0.992124, -0.992248, -0.992372, -0.992495, -0.992617, -0.992738, -0.992857, -0.992976, -0.993094, -0.993211, -0.993327, -0.993441, -0.993555, -0.993668, -0.993780, -0.993891, -0.994001, -0.994110, -0.994217, -0.994324, -0.994430, -0.994535, -0.994639, -0.994742, -0.994844, -0.994945, -0.995045, -0.995144, -0.995242, -0.995339, -0.995435, -0.995529, -0.995623, -0.995716, -0.995808, -0.995899, -0.995989, -0.996078, -0.996166, -0.996253, -0.996339, -0.996424, -0.996508, -0.996591, -0.996673, -0.996754, -0.996834, -0.996913, -0.996991, -0.997068, -0.997144, -0.997219, -0.997293, -0.997366, -0.997438, -0.997509, -0.997579, -0.997648, -0.997716, -0.997784, -0.997850, -0.997915, -0.997979, -0.998042, -0.998104, -0.998165, -0.998225, -0.998284, -0.998342, -0.998399, -0.998455, -0.998510, -0.998564, -0.998617, -0.998669, -0.998720, -0.998771, -0.998820, -0.998868, -0.998915, -0.998961, -0.999006, -0.999050, -0.999093, -0.999135, -0.999176, -0.999216, -0.999255, -0.999293, -0.999331, -0.999367, -0.999402, -0.999436, -0.999469, -0.999501, -0.999532, -0.999562, -0.999591, -0.999619, -0.999646, -0.999673, -0.999698, -0.999722, -0.999745, -0.999767, -0.999788, -0.999808, -0.999827, -0.999845, -0.999862, -0.999878, -0.999894, -0.999908, -0.999921, -0.999933, -0.999944, -0.999954, -0.999963, -0.999971, -0.999978, -0.999984, -0.999989, -0.999994, -0.999997, -0.999999, -1.000000, -1.000000};
+const float t_sin_precalc[3143] = {0.000000, 0.001000, 0.002000, 0.003000, 0.004000, 0.005000, 0.006000, 0.007000, 0.008000, 0.009000, 0.010000, 0.011000, 0.012000, 0.013000, 0.014000, 0.014999, 0.015999, 0.016999, 0.017999, 0.018999, 0.019999, 0.020998, 0.021998, 0.022998, 0.023998, 0.024997, 0.025997, 0.026997, 0.027996, 0.028996, 0.029996, 0.030995, 0.031995, 0.032994, 0.033993, 0.034993, 0.035992, 0.036992, 0.037991, 0.038990, 0.039989, 0.040989, 0.041988, 0.042987, 0.043986, 0.044985, 0.045984, 0.046983, 0.047982, 0.048980, 0.049979, 0.050978, 0.051977, 0.052975, 0.053974, 0.054972, 0.055971, 0.056969, 0.057967, 0.058966, 0.059964, 0.060962, 0.061960, 0.062958, 0.063956, 0.064954, 0.065952, 0.066950, 0.067948, 0.068945, 0.069943, 0.070940, 0.071938, 0.072935, 0.073932, 0.074930, 0.075927, 0.076924, 0.077921, 0.078918, 0.079915, 0.080911, 0.081908, 0.082905, 0.083901, 0.084898, 0.085894, 0.086890, 0.087886, 0.088883, 0.089879, 0.090874, 0.091870, 0.092866, 0.093862, 0.094857, 0.095853, 0.096848, 0.097843, 0.098838, 0.099833, 0.100828, 0.101823, 0.102818, 0.103813, 0.104807, 0.105802, 0.106796, 0.107790, 0.108784, 0.109778, 0.110772, 0.111766, 0.112760, 0.113753, 0.114747, 0.115740, 0.116733, 0.117726, 0.118719, 0.119712, 0.120705, 0.121698, 0.122690, 0.123682, 0.124675, 0.125667, 0.126659, 0.127651, 0.128643, 0.129634, 0.130626, 0.131617, 0.132608, 0.133599, 0.134590, 0.135581, 0.136572, 0.137562, 0.138553, 0.139543, 0.140533, 0.141523, 0.142513, 0.143503, 0.144492, 0.145482, 0.146471, 0.147460, 0.148449, 0.149438, 0.150427, 0.151415, 0.152404, 0.153392, 0.154380, 0.155368, 0.156356, 0.157343, 0.158331, 0.159318, 0.160305, 0.161292, 0.162279, 0.163266, 0.164252, 0.165239, 0.166225, 0.167211, 0.168197, 0.169182, 0.170168, 0.171153, 0.172138, 0.173123, 0.174108, 0.175093, 0.176077, 0.177062, 0.178046, 0.179030, 0.180013, 0.180997, 0.181980, 0.182964, 0.183947, 0.184929, 0.185912, 0.186895, 0.187877, 0.188859, 0.189841, 0.190823, 0.191804, 0.192785, 0.193767, 0.194747, 0.195728, 0.196709, 0.197689, 0.198669, 0.199649, 0.200629, 0.201609, 0.202588, 0.203567, 0.204546, 0.205525, 0.206503, 0.207482, 0.208460, 0.209438, 0.210416, 0.211393, 0.212370, 0.213347, 0.214324, 0.215301, 0.216277, 0.217254, 0.218230, 0.219205, 0.220181, 0.221156, 0.222131, 0.223106, 0.224081, 0.225056, 0.226030, 0.227004, 0.227978, 0.228951, 0.229924, 0.230897, 0.231870, 0.232843, 0.233815, 0.234788, 0.235759, 0.236731, 0.237703, 0.238674, 0.239645, 0.240616, 0.241586, 0.242556, 0.243526, 0.244496, 0.245466, 0.246435, 0.247404, 0.248373, 0.249341, 0.250310, 0.251278, 0.252245, 0.253213, 0.254180, 0.255147, 0.256114, 0.257081, 0.258047, 0.259013, 0.259979, 0.260944, 0.261909, 0.262874, 0.263839, 0.264803, 0.265768, 0.266731, 0.267695, 0.268658, 0.269622, 0.270584, 0.271547, 0.272509, 0.273471, 0.274433, 0.275394, 0.276356, 0.277317, 0.278277, 0.279238, 0.280198, 0.281157, 0.282117, 0.283076, 0.284035, 0.284994, 0.285952, 0.286910, 0.287868, 0.288826, 0.289783, 0.290740, 0.291697, 0.292653, 0.293609, 0.294565, 0.295520, 0.296475, 0.297430, 0.298385, 0.299339, 0.300293, 0.301247, 0.302200, 0.303153, 0.304106, 0.305059, 0.306011, 0.306963, 0.307914, 0.308866, 0.309816, 0.310767, 0.311717, 0.312667, 0.313617, 0.314567, 0.315516, 0.316464, 0.317413, 0.318361, 0.319309, 0.320256, 0.321203, 0.322150, 0.323097, 0.324043, 0.324989, 0.325934, 0.326880, 0.327825, 0.328769, 0.329713, 0.330657, 0.331601, 0.332544, 0.333487, 0.334430, 0.335372, 0.336314, 0.337255, 0.338197, 0.339138, 0.340078, 0.341018, 0.341958, 0.342898, 0.343837, 0.344776, 0.345714, 0.346653, 0.347590, 0.348528, 0.349465, 0.350402, 0.351338, 0.352274, 0.353210, 0.354145, 0.355080, 0.356015, 0.356949, 0.357883, 0.358817, 0.359750, 0.360683, 0.361615, 0.362548, 0.363479, 0.364411, 0.365342, 0.366273, 0.367203, 0.368133, 0.369062, 0.369992, 0.370920, 0.371849, 0.372777, 0.373705, 0.374632, 0.375559, 0.376486, 0.377412, 0.378338, 0.379263, 0.380188, 0.381113, 0.382037, 0.382961, 0.383885, 0.384808, 0.385731, 0.386653, 0.387575, 0.388497, 0.389418, 0.390339, 0.391260, 0.392180, 0.393099, 0.394019, 0.394938, 0.395856, 0.396774, 0.397692, 0.398609, 0.399526, 0.400443, 0.401359, 0.402275, 0.403190, 0.404105, 0.405019, 0.405933, 0.406847, 0.407760, 0.408673, 0.409586, 0.410498, 0.411410, 0.412321, 0.413232, 0.414142, 0.415052, 0.415962, 0.416871, 0.417780, 0.418688, 0.419596, 0.420503, 0.421410, 0.422317, 0.423223, 0.424129, 0.425035, 0.425939, 0.426844, 0.427748, 0.428652, 0.429555, 0.430458, 0.431360, 0.432262, 0.433164, 0.434065, 0.434966, 0.435866, 0.436766, 0.437665, 0.438564, 0.439462, 0.440360, 0.441258, 0.442155, 0.443052, 0.443948, 0.444844, 0.445739, 0.446634, 0.447529, 0.448423, 0.449316, 0.450210, 0.451102, 0.451994, 0.452886, 0.453778, 0.454669, 0.455559, 0.456449, 0.457338, 0.458228, 0.459116, 0.460004, 0.460892, 0.461779, 0.462666, 0.463552, 0.464438, 0.465323, 0.466208, 0.467093, 0.467977, 0.468860, 0.469743, 0.470626, 0.471508, 0.472390, 0.473271, 0.474151, 0.475032, 0.475911, 0.476791, 0.477669, 0.478548, 0.479426, 0.480303, 0.481180, 0.482056, 0.482932, 0.483807, 0.484682, 0.485557, 0.486431, 0.487304, 0.488177, 0.489050, 0.489922, 0.490793, 0.491664, 0.492535, 0.493405, 0.494274, 0.495144, 0.496012, 0.496880, 0.497748, 0.498615, 0.499481, 0.500347, 0.501213, 0.502078, 0.502943, 0.503807, 0.504670, 0.505533, 0.506396, 0.507258, 0.508119, 0.508981, 0.509841, 0.510701, 0.511561, 0.512420, 0.513278, 0.514136, 0.514993, 0.515850, 0.516707, 0.517563, 0.518418, 0.519273, 0.520127, 0.520981, 0.521834, 0.522687, 0.523539, 0.524391, 0.525242, 0.526093, 0.526943, 0.527793, 0.528642, 0.529491, 0.530339, 0.531186, 0.532033, 0.532880, 0.533726, 0.534571, 0.535416, 0.536260, 0.537104, 0.537947, 0.538790, 0.539632, 0.540474, 0.541315, 0.542155, 0.542995, 0.543835, 0.544674, 0.545512, 0.546350, 0.547187, 0.548024, 0.548860, 0.549696, 0.550531, 0.551365, 0.552199, 0.553033, 0.553866, 0.554698, 0.555530, 0.556361, 0.557192, 0.558022, 0.558851, 0.559680, 0.560509, 0.561337, 0.562164, 0.562991, 0.563817, 0.564642, 0.565468, 0.566292, 0.567116, 0.567939, 0.568762, 0.569584, 0.570406, 0.571227, 0.572048, 0.572867, 0.573687, 0.574506, 0.575324, 0.576141, 0.576959, 0.577775, 0.578591, 0.579406, 0.580221, 0.581035, 0.581849, 0.582662, 0.583474, 0.584286, 0.585097, 0.585908, 0.586718, 0.587528, 0.588336, 0.589145, 0.589952, 0.590760, 0.591566, 0.592372, 0.593178, 0.593982, 0.594786, 0.595590, 0.596393, 0.597195, 0.597997, 0.598798, 0.599599, 0.600399, 0.601198, 0.601997, 0.602795, 0.603593, 0.604390, 0.605186, 0.605982, 0.606777, 0.607572, 0.608366, 0.609159, 0.609952, 0.610744, 0.611536, 0.612327, 0.613117, 0.613907, 0.614696, 0.615484, 0.616272, 0.617059, 0.617846, 0.618632, 0.619417, 0.620202, 0.620986, 0.621769, 0.622552, 0.623335, 0.624116, 0.624897, 0.625678, 0.626457, 0.627237, 0.628015, 0.628793, 0.629570, 0.630347, 0.631123, 0.631898, 0.632673, 0.633447, 0.634221, 0.634993, 0.635766, 0.636537, 0.637308, 0.638078, 0.638848, 0.639617, 0.640385, 0.641153, 0.641920, 0.642687, 0.643453, 0.644218, 0.644982, 0.645746, 0.646509, 0.647272, 0.648034, 0.648795, 0.649556, 0.650316, 0.651075, 0.651834, 0.652592, 0.653349, 0.654106, 0.654862, 0.655617, 0.656372, 0.657126, 0.657880, 0.658633, 0.659385, 0.660136, 0.660887, 0.661637, 0.662387, 0.663135, 0.663884, 0.664631, 0.665378, 0.666124, 0.666870, 0.667614, 0.668359, 0.669102, 0.669845, 0.670587, 0.671329, 0.672069, 0.672810, 0.673549, 0.674288, 0.675026, 0.675763, 0.676500, 0.677236, 0.677972, 0.678707, 0.679441, 0.680174, 0.680907, 0.681639, 0.682370, 0.683101, 0.683831, 0.684560, 0.685289, 0.686017, 0.686744, 0.687470, 0.688196, 0.688921, 0.689646, 0.690370, 0.691093, 0.691815, 0.692537, 0.693258, 0.693978, 0.694698, 0.695417, 0.696135, 0.696853, 0.697570, 0.698286, 0.699001, 0.699716, 0.700430, 0.701144, 0.701856, 0.702568, 0.703279, 0.703990, 0.704700, 0.705409, 0.706117, 0.706825, 0.707532, 0.708239, 0.708944, 0.709649, 0.710353, 0.711057, 0.711760, 0.712462, 0.713163, 0.713864, 0.714564, 0.715263, 0.715961, 0.716659, 0.717356, 0.718052, 0.718748, 0.719443, 0.720137, 0.720831, 0.721523, 0.722215, 0.722907, 0.723597, 0.724287, 0.724976, 0.725665, 0.726352, 0.727039, 0.727726, 0.728411, 0.729096, 0.729780, 0.730463, 0.731146, 0.731828, 0.732509, 0.733189, 0.733869, 0.734548, 0.735226, 0.735903, 0.736580, 0.737256, 0.737931, 0.738606, 0.739280, 0.739953, 0.740625, 0.741297, 0.741967, 0.742637, 0.743307, 0.743975, 0.744643, 0.745310, 0.745977, 0.746642, 0.747307, 0.747971, 0.748634, 0.749297, 0.749959, 0.750620, 0.751280, 0.751940, 0.752599, 0.753257, 0.753914, 0.754571, 0.755227, 0.755882, 0.756536, 0.757190, 0.757843, 0.758495, 0.759146, 0.759796, 0.760446, 0.761095, 0.761744, 0.762391, 0.763038, 0.763684, 0.764329, 0.764973, 0.765617, 0.766260, 0.766902, 0.767544, 0.768184, 0.768824, 0.769463, 0.770101, 0.770739, 0.771376, 0.772012, 0.772647, 0.773281, 0.773915, 0.774548, 0.775180, 0.775811, 0.776442, 0.777072, 0.777701, 0.778329, 0.778956, 0.779583, 0.780209, 0.780834, 0.781459, 0.782082, 0.782705, 0.783327, 0.783948, 0.784569, 0.785188, 0.785807, 0.786425, 0.787042, 0.787659, 0.788275, 0.788890, 0.789504, 0.790117, 0.790730, 0.791341, 0.791952, 0.792563, 0.793172, 0.793781, 0.794388, 0.794995, 0.795602, 0.796207, 0.796812, 0.797415, 0.798019, 0.798621, 0.799222, 0.799823, 0.800423, 0.801022, 0.801620, 0.802217, 0.802814, 0.803410, 0.804005, 0.804599, 0.805192, 0.805785, 0.806377, 0.806968, 0.807558, 0.808147, 0.808736, 0.809324, 0.809911, 0.810497, 0.811082, 0.811667, 0.812251, 0.812833, 0.813416, 0.813997, 0.814577, 0.815157, 0.815736, 0.816314, 0.816891, 0.817467, 0.818043, 0.818618, 0.819192, 0.819765, 0.820337, 0.820908, 0.821479, 0.822049, 0.822618, 0.823186, 0.823753, 0.824320, 0.824886, 0.825451, 0.826015, 0.826578, 0.827140, 0.827702, 0.828263, 0.828823, 0.829382, 0.829940, 0.830497, 0.831054, 0.831610, 0.832165, 0.832719, 0.833272, 0.833825, 0.834376, 0.834927, 0.835477, 0.836026, 0.836574, 0.837122, 0.837668, 0.838214, 0.838759, 0.839303, 0.839846, 0.840389, 0.840930, 0.841471, 0.842011, 0.842550, 0.843088, 0.843625, 0.844162, 0.844698, 0.845232, 0.845766, 0.846300, 0.846832, 0.847363, 0.847894, 0.848424, 0.848953, 0.849481, 0.850008, 0.850534, 0.851060, 0.851584, 0.852108, 0.852631, 0.853153, 0.853674, 0.854195, 0.854714, 0.855233, 0.855751, 0.856268, 0.856784, 0.857299, 0.857813, 0.858327, 0.858840, 0.859351, 0.859862, 0.860372, 0.860882, 0.861390, 0.861898, 0.862404, 0.862910, 0.863415, 0.863919, 0.864422, 0.864925, 0.865426, 0.865927, 0.866426, 0.866925, 0.867423, 0.867920, 0.868417, 0.868912, 0.869407, 0.869900, 0.870393, 0.870885, 0.871376, 0.871866, 0.872355, 0.872844, 0.873331, 0.873818, 0.874304, 0.874789, 0.875273, 0.875756, 0.876239, 0.876720, 0.877201, 0.877680, 0.878159, 0.878637, 0.879114, 0.879590, 0.880065, 0.880540, 0.881013, 0.881486, 0.881958, 0.882429, 0.882899, 0.883368, 0.883836, 0.884303, 0.884770, 0.885235, 0.885700, 0.886164, 0.886627, 0.887089, 0.887550, 0.888010, 0.888470, 0.888928, 0.889386, 0.889843, 0.890298, 0.890753, 0.891207, 0.891661, 0.892113, 0.892564, 0.893015, 0.893464, 0.893913, 0.894361, 0.894808, 0.895254, 0.895699, 0.896143, 0.896586, 0.897029, 0.897470, 0.897911, 0.898351, 0.898789, 0.899227, 0.899664, 0.900100, 0.900536, 0.900970, 0.901403, 0.901836, 0.902268, 0.902698, 0.903128, 0.903557, 0.903985, 0.904412, 0.904838, 0.905264, 0.905688, 0.906112, 0.906534, 0.906956, 0.907377, 0.907796, 0.908215, 0.908633, 0.909051, 0.909467, 0.909882, 0.910297, 0.910710, 0.911123, 0.911534, 0.911945, 0.912355, 0.912764, 0.913172, 0.913579, 0.913985, 0.914391, 0.914795, 0.915198, 0.915601, 0.916003, 0.916403, 0.916803, 0.917202, 0.917600, 0.917997, 0.918393, 0.918788, 0.919183, 0.919576, 0.919968, 0.920360, 0.920751, 0.921140, 0.921529, 0.921917, 0.922304, 0.922690, 0.923075, 0.923459, 0.923842, 0.924225, 0.924606, 0.924986, 0.925366, 0.925745, 0.926122, 0.926499, 0.926875, 0.927250, 0.927624, 0.927997, 0.928369, 0.928740, 0.929110, 0.929480, 0.929848, 0.930216, 0.930582, 0.930948, 0.931313, 0.931676, 0.932039, 0.932401, 0.932762, 0.933122, 0.933481, 0.933839, 0.934196, 0.934553, 0.934908, 0.935263, 0.935616, 0.935969, 0.936320, 0.936671, 0.937021, 0.937369, 0.937717, 0.938064, 0.938410, 0.938755, 0.939099, 0.939443, 0.939785, 0.940126, 0.940466, 0.940806, 0.941144, 0.941482, 0.941818, 0.942154, 0.942489, 0.942823, 0.943155, 0.943487, 0.943818, 0.944148, 0.944477, 0.944805, 0.945133, 0.945459, 0.945784, 0.946108, 0.946432, 0.946754, 0.947076, 0.947396, 0.947716, 0.948034, 0.948352, 0.948669, 0.948985, 0.949299, 0.949613, 0.949926, 0.950238, 0.950549, 0.950859, 0.951169, 0.951477, 0.951784, 0.952090, 0.952396, 0.952700, 0.953004, 0.953306, 0.953608, 0.953908, 0.954208, 0.954506, 0.954804, 0.955101, 0.955397, 0.955692, 0.955985, 0.956278, 0.956570, 0.956861, 0.957151, 0.957441, 0.957729, 0.958016, 0.958302, 0.958587, 0.958872, 0.959155, 0.959437, 0.959719, 0.959999, 0.960279, 0.960557, 0.960835, 0.961112, 0.961387, 0.961662, 0.961936, 0.962209, 0.962480, 0.962751, 0.963021, 0.963290, 0.963558, 0.963825, 0.964091, 0.964356, 0.964620, 0.964884, 0.965146, 0.965407, 0.965667, 0.965927, 0.966185, 0.966442, 0.966699, 0.966954, 0.967209, 0.967462, 0.967715, 0.967966, 0.968217, 0.968466, 0.968715, 0.968963, 0.969210, 0.969455, 0.969700, 0.969944, 0.970187, 0.970429, 0.970669, 0.970909, 0.971148, 0.971386, 0.971623, 0.971859, 0.972095, 0.972329, 0.972562, 0.972794, 0.973025, 0.973255, 0.973485, 0.973713, 0.973940, 0.974166, 0.974392, 0.974616, 0.974840, 0.975062, 0.975283, 0.975504, 0.975723, 0.975942, 0.976159, 0.976376, 0.976592, 0.976806, 0.977020, 0.977232, 0.977444, 0.977655, 0.977865, 0.978073, 0.978281, 0.978488, 0.978694, 0.978899, 0.979102, 0.979305, 0.979507, 0.979708, 0.979908, 0.980107, 0.980305, 0.980502, 0.980698, 0.980893, 0.981087, 0.981280, 0.981472, 0.981663, 0.981854, 0.982043, 0.982231, 0.982418, 0.982604, 0.982789, 0.982974, 0.983157, 0.983339, 0.983521, 0.983701, 0.983880, 0.984058, 0.984236, 0.984412, 0.984588, 0.984762, 0.984935, 0.985108, 0.985279, 0.985450, 0.985619, 0.985788, 0.985955, 0.986122, 0.986287, 0.986452, 0.986615, 0.986778, 0.986940, 0.987100, 0.987260, 0.987418, 0.987576, 0.987733, 0.987888, 0.988043, 0.988197, 0.988349, 0.988501, 0.988652, 0.988801, 0.988950, 0.989098, 0.989245, 0.989391, 0.989535, 0.989679, 0.989822, 0.989964, 0.990105, 0.990244, 0.990383, 0.990521, 0.990658, 0.990794, 0.990929, 0.991063, 0.991196, 0.991327, 0.991458, 0.991588, 0.991717, 0.991845, 0.991972, 0.992098, 0.992223, 0.992347, 0.992470, 0.992592, 0.992713, 0.992833, 0.992952, 0.993070, 0.993187, 0.993303, 0.993418, 0.993532, 0.993645, 0.993757, 0.993868, 0.993978, 0.994088, 0.994196, 0.994303, 0.994409, 0.994514, 0.994618, 0.994721, 0.994823, 0.994924, 0.995024, 0.995124, 0.995222, 0.995319, 0.995415, 0.995510, 0.995604, 0.995698, 0.995790, 0.995881, 0.995971, 0.996060, 0.996148, 0.996236, 0.996322, 0.996407, 0.996491, 0.996574, 0.996657, 0.996738, 0.996818, 0.996897, 0.996975, 0.997053, 0.997129, 0.997204, 0.997278, 0.997352, 0.997424, 0.997495, 0.997565, 0.997634, 0.997703, 0.997770, 0.997836, 0.997901, 0.997966, 0.998029, 0.998091, 0.998152, 0.998213, 0.998272, 0.998330, 0.998388, 0.998444, 0.998499, 0.998553, 0.998607, 0.998659, 0.998710, 0.998760, 0.998810, 0.998858, 0.998905, 0.998952, 0.998997, 0.999041, 0.999084, 0.999127, 0.999168, 0.999208, 0.999248, 0.999286, 0.999323, 0.999359, 0.999395, 0.999429, 0.999462, 0.999495, 0.999526, 0.999556, 0.999585, 0.999614, 0.999641, 0.999667, 0.999693, 0.999717, 0.999740, 0.999762, 0.999784, 0.999804, 0.999823, 0.999842, 0.999859, 0.999875, 0.999891, 0.999905, 0.999918, 0.999930, 0.999942, 0.999952, 0.999961, 0.999970, 0.999977, 0.999983, 0.999988, 0.999993, 0.999996, 0.999998, 1.000000, 1.000000, 0.999999, 0.999998, 0.999995, 0.999991, 0.999986, 0.999981, 0.999974, 0.999966, 0.999958, 0.999948, 0.999937, 0.999926, 0.999913, 0.999899, 0.999884, 0.999869, 0.999852, 0.999834, 0.999816, 0.999796, 0.999775, 0.999754, 0.999731, 0.999707, 0.999682, 0.999657, 0.999630, 0.999602, 0.999574, 0.999544, 0.999513, 0.999482, 0.999449, 0.999415, 0.999380, 0.999345, 0.999308, 0.999270, 0.999232, 0.999192, 0.999151, 0.999110, 0.999067, 0.999023, 0.998978, 0.998933, 0.998886, 0.998838, 0.998790, 0.998740, 0.998689, 0.998638, 0.998585, 0.998531, 0.998477, 0.998421, 0.998364, 0.998307, 0.998248, 0.998188, 0.998128, 0.998066, 0.998003, 0.997940, 0.997875, 0.997809, 0.997743, 0.997675, 0.997606, 0.997537, 0.997466, 0.997394, 0.997322, 0.997248, 0.997174, 0.997098, 0.997021, 0.996944, 0.996865, 0.996785, 0.996705, 0.996623, 0.996541, 0.996457, 0.996372, 0.996287, 0.996200, 0.996113, 0.996024, 0.995934, 0.995844, 0.995752, 0.995660, 0.995566, 0.995472, 0.995376, 0.995279, 0.995182, 0.995083, 0.994984, 0.994883, 0.994782, 0.994679, 0.994576, 0.994471, 0.994366, 0.994259, 0.994152, 0.994043, 0.993934, 0.993823, 0.993712, 0.993599, 0.993486, 0.993371, 0.993256, 0.993140, 0.993022, 0.992904, 0.992784, 0.992664, 0.992542, 0.992420, 0.992297, 0.992172, 0.992047, 0.991921, 0.991793, 0.991665, 0.991535, 0.991405, 0.991274, 0.991142, 0.991008, 0.990874, 0.990739, 0.990602, 0.990465, 0.990327, 0.990188, 0.990047, 0.989906, 0.989764, 0.989621, 0.989476, 0.989331, 0.989185, 0.989038, 0.988890, 0.988741, 0.988590, 0.988439, 0.988287, 0.988134, 0.987980, 0.987825, 0.987669, 0.987512, 0.987354, 0.987195, 0.987035, 0.986874, 0.986712, 0.986549, 0.986385, 0.986220, 0.986054, 0.985887, 0.985719, 0.985550, 0.985380, 0.985210, 0.985038, 0.984865, 0.984691, 0.984516, 0.984340, 0.984164, 0.983986, 0.983807, 0.983627, 0.983447, 0.983265, 0.983082, 0.982899, 0.982714, 0.982529, 0.982342, 0.982154, 0.981966, 0.981776, 0.981586, 0.981394, 0.981202, 0.981008, 0.980814, 0.980618, 0.980422, 0.980224, 0.980026, 0.979827, 0.979626, 0.979425, 0.979223, 0.979020, 0.978815, 0.978610, 0.978404, 0.978197, 0.977988, 0.977779, 0.977569, 0.977358, 0.977146, 0.976933, 0.976719, 0.976504, 0.976288, 0.976071, 0.975853, 0.975634, 0.975414, 0.975193, 0.974971, 0.974749, 0.974525, 0.974300, 0.974074, 0.973848, 0.973620, 0.973391, 0.973162, 0.972931, 0.972699, 0.972467, 0.972233, 0.971999, 0.971763, 0.971527, 0.971290, 0.971051, 0.970812, 0.970571, 0.970330, 0.970088, 0.969845, 0.969600, 0.969355, 0.969109, 0.968862, 0.968614, 0.968365, 0.968115, 0.967864, 0.967612, 0.967359, 0.967105, 0.966850, 0.966594, 0.966338, 0.966080, 0.965821, 0.965561, 0.965301, 0.965039, 0.964777, 0.964513, 0.964248, 0.963983, 0.963717, 0.963449, 0.963181, 0.962911, 0.962641, 0.962370, 0.962098, 0.961824, 0.961550, 0.961275, 0.960999, 0.960722, 0.960444, 0.960165, 0.959885, 0.959604, 0.959323, 0.959040, 0.958756, 0.958471, 0.958186, 0.957899, 0.957611, 0.957323, 0.957033, 0.956743, 0.956451, 0.956159, 0.955866, 0.955572, 0.955276, 0.954980, 0.954683, 0.954385, 0.954086, 0.953786, 0.953485, 0.953183, 0.952880, 0.952576, 0.952271, 0.951966, 0.951659, 0.951351, 0.951043, 0.950733, 0.950423, 0.950111, 0.949799, 0.949486, 0.949171, 0.948856, 0.948540, 0.948223, 0.947905, 0.947586, 0.947266, 0.946945, 0.946623, 0.946300, 0.945976, 0.945652, 0.945326, 0.944999, 0.944672, 0.944343, 0.944014, 0.943684, 0.943352, 0.943020, 0.942687, 0.942353, 0.942017, 0.941681, 0.941344, 0.941007, 0.940668, 0.940328, 0.939987, 0.939645, 0.939303, 0.938959, 0.938615, 0.938269, 0.937923, 0.937576, 0.937227, 0.936878, 0.936528, 0.936177, 0.935825, 0.935472, 0.935118, 0.934763, 0.934408, 0.934051, 0.933693, 0.933335, 0.932975, 0.932615, 0.932254, 0.931891, 0.931528, 0.931164, 0.930799, 0.930433, 0.930066, 0.929698, 0.929329, 0.928960, 0.928589, 0.928217, 0.927845, 0.927472, 0.927097, 0.926722, 0.926346, 0.925969, 0.925591, 0.925212, 0.924832, 0.924451, 0.924069, 0.923686, 0.923303, 0.922918, 0.922533, 0.922146, 0.921759, 0.921371, 0.920982, 0.920592, 0.920201, 0.919809, 0.919416, 0.919022, 0.918627, 0.918232, 0.917835, 0.917438, 0.917040, 0.916640, 0.916240, 0.915839, 0.915437, 0.915034, 0.914630, 0.914226, 0.913820, 0.913413, 0.913006, 0.912597, 0.912188, 0.911778, 0.911367, 0.910955, 0.910542, 0.910128, 0.909713, 0.909297, 0.908881, 0.908463, 0.908045, 0.907626, 0.907205, 0.906784, 0.906362, 0.905939, 0.905515, 0.905091, 0.904665, 0.904238, 0.903811, 0.903382, 0.902953, 0.902523, 0.902092, 0.901660, 0.901227, 0.900793, 0.900358, 0.899923, 0.899486, 0.899049, 0.898611, 0.898172, 0.897731, 0.897290, 0.896849, 0.896406, 0.895962, 0.895517, 0.895072, 0.894626, 0.894178, 0.893730, 0.893281, 0.892831, 0.892380, 0.891929, 0.891476, 0.891023, 0.890568, 0.890113, 0.889657, 0.889200, 0.888742, 0.888283, 0.887823, 0.887362, 0.886901, 0.886438, 0.885975, 0.885511, 0.885046, 0.884580, 0.884113, 0.883645, 0.883177, 0.882707, 0.882237, 0.881766, 0.881294, 0.880821, 0.880347, 0.879872, 0.879396, 0.878920, 0.878442, 0.877964, 0.877485, 0.877005, 0.876524, 0.876042, 0.875559, 0.875076, 0.874591, 0.874106, 0.873620, 0.873133, 0.872645, 0.872156, 0.871667, 0.871176, 0.870685, 0.870192, 0.869699, 0.869205, 0.868710, 0.868215, 0.867718, 0.867220, 0.866722, 0.866223, 0.865723, 0.865222, 0.864720, 0.864217, 0.863714, 0.863209, 0.862704, 0.862198, 0.861691, 0.861183, 0.860674, 0.860165, 0.859654, 0.859143, 0.858631, 0.858118, 0.857604, 0.857089, 0.856574, 0.856057, 0.855540, 0.855022, 0.854503, 0.853983, 0.853462, 0.852940, 0.852418, 0.851895, 0.851371, 0.850846, 0.850320, 0.849793, 0.849266, 0.848737, 0.848208, 0.847678, 0.847147, 0.846615, 0.846082, 0.845549, 0.845015, 0.844480, 0.843944, 0.843407, 0.842869, 0.842330, 0.841791, 0.841251, 0.840710, 0.840168, 0.839625, 0.839082, 0.838537, 0.837992, 0.837446, 0.836899, 0.836351, 0.835802, 0.835253, 0.834703, 0.834152, 0.833600, 0.833047, 0.832493, 0.831939, 0.831383, 0.830827, 0.830270, 0.829713, 0.829154, 0.828595, 0.828034, 0.827473, 0.826911, 0.826349, 0.825785, 0.825221, 0.824655, 0.824089, 0.823522, 0.822955, 0.822386, 0.821817, 0.821247, 0.820676, 0.820104, 0.819531, 0.818958, 0.818384, 0.817809, 0.817233, 0.816656, 0.816078, 0.815500, 0.814921, 0.814341, 0.813760, 0.813178, 0.812596, 0.812013, 0.811429, 0.810844, 0.810258, 0.809672, 0.809085, 0.808496, 0.807907, 0.807318, 0.806727, 0.806136, 0.805544, 0.804951, 0.804357, 0.803763, 0.803167, 0.802571, 0.801974, 0.801376, 0.800778, 0.800178, 0.799578, 0.798977, 0.798376, 0.797773, 0.797170, 0.796565, 0.795961, 0.795355, 0.794748, 0.794141, 0.793533, 0.792924, 0.792314, 0.791704, 0.791092, 0.790480, 0.789867, 0.789254, 0.788639, 0.788024, 0.787408, 0.786791, 0.786173, 0.785555, 0.784936, 0.784316, 0.783695, 0.783074, 0.782451, 0.781828, 0.781204, 0.780580, 0.779954, 0.779328, 0.778701, 0.778073, 0.777445, 0.776815, 0.776185, 0.775554, 0.774923, 0.774290, 0.773657, 0.773023, 0.772388, 0.771753, 0.771116, 0.770479, 0.769841, 0.769203, 0.768563, 0.767923, 0.767282, 0.766641, 0.765998, 0.765355, 0.764711, 0.764066, 0.763421, 0.762774, 0.762127, 0.761480, 0.760831, 0.760182, 0.759532, 0.758881, 0.758229, 0.757577, 0.756924, 0.756270, 0.755615, 0.754960, 0.754304, 0.753647, 0.752989, 0.752331, 0.751671, 0.751012, 0.750351, 0.749689, 0.749027, 0.748364, 0.747701, 0.747036, 0.746371, 0.745705, 0.745039, 0.744371, 0.743703, 0.743034, 0.742365, 0.741694, 0.741023, 0.740351, 0.739679, 0.739005, 0.738331, 0.737656, 0.736981, 0.736305, 0.735628, 0.734950, 0.734271, 0.733592, 0.732912, 0.732231, 0.731550, 0.730868, 0.730185, 0.729501, 0.728817, 0.728132, 0.727446, 0.726760, 0.726072, 0.725384, 0.724696, 0.724006, 0.723316, 0.722625, 0.721934, 0.721241, 0.720548, 0.719854, 0.719160, 0.718465, 0.717769, 0.717072, 0.716375, 0.715677, 0.714978, 0.714279, 0.713578, 0.712877, 0.712176, 0.711473, 0.710770, 0.710067, 0.709362, 0.708657, 0.707951, 0.707244, 0.706537, 0.705829, 0.705120, 0.704411, 0.703701, 0.702990, 0.702278, 0.701566, 0.700853, 0.700139, 0.699425, 0.698710, 0.697994, 0.697278, 0.696561, 0.695843, 0.695124, 0.694405, 0.693685, 0.692964, 0.692243, 0.691521, 0.690798, 0.690075, 0.689351, 0.688626, 0.687901, 0.687175, 0.686448, 0.685720, 0.684992, 0.684263, 0.683533, 0.682803, 0.682072, 0.681341, 0.680608, 0.679875, 0.679142, 0.678407, 0.677672, 0.676937, 0.676200, 0.675463, 0.674725, 0.673987, 0.673248, 0.672508, 0.671768, 0.671027, 0.670285, 0.669542, 0.668799, 0.668056, 0.667311, 0.666566, 0.665820, 0.665074, 0.664327, 0.663579, 0.662830, 0.662081, 0.661332, 0.660581, 0.659830, 0.659078, 0.658326, 0.657573, 0.656819, 0.656065, 0.655310, 0.654554, 0.653798, 0.653041, 0.652283, 0.651525, 0.650766, 0.650006, 0.649246, 0.648485, 0.647724, 0.646961, 0.646198, 0.645435, 0.644671, 0.643906, 0.643141, 0.642375, 0.641608, 0.640841, 0.640073, 0.639304, 0.638535, 0.637765, 0.636994, 0.636223, 0.635451, 0.634679, 0.633906, 0.633132, 0.632358, 0.631583, 0.630807, 0.630031, 0.629254, 0.628476, 0.627698, 0.626919, 0.626140, 0.625360, 0.624579, 0.623798, 0.623016, 0.622234, 0.621450, 0.620667, 0.619882, 0.619097, 0.618312, 0.617525, 0.616739, 0.615951, 0.615163, 0.614374, 0.613585, 0.612795, 0.612004, 0.611213, 0.610422, 0.609629, 0.608836, 0.608043, 0.607248, 0.606454, 0.605658, 0.604862, 0.604065, 0.603268, 0.602470, 0.601672, 0.600873, 0.600073, 0.599273, 0.598472, 0.597671, 0.596869, 0.596066, 0.595263, 0.594459, 0.593655, 0.592850, 0.592044, 0.591238, 0.590431, 0.589624, 0.588816, 0.588007, 0.587198, 0.586388, 0.585578, 0.584767, 0.583955, 0.583143, 0.582331, 0.581517, 0.580704, 0.579889, 0.579074, 0.578259, 0.577442, 0.576626, 0.575808, 0.574991, 0.574172, 0.573353, 0.572534, 0.571713, 0.570893, 0.570071, 0.569249, 0.568427, 0.567604, 0.566780, 0.565956, 0.565132, 0.564306, 0.563480, 0.562654, 0.561827, 0.560999, 0.560171, 0.559343, 0.558513, 0.557684, 0.556853, 0.556022, 0.555191, 0.554359, 0.553526, 0.552693, 0.551860, 0.551026, 0.550191, 0.549355, 0.548520, 0.547683, 0.546846, 0.546009, 0.545171, 0.544332, 0.543493, 0.542653, 0.541813, 0.540972, 0.540131, 0.539289, 0.538447, 0.537604, 0.536760, 0.535916, 0.535072, 0.534227, 0.533381, 0.532535, 0.531688, 0.530841, 0.529993, 0.529145, 0.528296, 0.527447, 0.526597, 0.525747, 0.524896, 0.524044, 0.523192, 0.522340, 0.521487, 0.520633, 0.519779, 0.518925, 0.518070, 0.517214, 0.516358, 0.515501, 0.514644, 0.513787, 0.512928, 0.512070, 0.511211, 0.510351, 0.509491, 0.508630, 0.507769, 0.506907, 0.506045, 0.505182, 0.504319, 0.503455, 0.502591, 0.501726, 0.500860, 0.499995, 0.499128, 0.498262, 0.497394, 0.496527, 0.495658, 0.494790, 0.493920, 0.493051, 0.492180, 0.491310, 0.490438, 0.489567, 0.488694, 0.487822, 0.486949, 0.486075, 0.485201, 0.484326, 0.483451, 0.482575, 0.481699, 0.480823, 0.479946, 0.479068, 0.478190, 0.477312, 0.476433, 0.475553, 0.474673, 0.473793, 0.472912, 0.472031, 0.471149, 0.470266, 0.469384, 0.468500, 0.467617, 0.466733, 0.465848, 0.464963, 0.464077, 0.463191, 0.462305, 0.461418, 0.460530, 0.459643, 0.458754, 0.457865, 0.456976, 0.456086, 0.455196, 0.454306, 0.453415, 0.452523, 0.451631, 0.450739, 0.449846, 0.448952, 0.448059, 0.447164, 0.446270, 0.445375, 0.444479, 0.443583, 0.442687, 0.441790, 0.440892, 0.439995, 0.439096, 0.438198, 0.437299, 0.436399, 0.435499, 0.434599, 0.433698, 0.432797, 0.431895, 0.430993, 0.430090, 0.429187, 0.428284, 0.427380, 0.426476, 0.425571, 0.424666, 0.423760, 0.422854, 0.421948, 0.421041, 0.420134, 0.419226, 0.418318, 0.417409, 0.416501, 0.415591, 0.414681, 0.413771, 0.412861, 0.411950, 0.411038, 0.410126, 0.409214, 0.408302, 0.407388, 0.406475, 0.405561, 0.404647, 0.403732, 0.402817, 0.401902, 0.400986, 0.400069, 0.399153, 0.398236, 0.397318, 0.396400, 0.395482, 0.394563, 0.393644, 0.392725, 0.391805, 0.390885, 0.389964, 0.389043, 0.388122, 0.387200, 0.386278, 0.385355, 0.384432, 0.383509, 0.382585, 0.381661, 0.380736, 0.379812, 0.378886, 0.377961, 0.377035, 0.376108, 0.375182, 0.374254, 0.373327, 0.372399, 0.371471, 0.370542, 0.369613, 0.368684, 0.367754, 0.366824, 0.365893, 0.364963, 0.364031, 0.363100, 0.362168, 0.361236, 0.360303, 0.359370, 0.358437, 0.357503, 0.356569, 0.355634, 0.354700, 0.353764, 0.352829, 0.351893, 0.350957, 0.350020, 0.349083, 0.348146, 0.347208, 0.346270, 0.345332, 0.344393, 0.343454, 0.342515, 0.341575, 0.340635, 0.339695, 0.338754, 0.337813, 0.336872, 0.335930, 0.334988, 0.334046, 0.333103, 0.332160, 0.331217, 0.330273, 0.329329, 0.328384, 0.327440, 0.326495, 0.325549, 0.324604, 0.323658, 0.322711, 0.321765, 0.320818, 0.319870, 0.318923, 0.317975, 0.317027, 0.316078, 0.315129, 0.314180, 0.313230, 0.312281, 0.311330, 0.310380, 0.309429, 0.308478, 0.307527, 0.306575, 0.305623, 0.304671, 0.303718, 0.302765, 0.301812, 0.300858, 0.299905, 0.298950, 0.297996, 0.297041, 0.296086, 0.295131, 0.294175, 0.293220, 0.292263, 0.291307, 0.290350, 0.289393, 0.288436, 0.287478, 0.286520, 0.285562, 0.284603, 0.283645, 0.282686, 0.281726, 0.280767, 0.279807, 0.278846, 0.277886, 0.276925, 0.275964, 0.275003, 0.274041, 0.273079, 0.272117, 0.271155, 0.270192, 0.269229, 0.268266, 0.267303, 0.266339, 0.265375, 0.264411, 0.263446, 0.262481, 0.261516, 0.260551, 0.259585, 0.258619, 0.257653, 0.256687, 0.255720, 0.254753, 0.253786, 0.252819, 0.251851, 0.250883, 0.249915, 0.248947, 0.247978, 0.247009, 0.246040, 0.245071, 0.244101, 0.243131, 0.242161, 0.241191, 0.240220, 0.239249, 0.238278, 0.237307, 0.236335, 0.235364, 0.234392, 0.233419, 0.232447, 0.231474, 0.230501, 0.229528, 0.228555, 0.227581, 0.226607, 0.225633, 0.224659, 0.223684, 0.222709, 0.221734, 0.220759, 0.219784, 0.218808, 0.217832, 0.216856, 0.215880, 0.214903, 0.213926, 0.212949, 0.211972, 0.210995, 0.210017, 0.209039, 0.208061, 0.207083, 0.206105, 0.205126, 0.204147, 0.203168, 0.202189, 0.201210, 0.200230, 0.199250, 0.198270, 0.197290, 0.196309, 0.195329, 0.194348, 0.193367, 0.192386, 0.191404, 0.190423, 0.189441, 0.188459, 0.187477, 0.186494, 0.185512, 0.184529, 0.183546, 0.182563, 0.181580, 0.180596, 0.179613, 0.178629, 0.177645, 0.176661, 0.175676, 0.174692, 0.173707, 0.172722, 0.171737, 0.170752, 0.169766, 0.168781, 0.167795, 0.166809, 0.165823, 0.164837, 0.163851, 0.162864, 0.161877, 0.160890, 0.159903, 0.158916, 0.157929, 0.156941, 0.155953, 0.154966, 0.153978, 0.152989, 0.152001, 0.151013, 0.150024, 0.149035, 0.148046, 0.147057, 0.146068, 0.145079, 0.144089, 0.143100, 0.142110, 0.141120, 0.140130, 0.139140, 0.138149, 0.137159, 0.136168, 0.135178, 0.134187, 0.133196, 0.132204, 0.131213, 0.130222, 0.129230, 0.128239, 0.127247, 0.126255, 0.125263, 0.124271, 0.123278, 0.122286, 0.121293, 0.120301, 0.119308, 0.118315, 0.117322, 0.116329, 0.115335, 0.114342, 0.113349, 0.112355, 0.111361, 0.110367, 0.109373, 0.108379, 0.107385, 0.106391, 0.105397, 0.104402, 0.103407, 0.102413, 0.101418, 0.100423, 0.099428, 0.098433, 0.097438, 0.096443, 0.095447, 0.094452, 0.093456, 0.092460, 0.091465, 0.090469, 0.089473, 0.088477, 0.087481, 0.086484, 0.085488, 0.084492, 0.083495, 0.082499, 0.081502, 0.080505, 0.079509, 0.078512, 0.077515, 0.076518, 0.075521, 0.074523, 0.073526, 0.072529, 0.071532, 0.070534, 0.069536, 0.068539, 0.067541, 0.066543, 0.065546, 0.064548, 0.063550, 0.062552, 0.061554, 0.060556, 0.059557, 0.058559, 0.057561, 0.056562, 0.055564, 0.054566, 0.053567, 0.052568, 0.051570, 0.050571, 0.049572, 0.048574, 0.047575, 0.046576, 0.045577, 0.044578, 0.043579, 0.042580, 0.041581, 0.040582, 0.039582, 0.038583, 0.037584, 0.036584, 0.035585, 0.034586, 0.033586, 0.032587, 0.031587, 0.030588, 0.029588, 0.028589, 0.027589, 0.026590, 0.025590, 0.024590, 0.023590, 0.022591, 0.021591, 0.020591, 0.019591, 0.018592, 0.017592, 0.016592, 0.015592, 0.014592, 0.013592, 0.012592, 0.011592, 0.010592, 0.009593, 0.008593, 0.007593, 0.006593, 0.005593, 0.004593, 0.003593, 0.002593, 0.001593, 0.000593, -0.000407};
+
+float cos_precalc(int angle)
+{
+	if (0<=angle && angle<=3142)
+		return t_cos_precalc[angle];
+	if (0>angle && angle>=-3142)
+		return t_cos_precalc[-angle];
+	return 2; //retour d'une valeur abérante pour s'en appercevoir si erreur
+}
+
+float sin_precalc(int angle)
+{
+	if (0<=angle && angle<=3142)
+		return t_sin_precalc[angle];
+	if (0>angle && angle>=-3142)
+		return -t_sin_precalc[-angle];
+	return 2; //retour d'une valeur abérante pour s'en appercevoir si erreur
+}
+
+double racine(long int a)
+{
+	return pow((float) a, 0.5); // contrairement a sqrt, pow fonctionne
+}
+
+double pow(long int a, long int b)
+{
+	return pow((double) a, (double) b);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/math_precalc.h	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,11 @@
+#ifndef MATH_PRECALC_H
+#define MATH_PRECALC_H
+
+float cos_precalc(int angle);
+float sin_precalc(int angle);
+
+double racine(long int a);
+double pow(long int a, long int b);
+
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/e95d10626187
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/odometrie.cpp	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,106 @@
+#include "mbed.h"
+#include "odometrie.h"
+#include "hardware.h"
+#include "reglages.h"
+#include "math_precalc.h"
+
+long int x_actuel;
+long int y_actuel;
+double angle; // angle du robot
+
+
+long int nbr_tick_D_prec;
+long int nbr_tick_G_prec;
+    
+void init_odometrie()
+{
+	x_actuel=X_INIT;
+	y_actuel=Y_INIT;
+	angle=0;
+	nbr_tick_D_prec=0;
+	nbr_tick_G_prec=0;
+}
+
+void actualise_position()
+{
+    /*
+    on suppose les valeurs de vd et vg constantes pendant t, la trajectoire decrite par le robot est alors un cercle
+    */
+
+	/*------recuperation de la rotation des roues---------*/
+	long int nbr_tick_D=get_nbr_tick_D();
+	long int nbr_tick_G=get_nbr_tick_G();
+	
+	//calcul du nombre de tick
+	long int nbr_tick_D_actuel=nbr_tick_D-nbr_tick_D_prec;
+	long int nbr_tick_G_actuel=nbr_tick_G-nbr_tick_G_prec;
+	
+	//sauvegarde
+	nbr_tick_D_prec=nbr_tick_D;
+	nbr_tick_G_prec=nbr_tick_G;
+	
+	double dep_roue_G = nbr_tick_G_actuel * DISTANCE_PAR_TICK_G; // deplacement des roues
+    double dep_roue_D = nbr_tick_D_actuel * DISTANCE_PAR_TICK_D;
+	
+	
+	/*------calcul de la trajectoire---------*/
+	
+    // determination du cercle décrit par la trajectoire et de la vitesse du robot sur ce cercle
+    if (dep_roue_G != dep_roue_D){
+        
+    	double R = 0; // rayon du cercle decrit par la trajectoire
+	    double d = 0; // vitesse du robot
+        double cx = 0; // position du centre du cercle decrit par la trajectoire
+        double cy = 0;
+        
+        R = ECART_ROUE / 2 * (dep_roue_D + dep_roue_G) / (dep_roue_D - dep_roue_G); // rayon du cercle
+        cx = x_actuel - R * sin(angle);
+        cy = y_actuel + R * cos(angle);
+        d = (dep_roue_G + dep_roue_D) / 2;
+
+        // mise à jour des coordonnées du robot
+        if (dep_roue_G + dep_roue_D != 0){
+            angle += d / R;
+        }
+        else{
+            angle += dep_roue_D * 2 / ECART_ROUE;
+        }
+        
+    	angle = borne_angle(angle);
+
+        x_actuel = (int) (cx + R * sin(angle) + 0.5);
+        y_actuel = (int) (cy - R * cos(angle) + 0.5);
+    }
+    else if (dep_roue_G == dep_roue_D){ // cas où la trajectoire est une parfaite ligne droite
+        x_actuel += (int) (dep_roue_G * cos(angle) + 0.5);
+        y_actuel += (int) (dep_roue_D * sin(angle) + 0.5);
+    }
+        
+    printf("tick d : %d, tick g : %d, x : %d, y : %d. angle : %lf\n", nbr_tick_D, nbr_tick_G, x_actuel, y_actuel, angle*180/3.14);
+} 
+
+double borne_angle(double angle)
+{
+	if (angle > 3.14) {
+		angle -= 2*3.14;
+	}
+	else if (angle <= -3.14) {
+		angle += 2*3.14;
+	}
+	return angle;
+}
+
+long int get_x_actuel()
+{
+	return x_actuel;
+}
+
+long int get_y_actuel()
+{
+	return y_actuel;
+}
+
+double get_angle()
+{
+	return angle*180/3.14;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/odometrie.h	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,15 @@
+#ifndef ODOMETRIE_H
+#define ODOMETRIE_H
+
+#define PI_MILLI 3142
+#define DEUX_PI_MILLI 6283
+#define PI 3.1415
+
+void init_odometrie(void);
+void actualise_position(void);
+double borne_angle(double angle);
+long int get_x_actuel(void);
+long int get_y_actuel(void);
+double get_angle(void);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/odometrie1.0.txt	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,173 @@
+#include "mbed.h"
+
+int AencoderPin1 = 18;
+int AencoderPin2 = 19;
+int BencoderPin1 = 20;
+int BencoderPin2 = 21;
+ 
+volatile int AlastEncoded = 0;
+volatile int AencoderValue = 0;
+volatile int AencoderValueb = 0;
+volatile int BlastEncoded = 0;
+volatile int BencoderValue = 0;
+volatile int BencoderValueb = 0;
+ 
+long AlastencoderValue = 0;
+long BlastencoderValue = 0;
+
+int sumA = 0;
+int sumB = 0;
+
+const long e = 11750; // ecart entre les 2 roues
+const float D = 8.5;
+
+long pos[2] = {0, 0}; // position en (x, y)
+short angle = 0; // angle du robot
+long DA = 0;
+long DB = 0;
+
+int dr[2]; // vitesse des roues droite et gauche (vg, vd), en millieme de cm / millisec
+    
+ 
+void setup() {
+  Serial.begin (115200);
+ 
+  pinMode(AencoderPin1, INPUT); 
+  pinMode(AencoderPin2, INPUT);
+  pinMode(BencoderPin1, INPUT); 
+  pinMode(BencoderPin2, INPUT);
+
+ 
+  digitalWrite(AencoderPin1, HIGH); //turn pullup resistor on
+  digitalWrite(AencoderPin2, HIGH); //turn pullup resistor on
+  digitalWrite(BencoderPin1, HIGH); //turn pullup resistor on
+  digitalWrite(BencoderPin2, HIGH); //turn pullup resistor on
+ 
+  //call updateEncoder() when any high/low changed seen
+  //on interrupt 0 (pin 2), or interrupt 1 (pin 3) 
+  attachInterrupt(digitalPinToInterrupt(AencoderPin1), AupdateEncoder, CHANGE); 
+  attachInterrupt(digitalPinToInterrupt(AencoderPin2), AupdateEncoder, CHANGE);
+  attachInterrupt(digitalPinToInterrupt(BencoderPin1), BupdateEncoder, CHANGE); 
+  attachInterrupt(digitalPinToInterrupt(BencoderPin2), BupdateEncoder, CHANGE);
+ 
+}
+
+void getParametres(int dr[])
+{
+    dr[0] = (int) (AencoderValue * 8.41413233 + 0.5);
+    sumA += AencoderValue;
+    AencoderValue = 0;
+    /*DA += dr[0];
+    Serial.print("drA : ");
+    Serial.print(DA);*/
+    dr[1] = (int) (BencoderValue * 8.4034010 + 0.5);
+    sumB+= BencoderValue;
+    BencoderValue = 0;
+    /*DB += dr[1];
+    Serial.print("  drB : ");
+    Serial.print(DB);
+    Serial.print("  ");*/
+}
+
+void updatePos(long pos[], short* pangle, int dr[])
+{
+    /*
+    on suppose les valeurs de vd et vg constantes pendant t, la trajectoire decrite par le robot est alors un cercle
+    */
+
+    long R = 0; // rayon du cercle décrit par la trajectoire
+    int d = 0; // vitesse du robot
+    long c[2] = {0, 0}; // position du centre du cercle décrit par la trajectoire
+
+    // determination du cercle décrit par la trajectoire et de la vitesse du robot sur ce cercle
+    if (dr[0] != dr[1]){
+        R = e / 2 * (dr[1] + dr[0]) / (dr[1] - dr[0]);
+        c[0] = pos[0] - (int) (R * sin(*pangle * PI / 32768) + 0.5);
+        c[1] = pos[1] + (int) (R * cos(*pangle * PI / 32768) + 0.5);
+        d = (dr[0] + dr[1]) / 2;
+
+        // mise à jour des coordonnées du robot
+        if (dr[0] + dr[1] != 0){
+            *pangle += (int) (d * 32768.0 / R / PI);
+        }
+        else{
+            *pangle += (int) (dr[1] * 2 * 32768.0 / e / PI);
+        }
+
+        pos[0] = c[0] + (int) (R * sin(*pangle * PI / 32768) + 0.5);
+        pos[1] = c[1] - (int) (R * cos(*pangle * PI / 32768) + 0.5);
+    }
+    else if (dr[0] == dr[1]){ // cas où la trajectoire est une parfaite ligne droite
+        pos[0] += (int) (dr[0] * cos(*pangle * PI / 32768));
+        pos[1] += (int) (dr[0] * sin(*pangle * PI / 32768));
+    }
+
+  Serial.print("dr : ");
+  Serial.print(dr[0]);
+  Serial.print(", ");
+  Serial.print(dr[1]);
+  Serial.print("R : ");
+  Serial.println(R);
+}
+
+
+void loop(){ 
+  //Do stuff here
+  
+  Serial.print("tics : ");
+  Serial.print(AencoderValue);
+  Serial.print(", ");
+  Serial.println(BencoderValue);
+  
+  Serial.print("tics totaux : ");
+  Serial.print(AencoderValueb);
+  Serial.print(", ");
+  Serial.println(BencoderValueb);
+  
+  Serial.print("tics comptés : ");
+  Serial.print(sumA);
+  Serial.print(", ");
+  Serial.println(sumB);
+  
+  getParametres(dr);
+  updatePos(pos, &angle, dr);
+
+ 
+  Serial.print("x : ");
+  Serial.print(pos[0]);
+  Serial.print(", y : ");
+  Serial.print(pos[1]);
+  Serial.print(" angle : ");
+  Serial.println((float) (angle) * 180 / 32768);
+  
+  Serial.println("");
+  
+  delay(50); //just here to slow down the output, and show it will work  even during a delay
+}
+ 
+ 
+void AupdateEncoder(){
+  int AMSB = digitalRead(AencoderPin1); //MSB = most significant bit
+  int ALSB = digitalRead(AencoderPin2); //LSB = least significant bit
+ 
+  int Aencoded = (AMSB << 1) |ALSB; //converting the 2 pin value to single number
+  int Asum  = (AlastEncoded << 2) | Aencoded; //adding it to the previous encoded value
+ 
+  if(Asum == 0b1101 || Asum == 0b0100 || Asum == 0b0010 || Asum == 0b1011) {AencoderValue ++; AencoderValueb++;}
+  if(Asum == 0b1110 || Asum == 0b0111 || Asum == 0b0001 || Asum == 0b1000) {AencoderValue --; AencoderValueb--;}
+ 
+  AlastEncoded = Aencoded; 
+}
+
+void BupdateEncoder(){
+  int BMSB = digitalRead(BencoderPin1); //MSB = most significant bit
+  int BLSB = digitalRead(BencoderPin2); //LSB = least significant bit
+ 
+  int Bencoded = (BMSB << 1) |BLSB; //converting the 2 pin value to single number
+  int Bsum  = (BlastEncoded << 2) | Bencoded; //adding it to the previous encoded value
+ 
+  if(Bsum == 0b1101 || Bsum == 0b0100 || Bsum == 0b0010 || Bsum == 0b1011) {BencoderValue ++; BencoderValueb++;}
+  if(Bsum == 0b1110 || Bsum == 0b0111 || Bsum == 0b0001 || Bsum == 0b1000) {BencoderValue --; BencoderValueb--;}
+ 
+  BlastEncoded = Bencoded; 
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reglages.h	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,24 @@
+//position initiale du robot
+#define X_INIT 0
+#define Y_INIT 0
+#define THETA_INIT 0
+
+//propre a chaque robot
+#define ECART_ROUE 31800 // a augmenter si l'angle reel est plus grand que l'angle vise
+#define DIAMETRE_ROUE 8410
+#define DISTANCE_PAR_TICK_D 100000/11600
+#define DISTANCE_PAR_TICK_G 100000/11600
+
+//calibrage
+#define TICK_PAR_MM 11 // nombre de ticks par mm (tick/mm)
+#define TICK_PAR_TOUR 8109 //nombre de ticks par tour complet du robot sur lui-même (tick/tour)
+
+//correction mécanique
+#define COEFF_CODEUR_D 1
+#define COEFF_CODEUR_G 1.00 //1.07
+#define COEFF_MOTEUR_D 1.20 //1.085
+#define COEFF_MOTEUR_G 1   //1.10
+
+//contraintes mecaniques
+#define PWM_MAX 900  //PWM maximal, à cette valeur le robot est à sa vitesse maximale admissible
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests_moteurs.cpp	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,88 @@
+
+#include "mbed.h"
+
+#include "tests_moteurs.h"
+#include "hardware.h"
+#include "reglages.h"
+#include "math_precalc.h"
+
+#include "odometrie.h"
+
+void test_ligne_droite(long int distance, int vitesse, int angle_vise)
+{
+    motors_on();
+    long int x_ini = get_x_actuel();
+    long int y_ini = get_y_actuel();
+    
+    long int x_actuel = get_x_actuel();
+    long int y_actuel = get_y_actuel();
+    
+    int vitesse_D = vitesse;
+    int vitesse_G = vitesse;
+    
+    double angle = get_angle();
+    
+    
+    while (pow((double) (x_ini - x_actuel)*(x_ini - x_actuel) + (y_ini - y_actuel)*(y_ini - y_actuel), 0.5) < distance)//x_actuel < distance)
+    {
+        //float a = racine((x_ini - x_actuel)*(x_ini - x_actuel) + (y_ini - y_actuel)*(y_ini - y_actuel));
+        printf(" SQRT : %lf", pow((double) (x_ini - x_actuel)*(x_ini - x_actuel) + (y_ini - y_actuel)*(y_ini - y_actuel), 0.5));
+        angle = get_angle();
+        vitesse_G = (int) (vitesse * (1 + 0.05*(angle_vise-angle)));
+        vitesse_D = (int) (vitesse * (1 - 0.05*(angle_vise-angle)));
+        
+        set_PWM_moteur_D(vitesse_D);
+        set_PWM_moteur_G(vitesse_G);
+        actualise_position();
+        x_actuel = get_x_actuel();
+        y_actuel = get_y_actuel();
+        printf("x recu  : %ld", x_actuel);// sqrt((x_ini - x_actuel)*(x_ini - x_actuel) + (y_ini - y_actuel)*(y_ini - y_actuel)), y_actuel, (x_actuel - x_ini)*(x_actuel - x_ini) + (y_actuel - y_ini)*(y_actuel - y_ini));
+    
+    }
+    
+    //printf(" x et y recu : %lf, %ld. distance parcourue : %ld ", sqrt((x_ini - x_actuel)*(x_ini - x_actuel) + (y_ini - y_actuel)*(y_ini - y_actuel)), y_actuel, (x_actuel - x_ini)*(x_actuel - x_ini) + (y_actuel - y_ini)*(y_actuel - y_ini));
+    
+    set_PWM_moteur_D(0);
+    set_PWM_moteur_G(0);
+    wait(0.5);
+    motors_stop();
+}
+
+
+void test_rotation(double angle_vise, int vitesse, int nombre)
+{
+    motors_on();
+    /*long int x_ini = get_x_actuel();
+    long int y_ini = get_y_actuel();
+    
+    long int x_actuel = get_x_actuel();
+    long int y_actuel = get_y_actuel();*/
+    
+    int compteur = 0;
+    
+    int vitesse_D = -vitesse;
+    int vitesse_G = vitesse;
+    
+    double angle = get_angle();
+    
+    while ((angle < angle_vise - 1) || (angle > angle_vise + 1) || (compteur != nombre) || ((angle < -180 + 1) && (angle_vise == 180)))
+    {
+        set_PWM_moteur_D(vitesse_D);
+        set_PWM_moteur_G(vitesse_G);
+        actualise_position();
+        if (angle*get_angle() < 0 && angle > 20)
+        {
+            compteur++;
+        }
+        angle = get_angle();
+        printf("angle recu  : %lf", angle);// sqrt((x_ini - x_actuel)*(x_ini - x_actuel) + (y_ini - y_actuel)*(y_ini - y_actuel)), y_actuel, (x_actuel - x_ini)*(x_actuel - x_ini) + (y_actuel - y_ini)*(y_actuel - y_ini));
+    
+    }
+    
+    //printf(" x et y recu : %lf, %ld. distance parcourue : %ld ", sqrt((x_ini - x_actuel)*(x_ini - x_actuel) + (y_ini - y_actuel)*(y_ini - y_actuel)), y_actuel, (x_actuel - x_ini)*(x_actuel - x_ini) + (y_actuel - y_ini)*(y_actuel - y_ini));
+    
+    set_PWM_moteur_D(0);
+    set_PWM_moteur_G(0);
+    wait(0.5);
+    motors_stop();
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests_moteurs.h	Tue Dec 11 19:12:55 2018 +0000
@@ -0,0 +1,12 @@
+#ifndef TESTS_MOTEURS_H
+#define TESTS_MOTEURS_H
+
+//fonctions de débug et de calibrage du robot
+
+
+void test_ligne_droite(long int distance, int vitesse, int angle_vise = 0);
+
+void test_rotation(double angle_vise, int vitesse, int nombre = 0);
+
+
+#endif
\ No newline at end of file