计算距离,但结果是 - 2147483648
Calculating distances but the result is - 2147483648
下面是计算距离的代码
// creating array of cities
double x[] = {21.0,12.0,15.0,3.0,7.0,30.0};
double y[] = {17.0,10.0,4.0,2.0,3.0,1.0};
// distance function - C = sqrt of A squared + B squared
一个问题是运算顺序把你搞砸了(乘法是在减法之前完成的(
改变
(x[c1] - x[c2] * x[c1] - x[c2]) + (y[c1] - y[c2] * y[c1] - y[c2])
自
((x[c1] - x[c2]) * (x[c1] - x[c2])) + ((y[c1] - y[c2]) * (y[c1] - y[c2]))
为了清楚起见,我还建议在单独的行上进行一些计算(显然这是我更喜欢的风格选择,我相信有些人会不同意(。 不过,它对编译器应该没有区别
double deltaX = x[c1] - x[c2];
double deltaY = y[c1] - y[c2];
double distance = sqrt(deltaX * deltaX + deltaY * deltaY);
在我看来,这使得代码更易于维护(并且更不容易出错,就像在这种情况下一样(。 请注意,重写后,操作顺序不需要额外的括号。
记住运算符优先级:a - b * c - d
表示a - (b * c) - d
。
你想要吗
(x[c1] - (x[c2] * x[c1]) - x[c2])
或
((x[c1] - x[c2]) * (x[c1] - x[c2]))
(x[c1] - x[c2] * x[c1] - x[c2])
将类似于(x[c1] - (x[c2] * x[c1]) - x[c2])
,因为*
的优先级高于-
。
我将继续解决几个问题:
// creating array of cities
double x[] = {21.0,12.0,15.0,3.0,7.0,30.0};
double y[] = {17.0,10.0,4.0,2.0,3.0,1.0};
// distance function - C = sqrt of A squared + B squared
double dist(int c1, int c2) {
double z = sqrt (
((x[c1] - x[c2]) * (x[c1] - x[c2])) + ((y[c1] - y[c2]) * (y[c1] - y[c2])));
return z;
}
void main()
{
int a[] = {1, 2, 3, 4, 5, 6};
execute(a, 0, sizeof(a)/sizeof(int));
int x;
printf("Type in a number n");
scanf("%d", &x);
int y;
printf("Type in a number n");
scanf("%d", &y);
double z = dist (x,y);
cout << "The result is " << z;
}
这将修复未使用的返回值,并修复操作顺序和不正确的 int 变量类型。
相关文章:
- 为什么这个程序的结果是3 "born"?和 4 死
- 分配给浮点数的积分文字除法 - 为什么结果是错误的?
- C++初始化的结果是什么?
- 我的输出结果是 0 英寸C++.可能是什么问题
- 在C++中使用 fread() 来解释这个结果是什么?
- 为什么双算的结果是错误的?
- 为什么一个简单的C++程序会有错误的结果?是 #define 引起的吗?
- 在运行libtorch的模型时获得的结果是不正确的,该模型经过训练并从Pytorch出口
- 是迭代器增量结果是新的迭代器
- 结果是不同的;C++ 中的 recv(sock,buf,sizeof(buf),0) 和 strlen(buf)
- 非常量表达式的左值到右值转换的结果是常数吗?
- 将Execl命令的结果(是目录列表)输送到父进程
- 如果我将未签名的int添加到负int且算术结果是正面的,会发生什么
- decltype( (A{}.int_member) 的正确结果是什么)
- 当我们在int上进行操作时,结果是暂时存储在int中的结果
- 大端序中的以下代码的结果是什么
- 并发::when_all的结果是 FIFO 吗?
- 递归宏点差的结果是什么
- static_casting constexpr void* 的结果是常量表达式吗?
- 计算距离,但结果是 - 2147483648