C ++中的浮点除法不正确

时间:2017-01-11 20:12:32

标签: c++ floating-point printf double

我正在尝试计算(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。我也可以帮助解决这个问题。

0 个答案:

没有答案