Эта программа находит расстояние между двумя точками на плоскости, способной к плавающим точкам. Но я не могу понять (что может быть из-за моего невежества) - проблема с вычислением переменной dist
. Он настроен на уравнение Пифагора, которое возвращает то, что должно быть расстоянием. Все остальные переменные в системе верны.Проблемы с литьем и sqrt() в C
У меня проблема с проблемой, но явная ошибка с sqrt()
в этом примере. Например, если бы я должен был сделать xdist = 1
со всем остальным, установленным в 0, расстояние должно быть 1. Однако то, что напечатано как dist
, равно точно 1072693248. Я нашел только one question, относящийся к этому номеру. Но то, что было упомянуто в ответах, заключалось в том, что только неправильное использование %d
в printf
вызвало эту проблему, но я вижу (насколько мне известно) нет проблемы с printf
и форматированием в любом месте программы. Каково решение получить правильное значение?
double distance(xdist, ydist)
{
return sqrtf(pow(xdist, 2.0) + pow(ydist, 2.0));
}
int main()
{
double x1, y1, x2, y2;
double xdist, ydist, dist;
int i;
for (i = 1; i <= 2; i++)
{
printf("%d: Enter an x and y coordinate:\n", i);
switch (i)
{
case 1:
scanf("%lf", &x1);
scanf("%lf", &y1);
continue;
case 2:
scanf("%lf", &x2);
scanf("%lf", &y2);
continue;
}
}
xdist = fabs(x2 - x1);
ydist = fabs(y2 - y1);
dist = distance(xdist, ydist);
printf("\nxdist = %.2f, ydist = %.2f\n", xdist, ydist);
printf("The distance between coordinates \n(%.2f, %.2f) to (%.2f, %.2f) \nis %.2f.", x1, y1, x2, y2, dist);
return 0;
}
'double distance (xdist, ydist)' ... назовите меня неосведомленным о программировании на языке C, но разве вам не нужно объявлять типы 'xdist' и' ydist'? –
Кроме того, вам не нужно брать абсолютное значение разницы между ординатами x и y, так как квадратура потеряет знак в любом случае (кодомен y = x^2, где x вещественный, а не комплексный, равен y> = 0). –
1) имеет смысл использовать 'sqrt()', чем 'sqrtf()' в 'double distance (xdist, ydist) {return sqrtf (pow (xdist, 2.0) + pow (ydist, 2.0));}' 2) Упростить 'двойное расстояние (double xdist, double ydist) { return hypot (xdist, ydist); } ' – chux