2014-02-26 30 views
0
main() 
{ 

    float f=0.7; 
    if(0.7>f) 
    printf("Hi"); 
    else 
    printf("Hello"): 
} 

当我编译这个程序时,输出结果为Hi即使数值相等,双容器所容纳的数字大于浮点数

有人能解释一下scenerio如何0.7>0.7true?这是因为0.7用于if语句是doubleffloat
即使它是double仍然其值是0.7创建的差异只是在double的情况下存储在8字节中,而在float的情况下存储在4字节中。但是我认为,当存储在容器中的值相等时,容器的容量有多大并不重要。所以0.7永远不会比f更大。所以根据我应该在Hello。那么为什么Hi是输出?

+7

这里有数百个重复项,具有不同的浮点值。长话短说,因为'0.7'不能完全表示,并且因为'0.7'被视为'double',而不是'float',所以这两个表示略有不同,导致您看到的行为。将'0.7'改为'0.7F'使其正常工作。您不会看到具有“double”和“float”的数字的行为,例如,“0.5”,“0.25”,“0.125”等。 – dasblinkenlight

+0

http://perso.ens-lyon.fr/jean-michel.muller/goldberg.pdf强烈建议阅读,至少可以请第一页 –

+0

解释我多一点。我只是将其值从0.7到0.5,是的,你是正确的输出出来是你好。 – user3335653

回答

1

容器确实在这里有所不同。这个想法是如何存储这些值,然后检索。如果您使用可以转换回精确十进制值的数字。你可能会看到不同之处。

1

使用此看到输出:

float f=0.7f; 

如果定义float f = 0.7,它被存储为manttisaexponent。这取决于precision。所以在这种情况下.7将是less than.7。如果你定义了0.7f,它将是equal0.7

+0

如果我取f = 0.5,那么输出将是hello.why是0.5不作为尾数和指数存储。 – user3335653

+0

@ user3335653您可以将“0.5以二进制表示为.10000000”,“.7将为0.1011001100110011001100110011001100110011001100110011”。这取决于'manttisa'有多少位用于'exponenet'。在'.7'中,如果某些“最后一位”未被存储,将小于“.7”,而不是“.5”。 – Rahul

相关问题