C++ C++;:这个浮点错误问题的解决方案?
这是我的代码示例:C++ C++;:这个浮点错误问题的解决方案?,c++,floating-point,precision,C++,Floating Point,Precision,这是我的代码示例: float a = 0.f; float b = 5.f; float increment = 0.1f; while(a != b) a+=increment; 这将导致无限循环。是否有解决方法,或者唯一的解决方法是设置公差?尽可能避免使用浮点计算。在这种情况下,您可以将这些数字作为整数处理,方法是将它们乘以10,最后除以10 float a, b, increment; int a_i = 0; int b_i = 50; int increment_i =
float a = 0.f;
float b = 5.f;
float increment = 0.1f;
while(a != b)
a+=increment;
这将导致无限循环。是否有解决方法,或者唯一的解决方法是设置公差?尽可能避免使用浮点计算。在这种情况下,您可以将这些数字作为整数处理,方法是将它们乘以10,最后除以10
float a, b, increment;
int a_i = 0;
int b_i = 50;
int increment_i = 1;
while(a_i != b_i)
a_i+=increment_i;
a = a_i / 10.f,
b = b_i / 10.f;
increment = increment_i / 10.f;
一般来说,是的,公差有助于
,而(std::fabs(b-a)<1.0e-6)
或其他情况。通常,无论采用何种方式,始终使用整数作为循环条件。如果您知道必须循环n次
次,然后循环n次
次,然后计算循环中的任何浮点值。通常,依赖于递增数值的循环终止条件应使用