♣
浮点数问题,这是VC6.0的BUG吗?
我在win2000+vc6.0环境下运行一下代码:
/***********************************************
*file name : float_accuracy.c
*description : x是float类型,什么情况下x!=x为真
*note : 若在判断x!=x前对x进行了修改,则
有可能使x!=x为真
*author : kernelxu
*resource : http://bbs.chinaunix.net/forum/
viewtopic.php?t=575049&show_type=
*date : 2005/07/10
***********************************************/
#include <stdio.h>
/**********************************************
*function name : main()
***********************************************/
int main(void)
{
float x = (float)1e-3;
x = x + 1;
//printf("hello world!\n");
if (x != x)
{
printf("x is unequal to x!!\n");
}
else
{
printf("x is equal to x!\n");
}
return 0;
}/*end of main()*/
运行结果是:
x is unequal to x!!
加上被注释的那一条后,结果为:
x is equal to x!
怀疑是vc6.0的bug。
具体大家可看看:
http://bbs.chinaunix.net/forum/viewtopic.php?t=575049&show_type=
· 网友精彩回答:
可能是编译优化造成的吧,尝试使用
volatile float x 再看看有没有问题
这里都是equal
应该是编译器的问题吧
把文件按照c语言编译,debug和release版本都有问题
如果按照cpp语言编译就没有问题
浮点数比较相等一般要好是
#define exp 0.000001
(x-x)<=exp
少用了一个fld.这是为什么呢?
vc6(sp5+processor pack)+winxp9sp2),运行结果并没有问题,两次结果都一样,都为x is equal to x!
可能是编译器的问题。装上vc sp5就好了。
浮点数不精确 在除法中算的经常不准确 我遇到过一次具体情形忘了
.- 更多问题:
- · 在线等一个 关于声明变量的小问题 ---------------
- · 请教关于WebBrowser、MemoryStream问题
- · 昨天吃坏东西了,肠胃炎发作,躺了一天,终于用内功把毒镇住了.散分!
- · 如何删除一个类?
- · 截图问题
- · 如何调用外部程序,并把外部程序的界面放到我的界面上
- · 如何在.net中做图表?
- · 我的shell脚本怎么能运行java程序
- · ****** 数据源改动后,重新部署EJB时的问题 ******
- · JAVA中如何得到系统的日期和时间?
- · 登录控制问题
- · 大家帮我提一点建议
- · 我以前看过一段代码,是通过显示SELECT语名和别的什么语句把一个数据库的值传入另一张表中
- · [高难度]如何捕获IE浏览器的事件,如在IE里单击下载。
- · 新开一ASP.NET技术交流群,群号码:13108133,大家踊跃参加哈。
- · 怎么判断连接数据库失败在VB.NET
- · WAP专题
- · XHTML技术文档 | XHTML
- · RedHat专题
- · JPEG技术文档
- · IEEE技术文档 | IEEE
- · CGI专题
- · 网络中间件
- · 分布式处理
- · 电源ic
- · ic卡系统
- · oracle database
- · mysql database
- · lan共享
- · 制作iso文件
- · ssl webservice
- · 分布式网络
- · 使用汇编写进注册表启动的简单例子
- · 禁用注册表有什么用处
- · 注册表在哪
- · 电脑注册表损坏时出现的十种症状
- · 怎样修改注册表
- · 如何恢复注册表啊
- · 谁有注册表恢复工具?
- · 关闭cookies
- · 火狐浏览器

