大厂我来了 发表于 2021-4-16 19:46:15

变量在分别设为int型和double型的情况下,得到结果不同

课后作业中2. 根据以下已知公式求 Pi 的近似值,要求正确计算出小数点后前 7 位(即3.1415926)。pzUcJ3v!t
U^=hVw'+~3ey 9oN$;_B[
https://xxx.ilovefishc.com/forum/201603/20/033142z95n4rht2sr4s35m.png
#include <stdio.h>
#include <math.h>

int main()
{
      int sign = 1; // 表示符号
      double pi = 0.0, n = 1, term = 1.0; // n表示分母,term表示当前项的值

      while (fabs(term) >= 1e-8) // 1e-8表示10^(-8)
      {
                pi = pi + term;
                n = n + 2;
                sign = -sign;
                term = sign / n;
      }

      pi = pi * 4;
      printf("pi = %10.7f\n", pi);

      return 0;
}
为什么把n定义为int型 输出的是4.000000,而定义为double型输出的才是3.15926这里的n不就是分母吗 不就是整数形吗???求大佬告知

wp231957 发表于 2021-4-16 20:02:07

c语言里int/int不会得到浮点,仍然是int

就是要努力呀 发表于 2021-4-17 10:21:37

sign是int n是int int/int会得到整形会去掉小数位 再把值赋值给term
你的期望是sign/n得到一个浮点数赋值给term
而如果sign 和 n都是int型话 sign/n会得到一个整形赋值给term
举一个例子
double n = 25 / 2;
n的值会是 12.0
因为25和2都是整形,结果12.5的小数位会被舍去,再赋值给n
double n = 25 / 2.0
n的值会是12.5
因为2.0是浮点数,当整形与浮点型做运算时,因为两者类型不同无法进行运算就会进行类型转换, 将25转换成25.0也就是转换成浮点型,此时就变成了两个浮点型做运算,得到的结果也会是浮点型
页: [1]
查看完整版本: 变量在分别设为int型和double型的情况下,得到结果不同