Модификатор l
игнорируется для спецификатора преобразования %f
в printf
, который ожидает значение double
. float
аргументы автоматически преобразуются в double
при передаче в printf
или в любые другие неординарные функции.
Вы не опубликовали полный код функции, тип переменной distance
неизвестен, но передача ее адреса через &distance
всегда неверна. Возможно, вы скопировали код для чтения через scanf()
, где %lf
требуется для типа double
и должен быть передан адрес получателя.
Вот исправленная версия:
int time = 0;
double distance;
double initial_x_pos = 300;
double initial_y_pos = 800;
double x_pos = initial_x_pos;
double y_pos = initial_y_pos;
double gravity = 1.62;
double position = sqrt(pow(x_pos, 2) + pow(y_pos, 2));
double influence = 3.14 * 50 * 50;
GFX_SetColour(WHITE);
GFX_MoveTo(initial_x_pos, initial_y_pos);
do {
time += 1;
y_pos = initial_y_pos - (vel_y * time) / 2;
x_pos = initial_x_pos + (vel_x * time) / 2;
GFX_DrawLineTo(x_pos, y_pos, 3);
GFX_UpdateDisplay();
distance = sqrt(pow(y_pos - (y + 312), 2) + (pow(x_pos - (x + 440), 2)));
printf("%f\n", distance);
printf("%f\n", vel_x);
} while (vel_x != 10000000000);
Обратите внимание, что vel_x
не изменяется в цикле, и сравнение значения double
с ==
не рекомендуется, поскольку вычисления с плавающей запятой имеют ограниченную точность.