Я пытаюсь рассчитать скорость / скорость на основе общего тормозного пути и мю. В основном используется формула квадратичного c, чтобы получить положительное значение root для скорости, чтобы уравнение работало. Но мой ответ для примера теста в нижней части кода «скорость (83.959876093, 0.7) -> 100» не совпадает, и я не знаю, в чем может быть проблема. Я разбил каждую часть формулы квадратичного c на несколько переменных.
#include <math.h>
#define G 9.81 // this is in m/s so need to convert the final output from m/s to km/h
double speed(double d, double mu) {
double conv_num = 60 * 60; // used to convert from sec to hours
double conv_den = 1000; // used to convert from m to km
double conv = 1 / conv_den;
double km_d = conv * d; // convert input distance in meters to km
// use quadratic formula to solve for v given total stopping distance (after conversion, so it's km_hr_d)
// given ax^2 + bx + c = 0, ((-b + sqrt(b^2 - 4ac)) / (2a) )
// (v^2/(2*mu*g) + v - d = 0) so b = 1, a = 1/(2*mu*g), c = -d
double b = 1;
double c = -km_d;
double constant = 2 * mu * G;
double a = 1 / constant;
double sqrt_quad_num = (b *b) - (4 * a * c);
double quad_num = -b + sqrt(sqrt_quad_num);
double quad_den = 2 * a;
double root = quad_num / quad_den;
root = root * conv_num;
printf("sqrt_quad_num: %f\n", sqrt_quad_num);
printf("quad_num: %f\n", quad_num);
printf("quad_den: %f\n", quad_den);
printf("inter_root: %f\n", inter_root);
printf("root is %f\n", root);
return root;
}
// supposed to get speed(83.9598760937531, 0.7) -> 100.0
My results are:
sqrt_quad_num: 1.024453
quad_num: 0.012153
quad_den: 0.145624
inter_root: 0.083453
root is 300.430032