我正在尝试计算(a b)/ 2,其中a和b是浮点数。然后我用printf打印("%。5f",( b)/ 2)。我期待的结果是187.50000,但我得到187.49997的结果。 这是我的代码。
#include <cstdio>
#include <cmath>
using namespace std;
float ax, ay, bx, by, k, n;
int main()
{
scanf("%f %f %f %f", &ax, &ay, &bx, &by);
if (ay == by || ax == bx) printf("N");
else
{
k = (by - ay)/(bx - ax);
n = ay - k*ax;
if (n == 0) printf("N");
else
{
float a = abs(n);
float b = abs(n/k);
float c = sqrt(a*a+b*b);
printf("%.5f %.5f %d", a+b+c, (a*b)/2, (k > 0 ? (n > 0 ? 2 : 4) : (n > 0 ? 1 : 3)));
}
}
return 0;
}
我使用的输入值是:
12.5 -60 25 -90
对于此测试用例,以下变量的值为:
k = 2.4
n = 30
a = 30
b = 12.5
c = 32.5
(a * b)/ 2显然应该等于187.5,但我仍然得到187.49997的结果。
我知道我应该总是使用双打而不是花车,但我无法用printf打印双打。 %。5lf似乎总是输出-0.00000。我也可以帮助解决这个问题。