Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:这个浮点错误问题的解决方案?_C++_Floating Point_Precision - Fatal编程技术网

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次
次,然后计算循环中的任何浮点值。通常,依赖于递增数值的循环终止条件应使用