展开全部
你查一下符点数存储标准IEEE754就知道了!
符点数是采用二进制科学计数法来进行存储的,因此,绝大多数的数在计算机中是不能 精确 表示的。
如果两个数a b都是常数赋值,这样比较,应该不会有问题,如:double a=5.3,b=5.3;
if ( a == b )
{
printf("a=b\n");
}
这时会输出a=b
如果a或b是经过运算后得到的值,这时就不一定是一个精确的你想要的值了,如:
double b=2.6+2.7,a=5.3;
if ( a == b )
{
printf("a=b\n");
}
这时就不一定能输出a=b了!
符点数是采用二进制科学计数法来进行存储的,因此,绝大多数的数在计算机中是不能 精确 表示的。
如果两个数a b都是常数赋值,这样比较,应该不会有问题,如:double a=5.3,b=5.3;
if ( a == b )
{
printf("a=b\n");
}
这时会输出a=b
如果a或b是经过运算后得到的值,这时就不一定是一个精确的你想要的值了,如:
double b=2.6+2.7,a=5.3;
if ( a == b )
{
printf("a=b\n");
}
这时就不一定能输出a=b了!
展开全部
可以判断的 ,只不过浮点数精度过高,难以达到一致。
举个例子
#include <stdio.h>
int main()
{
float va1=0.1f;
float va2=2.1f;
va1-=0.09f;
va2-=2.09f;
printf("%e",va1-va2);
return 0;
}
这个程序并不输出0,而是7.45058e-009,所以在进行算术逻辑运算的时候,会丧失精度
=========================================
你自己把我给你的程序拿去测试下就知道了
=========================================
记得给分哦
=========================================
举个例子
#include <stdio.h>
int main()
{
float va1=0.1f;
float va2=2.1f;
va1-=0.09f;
va2-=2.09f;
printf("%e",va1-va2);
return 0;
}
这个程序并不输出0,而是7.45058e-009,所以在进行算术逻辑运算的时候,会丧失精度
=========================================
你自己把我给你的程序拿去测试下就知道了
=========================================
记得给分哦
=========================================
追问
这是结果,结果是0.000000可为什么用 if(a==b)就不能判断呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为a ,b实数,而实数在计算机和存储时会有一些微小的误差,因此不能直接进行“if(a= =b)
判断。必须用if (fabs(a-b)<1e-6进行判断
判断。必须用if (fabs(a-b)<1e-6进行判断
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为浮点数都是有精度的,比如1.0000000000和1.000000是不一样的
追问
偶是个菜鸟,想问一下它们区别在哪呢?能不能详细点······
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询