相关疑难解决方法(0)

处理浮点数中的精度问题

我想知道是否有办法克服精确度问题,这似乎是我的机器内部表示浮点数的结果:

为清楚起见,问题归纳为:

// str is "4.600";   atof( str ) is 4.5999999999999996  
double mw = atof( str )  

// The variables used in the columns calculation below are:   
//  
//                    mw = 4.5999999999999996  
//                    p = 0.2  
//                    g = 0.2  
//                    h = 1 (integer)  

int columns = (int) ( ( mw - ( h * 11 * p ) ) / ( ( h * 11 * p ) + g ) ) + 1;
Run Code Online (Sandbox Code Playgroud)

在转换为整数类型之前,列计算的结果是1.9999999999999996; 距离2.0的理想结果还差不多.

任何建议最受欢迎.

c++ floating-point floating-accuracy

9
推荐指数
5
解决办法
1万
查看次数

使用==运算符比较两个舍入的浮点数是否正确?

或者操作是否有可能失败?

谢谢.

我选择了错误的术语,我真正的意思是四舍五入到0,而不是截断.

关键是,我需要比较两个双精度的整数部分,我只是将它们转换为int然后使用==,但是,正如有人在我之前的一个问题中指出的那样,这可能会引发溢出异常,如果double不能适合整数.

所以问题是'使用==运算符来比较之前舍入为0的两个双精度是否正确,或者我应该坚持使用cast to int方法并捕获可能的异常?

.net floating-point compare rounding

6
推荐指数
2
解决办法
3527
查看次数