|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 二进制小数部分转换成十进制循环语句中出现死循环。
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
784
人关注过本帖
标题:
二进制小数部分转换成十进制循环语句中出现死循环。
只看楼主
加入收藏
wmh100100
等 级:
新手上路
帖 子:3
专家分:3
注 册:2015-3-22
结帖率:
0
楼主
收藏
已结贴
√
问题点数:20 回复次数:4
二进制小数部分转换成十进制循环语句中出现死循环。
#include<stdio.h>
#include<math.h>
void main(){
double j=0.101,g;
int i;
for(i=1,g=0;j!=0;i++){
j*=10;
if(j>=1){
j-=1;
g=g+pow(2,-i);}}
printf("%lf",g);
}
以上是一个简化的代码。
问题出在循环上了,但是我不知道哪里错了。
搜索更多相关主题的帖子:
include
double
二进制
十进制
2015-05-23 18:52
举报帖子
使用道具
赠送鲜花
wmh100100
等 级:
新手上路
帖 子:3
专家分:3
注 册:2015-3-22
第
2
楼
收藏
得分:0
现在给一个十进制转换成二进制的代码。这个几乎和上面一模一样,而且循环又没有出错。
double x=10.625;
int t,i;
double j,g;
j=x-(int)x;//分离整数小数部分。
x=x-j;
for(i=1,g=0;j!=0;i++){//小数部分转换。
j*=2;
if(j>=1){
j-=1;
g=g+pow(10,-i);
}
}
x=x-j;
for(t=0,i=0;x!=0;i++){//整数部分
t=t+(int)x%2*pow(10,i);
x=(int)x/2;
}
2015-05-23 18:54
举报帖子
使用道具
赠送鲜花
诸葛欧阳
来 自:流年
等 级:
贵宾
威 望:
82
帖 子:2790
专家分:14619
注 册:2014-10-16
第
3
楼
收藏
得分:7
浮点数有误差
一片落叶掉进了回忆的流年。
2015-05-23 19:15
举报帖子
使用道具
赠送鲜花
林月儿
来 自:湖南
等 级:
版主
威 望:
138
帖 子:2277
专家分:10647
注 册:2015-3-19
第
4
楼
收藏
得分:7
#include<stdio.h>
#include<math.h>
int main(){
double j=0.101,g,k;
int i;
for(i=1,g=0;j>0.0001;i++){
j=j*10;
g=g+1.0*(int)j*pow(2,-1*i);
j=j-(int)(j*10)/10;
}
printf("%lf",g);
}
剑栈风樯各苦辛,别时冰雪到时春
2015-05-23 23:23
举报帖子
使用道具
赠送鲜花
helloUJS
等 级:
蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
第
5
楼
收藏
得分:7
死循环的原因是在计算机中无法景区表示0.101,所以j=j*10之后,j的数值可能大于1,所以出现了死循环,改成相面的样子就好了,供参考:
main(){
double j=0.101,g,a;
int i=1;
for(a=1,g=0;j>0;){
j*=10;
a/=2;
while
(j>=1){
j-=1;
g=g+a;
}
}
printf("%lf\n",g);
2015-05-24 08:22
举报帖子
使用道具
赠送鲜花
5
1/1页
1
快速回复:
二进制小数部分转换成十进制循环语句中出现死循环。
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.027366 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved