| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2366 人关注过本帖
标题:[讨论]一个很有趣的程序
取消只看楼主 加入收藏
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
 问题点数:0 回复次数:2 
[讨论]一个很有趣的程序

一个很简单的程序是:

#include <stdio.h>
#incude <conio.h>
void main()
{
float one,two=-1;
for(one=0;one!=two;one++)two=one;
clrscr();
printf("stop at : %f",one);
}
上面的程序就是检测浮点数误差,某一个足够大的浮点数加一后本身并没有改变,即大数吃小数

但有趣的是,程序还可以这样写:
#include <whole.h>
void main()
{
float one;
one=0;
for(;one==++one;);
clrscr();
printf("stop at : %f",one);
}

两个程序的结果都是 :one=16777216.000000
第一个程序很容易理解,但第二个就很难理解,表达式似乎记过成立哟

注:以上程序在tc2.0下编译通过

[此贴子已经被作者于2005-1-13 14:41:41编辑过]


搜索更多相关主题的帖子: 检测 include 
2005-01-12 15:23
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
得分:0 
但是在科学计算当中,这样的情况是常常遇到的,没有办法不处理
浮点不能比较大小,那平常编程里面怎么可以呢?不要说是编译器自己处理的
浮点数不能是零比较,浮点数本身怎么不能比较呢?请楼上说明,正好长见识喽

而且,我说的,“某一个足够大的浮点数加一后本身并没有改变”,在编程当中是可以发生的,就是当数字1已经不能影响到被加数的有效位数时,加一等于加零

此人已消失
2005-01-13 14:46
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
得分:0 
knocker很专业嘛,偶喜欢
在一般的数值中,好像都会采用你说的第二种方法。

不过,偶发现大家没有注意到,第二个程序很值得玩味:
#include <whole.h>
void main()
{
float one;
one=0;
for(;one==++one;);
clrscr();
printf("stop at : %f",one);
}
这个程序在TURBOC2.0中可以运行,但是在其他的编译器中大多数都有问题的,就是,one==++one,似乎应该永远成立,或者永远不成立,可是就是有那么一个值可以使程序完成,呵呵

此人已消失
2005-01-15 09:19
快速回复:[讨论]一个很有趣的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016137 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved