鱼C论坛

 找回密码
 立即注册
查看: 4775|回复: 5

c语言 关于double的强制转换!

[复制链接]
发表于 2013-8-18 10:04:14 | 显示全部楼层 |阅读模式

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

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

x

#include"stdio.h"
#include"math.h"
void main()
{
        double pi,s;
        int a,b=1;
        a=0;pi=0;
        s=1/b;
        for(;s>1e-8;)                       //差一个判断语句
        {
                if(a%2==0)    //if语句实现一加一减
                {
                        s=1.0/b; // s=1.0/b 和s=1/b 在这里不一样?  输出结果的s都是为double型呀
                        pi=pi+s;
                        a=a+1;
                }
                else if(a%2!=0)
                {
                        s=1.0/b;// s=1.0/b 和s=1/b 在这里不一样?  输出结果的s都是为double型呀
                        pi=pi-s;
                        a=a+1;
                }
                b=b+2;          //实现分母+2
        }
        printf("%lf",pi=pi*4);
}


当s=1.0/b时结果正确 当s=1/b时等于4就不科学了! 求解释。注释在代码上!

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-18 11:10:45 | 显示全部楼层
汉诺塔移动演示
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-18 12:07:38 | 显示全部楼层
1/b是整型运算,结果是整型;
1.0/b结果是浮点型
比如b=2;
1/b=0;1.0/b=0.5
s=1/b就是先把结果0转成浮点型赋给s,但数值仍然为0
s=1.0/b结果0.5本身就是浮点数,直接赋给s
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-18 12:11:55 | 显示全部楼层
原来上个帖子你还没懂啊,
比如说3/2,由于是整形除以整形,所有得到的是整形为1
而3.0/2,是浮点型除以整形,整形会强制转换成浮点型,得到的是1.5
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-18 13:49:07 | 显示全部楼层

s=1/b   (s是double,b是int)是先计算(1/b)转换成 int(过程损失 小数点后数据).  最后再变成double?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-18 13:55:51 | 显示全部楼层
好人 发表于 2013-8-18 13:49
s=1/b   (s是double,b是int)是先计算(1/b)转换成 int(过程损失 小数点后数据).  最后再变成double?

对的,是这样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-5 11:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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