试图计算 Pi
Trying to calculate Pi
要计算 Pi,您可以使用等式 pi/4=1-(1/3)+(1/5)-(1/7)+...
乘以 4 得到 Pi
我创建了一个公式来计算方程相对于其位置 1/(2n-1) 的每一步并为其编写代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
double p = 0;
double pi = 0;
int j = 1;
do
{
if (j % 2 == 1)
{
p = p + (1 / (2 * j - 1));
}
else
{
p = p - (1 / (2 * j - 1));
}
pi = p * 4;
printf("%lf\n", pi);
j++;
} while (j < 10);
return (EXIT_SUCCESS);
}
但它只是推出 4.0000
为什么?我找不到我犯的错误。
在语句 p = p + (1 / (2 * j - 1));
中,表达式 (1 / (2 * j - 1)
产生整数。要获得预期结果,请将任一操作数设为浮点类型,即 1.0
或 (float)(2 * j - 1)
替换语句
p = p + (1 / (2 * j - 1));/* 1/(2*j-1) results in integer, you won't get expected result */
和
p = p + (1. / (2 * j - 1));/* 1. means making floating type */
在你的表达中
1 / (2 * j - 1)
/
的两个操作数都是 int
类型,因此它执行整数除法,截断小数。如果要执行真正的除法,请确保至少有一个操作数具有浮点类型。您可以在此处通过编写
轻松实现此目的
1.0 / (2 * j - 1)
包含小数点(且没有后缀)的数字常量在 C 中属于 double
类型。
要计算 Pi,您可以使用等式 pi/4=1-(1/3)+(1/5)-(1/7)+... 乘以 4 得到 Pi 我创建了一个公式来计算方程相对于其位置 1/(2n-1) 的每一步并为其编写代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
double p = 0;
double pi = 0;
int j = 1;
do
{
if (j % 2 == 1)
{
p = p + (1 / (2 * j - 1));
}
else
{
p = p - (1 / (2 * j - 1));
}
pi = p * 4;
printf("%lf\n", pi);
j++;
} while (j < 10);
return (EXIT_SUCCESS);
}
但它只是推出 4.0000
为什么?我找不到我犯的错误。
在语句 p = p + (1 / (2 * j - 1));
中,表达式 (1 / (2 * j - 1)
产生整数。要获得预期结果,请将任一操作数设为浮点类型,即 1.0
或 (float)(2 * j - 1)
替换语句
p = p + (1 / (2 * j - 1));/* 1/(2*j-1) results in integer, you won't get expected result */
和
p = p + (1. / (2 * j - 1));/* 1. means making floating type */
在你的表达中
1 / (2 * j - 1)
/
的两个操作数都是 int
类型,因此它执行整数除法,截断小数。如果要执行真正的除法,请确保至少有一个操作数具有浮点类型。您可以在此处通过编写
1.0 / (2 * j - 1)
包含小数点(且没有后缀)的数字常量在 C 中属于 double
类型。