このプログラムは、浮動小数点が可能な平面上の2点間の距離を求めます。しかし、私が理解できないことは(私の無知に起因するかもしれない)dist
変数の計算に伴う問題です。ピタゴラス式に設定され、距離になるべきものが返されます。システム内の他のすべての変数は正しいです。C言語でのキャスティングとsqrt()の問題
この例では、sqrt()
の明白なバグがありますが、ほとんど問題はありますか?たとえば、xdist = 1
を0に設定した場合、距離は1になります。ただし、dist
は正確には1072693248です。この番号に関連するone questionしか見つかりませんでした。しかし答えに記載されているのは、printf
の%d
の間違った使用だけでその問題が発生していたことですが、私が知っているところでは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)。 –
) 'double distance(xdist、ydist){return sqrtf(pow(xdist、2.0)+ pow(ydist、2.0));}' 2で 'sqrtf()'よりも 'sqrt ) 'double distance(double xdist、double ydist)を簡略化する { リターンhypot(xdist、ydist); } ' – chux