我使用以下代码在C语言中比较一个浮点变量和一个双精度变量。
我正在使用在线C编译器这里编译我的代码。
我知道对于循环小数,EQUAL永远不会被打印出来。然而我期望的应该是LESS,因为double应该有更高的精度,因此应该比float更接近实际值1.1。据我所知,在C中当你比较float和double时,float的尾数被扩展为与double相同的尾数,而那个被扩展的值应该总是更小的。
然而在所有情况下GREATER被打印出来。我是否漏掉了什么?
int main()
{
float f = 1.1;
double d = 1.1;
if(f==d)
printf("EQUAL");
if(f < d)
printf("LESS");
if(f > d)
printf("GREATER");
return 0;
}
我正在使用在线C编译器这里编译我的代码。
我知道对于循环小数,EQUAL永远不会被打印出来。然而我期望的应该是LESS,因为double应该有更高的精度,因此应该比float更接近实际值1.1。据我所知,在C中当你比较float和double时,float的尾数被扩展为与double相同的尾数,而那个被扩展的值应该总是更小的。
然而在所有情况下GREATER被打印出来。我是否漏掉了什么?
float f = 1.1;
,这是试图将一个double
字面量压缩到一个float
变量中。更好的做法是使用float f = 1.1f;
。请注意末尾的f
,它将字面量转换为float
值。 - user3629249