如何解决我在简单的C循环中找不到错误,printf无效
下面是我的代码,当我尝试对其进行编译时,printf不起作用,您怎么看?为什么?
#include <stdio.h>
int main(){
float i;
for(i=0.0f; i < 1.0f; i+=0.05f){
if(i == 0.5f)
printf("Die Hälfte ist erreicht\n");
}
return 0;
}
解决方法
浮点算术被设计为近似实数算术。源代码中的0.05f
从该十进制数字转换为近似的二进制格式。此外,每次执行i += 0.05f
时,实数和会四舍五入以适合float
格式。导致的舍入误差可能会加成或抵消,从而使i
的当前值与使用实数算法时所产生的舍入误差进一步增大或接近。
要使用浮点值的算术序列进行迭代,可以将整数值用于计数器,然后根据需要缩放计数器:
for (float iteration = 0; iteration < 20; iteration += 1)
{
float i = iteration / 20;
if (i == 0.5f)
printf("Die Hälfte ist erreicht\n");
}
但是,任何比这更复杂的代码都可能包含其他细微之处,因此有必要学习浮点算法以正确使用它。
,浮点数基于二进制数。可能无法精确表示十进制数字的值,而只能表示非常接近的值。
这意味着您应该避免对浮点数进行比较==
或!=
。
一种选择是将程序转换为使用整数进行计数。
#include <stdio.h>
int main(){
float f;
for(int i=0; i < 100; i+=5){
if(i == 50)
printf("Die Hälfte ist erreicht\n");
f = (float)i / 100f;
}
return 0;
}
另一种选择是比较浮点数与小数之间的差异。
#include <stdio.h>
int main(){
float i;
for(i=0.0f; i < 1.0f; i+=0.05f){
float diff = i - 0.5f;
if(diff < 0) diff = (-diff);
if(diff < 0.01)
printf("Die Hälfte ist erreicht\n");
}
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。