【发布时间】:2013-05-03 19:03:25
【问题描述】:
是否可以计算两点之间的距离而不必使用 math.h 库?我知道,使用 math.h 库,它必须在这些行中(欧几里得距离公式):
int Distance(int x1, int y1, int x2, int y2)
{
int dx = x2 - x1;
int dy = y2 - y1;
return sqrt(dx*dx + dy*dy);
}
但是,有没有办法在不使用平方根(需要 math.h 库)的情况下做同样的事情?
编辑:每当我尝试以下代码时,都会出现浮点异常(核心转储):
float sqrt(int x) {
int i;
float s;
s=((x/2)+x/(x/2)) / 2; /*first guess*/
for(i=1;i<=4;i++) { /*average of guesses*/
s=(s+x/s)/2;
}
return s;
}
float Distance(float x1, float y1, float x2, float y2) {
float dx = x2 - x1;
float dy = y2 - y1;
return sqrt(dx*dx + dy*dy);
}
int main() {
printf("%f", Distance(1, 2, 2, 1));
return 0;
}
【问题讨论】:
-
当然有,但你基本上是从数学库中复制代码。
-
请注意,
math.h是头文件,而不是库,并且数学函数是标准 C 库的一部分。 (很多年前,当系统更小,内存是一个真正可以用完的东西时,数学函数被分解成一个单独的库,如果你不需要它可以不链接。)跨度>
标签: c distance points square-root