2017-03-02 200 views
-7
float num = 0.5; 
double num2 = 0.5; 
if(num == num2) 
    printf("Equal"); 
else 
    printf("Not Equal"); 

怎么可能?float 0.5和double 0.5如何相等

  1. 浮动0.5的二进制值00111111 00000000 00000000 00000000
  2. 的双0.5的二进制值是00111111 11100000 00000000 00000000 00000000 00000000 00000000 00000000

请一步一步解释,因为我是新来的编程

+6

Java,C还是C++? – Steeve

+0

只有在Java中,您的代码才会被编译。 – SachinSarawgi

+4

因为编译器(或运行时解释器)不比较位模式? –

回答

1

比较内,则float值将被隐式转换为double类型。

然后比较相同类型的两个值

+0

根据你的观点float 0.1隐式转换为double并且结果将相等(true)...但是实际结果是Not Equal(false).. –

+0

@munyasamyv:在语句float x = 0.1; “0.1”的double值被转换为“float”类型,失去了精度。后来,当把这个值与另一个('double')'0.1'转换为'double'后的精度损失进行比较时,它们是不同的。换句话说'(双)(float)0.1!= 0.1' – pmg

0

您应该查看IEEE764浮点数和双精度定义,以查看真实数字是如何真正存储的,以及二进制点偏移量对于浮点数和双精度的含义。机器的排序也会影响事物。