Имеется небольшой девайс для определения координат. На ультразвуке. Простейшие формулы для вычислений.
например:
Код
.....
#include "math.h"
volatile short a, b, X, Y;
volatile long x1, T, TT, CC, BB, AA;
#define c 264
#define base1 16384
......
BB = b*b;
AA = a*a;
CC = c*c;
if ( a < b ) {
x1 = (((BB + CC - AA)/2/c)-c);
Y = base1 - x1;
T = (x1 + c);
TT = T*T;
X = sqrt(BB - TT);
}
.....
#include "math.h"
volatile short a, b, X, Y;
volatile long x1, T, TT, CC, BB, AA;
#define c 264
#define base1 16384
......
BB = b*b;
AA = a*a;
CC = c*c;
if ( a < b ) {
x1 = (((BB + CC - AA)/2/c)-c);
Y = base1 - x1;
T = (x1 + c);
TT = T*T;
X = sqrt(BB - TT);
}
.....
a, b - значения задержек от таймера.
Столкнулся со следующей проблемой - очень большой разброс полученных результатов - при изменении a, b на 2-3 значения - X, Y - могут отличаться на сотни и даже тысячу. Причем не понял закономерности - могут через значение, могут через 10, а могут и нормально идти и ни разу не вывалиться за допуск (50).
Попробовал при тех-же значениях а, b просчитать в Екселе - результат разный! Причем отличается на сотни! Понимаю конечно, целочисленная арифметика и т.п. - но не так-же.
Все значения выводятся на USB, который в ROM.
Компилятор Keil 4.11
Где могут притаиться грабли?
Может использовать какую-либо математическую библиотечку? Какую?