Я пишу код, чтобы найти расстояние точки (25,40000) от фиксированной точки (47,132000). Расстояние всегда печатается равным 0,0000. Я пробовал проверять другие комбинации, задавая меньшие значения точек и печатая их с помощью %d, все отлично работает. А вот с %ld,%lf,%Lf что-то не в порядке. Пожалуйста, помогите.
#include<stdio.h>
#include<math.h>
int main()
{
int x=25,y=40000;
//printf("Enter x,y");
//scanf(%d %d,&x,&y)
long double dist;
dist=sqrt((47-x)*(47-x)+(132000-y)*(132000-y));
printf(" x= %d y=%d dist=%Lf\n",x,y,dist);
return 0;
}
sqrt
? Я не удивлюсь, если это не то, что вы ожидаете. - person Thomas Jager   schedule 03.06.2020dust
->dist
(помимо отсутствующих включений) - person Thomas Jager   schedule 03.06.2020long double/double
? - person chux - Reinstate Monica   schedule 04.06.2020sqrt(3)
— это функция, для которой требуется параметрdouble
, а вы передаете выражение, полное целочисленных значений. Компилятор выполняет автоматическое преобразование вdouble
, но если бы у вас было какое-то деление, вы бы получили еще один сюрприз при целочисленном делении. Если вы работаете с числами с плавающей запятой, используйте литералы с плавающей запятой (10000
— целочисленный литерал, а10000.0
—double
литерал с плавающей запятой) - person Luis Colorado   schedule 05.06.2020