是精度出问题了吗?这种该怎么办?

#include

int main(void)
{
float d, h, PI;
PI = 3.141592653589793f;
while (scanf_s("%f %f", &d, &h) == 2)
printf("%.10f %.10f\n", PI * d * (h + 0.5f * d), 0.25f* PI * d * d * h);
return 0;

}

是精度出问题了吗?计算结果和样例给出的答案以及和自己手动计算的答案最后几位不一样

用double类型来计算

#include <stdio.h>

int main()
{
    double d, h, PI = 3.141592653589793;
    while (scanf_s("%lf%lf", &d, &h) == 2)
        printf("%.10lf %.10lf\n", PI * d * (h + 0.5 * d), 0.25 * PI * d * d * h);
    return 0;
}

能把题目发出来吗??这分析个寂寞