C++ FAQ lite "[29.17]为什么我的浮点比较不起作用?" 建议这个相等测试:
#include <cmath> /* for std::abs(double) */
inline bool isEqual(double x, double y)
{
const double epsilon = /* some small number such as 1e-5 */;
return std::abs(x - y) <= epsilon * std::abs(x);
// see Knuth section 4.2.2 pages 217-218
}
Run Code Online (Sandbox Code Playgroud)
+0
和-0
?|x| < epsilon
?更新
正如Daniel Daranas所指出的那样,最好调用函数isNearlyEqual
(我关心的是这种情况).
有人指出了这个链接,我想更加突出地分享.
干草伙计,我有2个花车,都来自输入盒.
我需要比较这两个浮点数,如果一个是负数,一个是正数则抛出一个错误.如果他们既是积极的,也可能都是消极的,那很好.
有任何想法吗?
谢谢