2016-03-02 54 views
0

我想更好地理解浮点值和相关的不精确性。不一致的浮点输出

以下是两个片段稍作修改

片段1

#include <stdio.h> 

int main(void) 
{ 
    float a = 12.59; 
    printf("%.100f\n", a); 
} 

输出:

12.5900001525878906250000000000000000000000000000000000000000000000000000000000000000000000000000000000

片段2:

#include <stdio.h> 

int main(void) 
{ 
    printf("%.100f\n", 12.59); 
} 

输出:

12.589999999999999857891452847979962825775146484375000000000000000000000000000000000000000000000000000

为什么会出现在两个输出有区别吗?我无法理解这个问题。

回答

2

在第一种情况下,您将变量定义为浮点数,第二种情况下您直接给出数字。

系统可能会将直接数字视为双精度而非浮点数。

所以,我想可能是因为float和double的系统定义。

2

获得一致的行为,你可以明确地使用浮点文字:

printf("%.100f\n", 12.59f); 
1

摘录1,您的浮动被扔在了一倍,这铸造引起值的变化(由于错综复杂的浮点表示)。

在片段2中,此演员阵容不会发生,它会直接以双面打印。

了解,尝试运行下面的代码片段:

#include <stdio.h> 

int main(void) { 
    double a = 12.59; 
    printf("%.100f\n", a); 
    return 0; 
} 

int main(void) { 
    float a = 12.59; 
    printf("%.100f\n", (double)a); 
    return 0; 
} 

请参阅本作的更多信息:How does printf and co differentiate beetween float and double