鱼C论坛

 找回密码
 立即注册
查看: 2237|回复: 2

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

[复制链接]
发表于 2021-4-16 19:46:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
课后作业中2. 根据以下已知公式求 Pi 的近似值,要求正确计算出小数点后前 7 位(即3.1415926)。pzUcJ3v!t
U^=hVw'+~3ey 9oN$;_B[

                               
登录/注册后可看大图

#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不就是分母吗 不就是整数形吗???求大佬告知
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-16 20:02:07 From FishC Mobile | 显示全部楼层
c语言里int/int不会得到浮点,仍然是int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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也就是转换成浮点型,此时就变成了两个浮点型做运算,得到的结果也会是浮点型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 17:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表