c - C中的sqrt函数不返回确切值
问题描述
我的代码如下:
#include <stdio.h>
#include <math.h>
int distance(int x1, int y1, int x2, int y2){
double value = sqrt(pow((double)(x2- x1),2.0) + pow((double)(y2 - y1),2.0));
return value;
}
int main(void){
int A_x, A_y, B_x, B_y, C_x, C_y;
printf("Enter 1st point:");
scanf("%d", &A_x);
scanf("%d", &A_y);
printf("Enter 2nd point:");
scanf("%d", &B_x);
scanf("%d", &B_y);
printf("Enter 3rd point:");
scanf("%d", &C_x);
scanf("%d", &C_y);
double AB = distance(A_x, A_y, B_x, B_y);
printf("%.2lf", AB);
// double powered = pow((double)(A_x- B_x),2.0) + pow((double)(A_y - B_y),2.0);
// double squared = sqrt(powered);
// printf("%.2lf", squared);
double BC = distance(B_x, B_y, C_x, C_y);
printf("%.2lf", BC);
double CA = distance(C_x, C_y, A_x, A_y);
printf("%.2lf", CA);
if(AB+BC>CA && AB+CA>BC && BC+CA>AB){
double perimeter = AB+BC+CA;
printf("Perimeter of triangle = %.2lf",perimeter);
return 0;
}else{
printf("Invalid traingle");
return -1;
}
}
我在编译器中得到以下内容:
我不确定为什么我得到 AB 的 2.00 而不是 2.83。如果有人能解释我哪里出错了会很高兴:)
解决方案
函数距离返回一个整数,因此它会截断 sqrt 的结果。您应该更改以下声明:
int distance(int x1, int y1, int x2, int y2)
至
double distance(int x1, int y1, int x2, int y2)
推荐阅读
- javascript - 将解析的百分比数据转换为新数组
- jenkins - 无法通过 Jenkins 向远程机器运行命令
- visual-studio-code - 有没有办法在 Visual Studio 代码中查看数据集及其内容?
- rabbitmq - 如何通过 stomp js 控制订阅交易所?
- python - 如何通过传递参数重新排列数据框中的列
- django - 如何通过 redux 将参数传递给 django api 调用?
- batch-file - 仅在第一个批处理文件执行成功的情况下执行 cmd.exe 中的第二个批处理文件
- java - Android中属性的GetValue
- sql - rownumber() 函数计算相邻单元格
- javascript - React Hooks:TypeError:无法读取 null 的属性“firstName”