为什么即使在添加0.1?
之后f也为0.0#include <stdio.h>
int main()
{
float f=0.0f;
f = f + 0.1f;
printf("f %f \n",&f);
return 0;
}
很抱歉,我搞砸了原来的问题
为什么这两个值不是?这是因为精确。 对不起,我必须在这里提出这个问题因为我被阻止了我无法提出更多问题
#include <stdio.h>
int main()
{
float f=0.0f;
int i;
for(i=0;i<10;i++)
{f = f + 0.1f; }
if(f == 1.0f)
printf("f is 1.0 \n");
else
printf("f %f is NOT 1.0\n",f);
return 0;
}
答案 0 :(得分:1)
printf("f %f \n",f);
提供正确的输出。见这里 - https://ideone.com/158Zbv
打印地址printf(" %p \n",&f);
即可。
您的printf
语句将在何处提供未定义的行为。
关于你的第二个代码 -
您可以重写这样的if
条件 -
if(f>0.99f && f<1.01f)
这样它就能为您提供正确的输出 - https://ideone.com/kARx3A
虽然添加f
的程序值不完全是1.0f
,但它可能有一些不同的值,当我们看到它带有更多小数位的值时,它与1.0f
略有不同这就是为什么你的代码总是转到其他部分。
在此处查看f
每次迭代时的值https://ideone.com/wJ7u1R
答案 1 :(得分:0)
您正在使用&amp;打印变量f的地址操作员,删除此&amp;操作