为什么这个代码没有正确执行计算?给定半径的球体的体积



标题说明一切。在给定半径的情况下,计算体积的数学方法是错误的,但计算面积的方法是正确的。

#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <string.h>
#include <math.h>
float radius[4][3];
int x = 0;
int main()
{
while (x < 4)
{
printf("Please enter Radius %d: ",(x+1));
scanf("%f", &radius[x][0]);
radius[x][1] = ((4 / 3) * M_PI * pow(radius[x][0], 3));
radius[x][2] = M_PI * pow(radius[x][0], 2);
x++;
}
x = 0;
while (x < 4)
{
printf("nrThe volume for a sphere with the radius %.2f is %.2f", radius[x][0], radius[x][1]);
printf("nrThe area for a circle with the radius %.2f is %.2f", radius[x][0], radius[x][2]);
x++;
}
return 0;
}

4 / 3的两个操作数都是整数,因此执行整数除法。这将结果向0截断,结果为1。

使用浮点常量进行浮点除法。

radius[x][1] = ((4.0 / 3.0) * M_PI * pow(radius[x][0], 3));

本行:radius[x][1] = ((4 / 3) * M_PI * pow(radius[x][0], 3));

这个运算符(4 / 3)是一个整数除法,因为左、右操作数都是整数{43),所以它将截断为0。

4 / 3 = 1.33333333333333333...,但结果被截断,所以它将返回1

使用浮点数:

radius[x][1] = ((4.0f / 3.0f) * M_PI * pow(radius[x][0], 3));

或将其类型转换为float类型。

radius[x][1] = (((float)4 / 3) * M_PI * pow(radius[x][0], 3));

除了从整数除法((4 / 3)1)到浮点除法,考虑使用一致的数学类型:

double radius[4][3];
radius[x][1] = ((4.0 / 3.0) * M_PI * pow(radius[x][0], 3));
radius[x][2] = M_PI * pow(radius[x][0], 2);

#define M_PIf 3.1415926535897932f
float radius[4][3];
radius[x][1] = ((4.0f / 3.0f) * M_PIf * powf(radius[x][0], 3));
radius[x][2] = M_PIf * powf(radius[x][0], 2);

我将继续使用double并利用先前的乘法,而不是调用昂贵的pow()

double radius[4][3];
radius[x][2] = M_PI * radius[x][0] * radius[x][0];        // pi * r^2
radius[x][1] = (4.0 / 3.0) * radius[x][0] * radius[x][2]; // 4/3 * r * area

相关内容

  • 没有找到相关文章

最新更新