比较浮点变量
comparing float variable
可能的重复:
浮动和双重比较的最有效方法
比较浮点值有多危险?
我有const float M = 0.000001;
和float input;
。我不想平等检查它们。但是我知道直接检查具有副作用M != input
。因此,我的问题如何可以比较两个没有副作用的浮点值?
const double epsilon = 1e-12;
if(fabs(input - M) < epsilon) //input == M
{
//...
}
if(fabs(input - M) >= epsilon) // input != M
{
//...
}
比较越小,比较越准确,因此可能会告诉您两个值不相等的可能性越多,而您希望它们被视为相等。Epsilon的值越大,它告诉您结果的可能性就越大,实际上您希望它们不相等。应根据手头任务的具体方式选择Epsilon的价值。
比较浮子时,必须比较它们是"关闭"而不是"相等"。有多种方法可以根据您的需求定义"关闭"。但是,典型的方法可能是:
namespace FloatCmp {
const float Eps = 1e-6f;
bool eq(float a, float b, float eps = Eps) {
return fabs(a - b) < eps;
}
//etc. for neq, lt, gt, ...
}
然后,使用FloatCmp::eq()
代替==
比较浮子。
相关文章:
- 算术运算的结果类似于:C浮点变量中的1/3
- 为什么双精度引用值在分配给C++中的浮点变量时不会更改
- 是否可以保证浮点变量的副本将按位等效于原始副本?
- 直接为浮点变量分配十六进制整数与通过指针转换分配之间的区别
- 为什么将浮点变量与另一个浮点变量的缩减为int给出了完全不同的答案
- 将测量的时间差与浮点进行比较
- 如何线性化两个浮点变量的乘积
- 在不同翻译单元中具有静态存储持续时间的依赖非局部常量浮点变量的常量初始化
- 比较 C++ 中的两个浮点变量
- 我创建了一个将雷亚尔转换为美元的程序,但浮点变量不正确
- 浮点变量不存储十进制
- 在 c++ 中,浮点变量除以整数变量时的结果类型
- 在C 中声明一个八倍精度浮点变量
- 有符号浮点变量转换为无符号DWORD
- 比较浮点变量
- 浮点变量变为无穷大
- 在C++中对浮点变量执行算术时,是否始终需要使用浮点数文字
- 当两个整数相乘并将结果存储在浮点变量中时,结果是否可以流动
- 如何比较C++中的浮点变量
- 在哪种情况下,我可以在C++中使用==直接比较两个浮点变量