#incude <stdio.h>
double f(int x) {
return 1.0/x;
}
void main(){
double a,b;
int i;
a=f(10);
b=f(10);
i=a==b;
printf("%d\n", i);
}
void main(){
double a,b,c;
int i;
a=f(10);
b=f(10);
c=f(10);
i=a==b;
printf("%d\n", i);
}
结果是第一个main函数输出结果为0,第二个main函数输出结果为1。书中的解释:a=f(10)被写入存储单元,而b=f(10)没有被写入,因此比较a,b,其实是比较浮点寄存器栈顶的值与精度丢失后的a的值,输出结果为0;第二个main函数多了c=f(10),因此a=f(10),b=f(10)都被写入存储器,精度都丢失,比较时再次读入浮点寄存器栈中,结果就是相等。
我的问题是:为什么第一个main函数的b=f(10);没有写入内存啊,这里就是开辟出64位的空间,然后将运算结果写入这个开辟的64位空间中,从80位浮点寄存器中到64位,b的精度丢失了啊。。。。。。
1、多数情况下,讨论c语言最后都变成编译器之争,所以,先说明你的编译环境。
2、永远不要用
==
比较2个浮点数。