我在简单的 C 循环中找不到我的错误,printf 不起作用
I can't found my mistake in my simple C-loop,the printf doesnt work
下面是我的代码,当我尝试编译它时,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;
}
Floating-point算术旨在逼近real-number算术。源代码中的 0.05f
从该十进制数字转换为近似它的二进制格式。此外,每次执行 i += 0.05f
时,real-number 总和会四舍五入以适应 float
格式。导致的舍入误差可能会复合或取消,使 i
的当前值远离或接近如果使用 real-number 算术时的值。
要使用 floating-point 值的算术序列进行迭代,您可以对计数器使用整数值,然后根据需要缩放计数器:
for (float iteration = 0; iteration < 20; iteration += 1)
{
float i = iteration / 20;
if (i == 0.5f)
printf("Die Hälfte ist erreicht\n");
}
但是,任何比这更复杂的代码都可能涉及其他微妙之处,因此有必要了解 floating-point 算术以便正确使用它。
浮点数基于二进制数。可能无法准确表示十进制数的值,只能表示非常接近的值。
这意味着您应该避免比较 ==
或 !=
浮点数。
一种选择是将您的程序转换为使用整数计数。
#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;
}
下面是我的代码,当我尝试编译它时,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;
}
Floating-point算术旨在逼近real-number算术。源代码中的 0.05f
从该十进制数字转换为近似它的二进制格式。此外,每次执行 i += 0.05f
时,real-number 总和会四舍五入以适应 float
格式。导致的舍入误差可能会复合或取消,使 i
的当前值远离或接近如果使用 real-number 算术时的值。
要使用 floating-point 值的算术序列进行迭代,您可以对计数器使用整数值,然后根据需要缩放计数器:
for (float iteration = 0; iteration < 20; iteration += 1)
{
float i = iteration / 20;
if (i == 0.5f)
printf("Die Hälfte ist erreicht\n");
}
但是,任何比这更复杂的代码都可能涉及其他微妙之处,因此有必要了解 floating-point 算术以便正确使用它。
浮点数基于二进制数。可能无法准确表示十进制数的值,只能表示非常接近的值。
这意味着您应该避免比较 ==
或 !=
浮点数。
一种选择是将您的程序转换为使用整数计数。
#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;
}