比较两个double或两个float值的最有效方法是什么?
简单地这样做是不正确的:
bool CompareDoubles1 (double A, double B)
{
return A == B;
}
Run Code Online (Sandbox Code Playgroud)
但是像这样:
bool CompareDoubles2 (double A, double B)
{
diff = A - B;
return (diff < EPSILON) && (-diff < EPSILON);
}
Run Code Online (Sandbox Code Playgroud)
似乎浪费处理.
有谁知道更聪明的浮动比较器?
我们都知道(对吗?!),不应该通过测试equality(operator==)来比较浮点值.
但是,如果我真的想确定两个是否float小号a和b是二进制的平等?如果他们不被允许为NaN(或其他"特殊价值"),这是"安全的"吗?我可以依靠operator==这种方式运作吗?
我正在编写一个程序,试图找到k> 1的最小值,使得a和b的kth根(它们都被给定)等于整数.
这是我的代码片段,我已经评论澄清了.
int main()
{
// Declare the variables a and b.
double a;
double b;
// Read in variables a and b.
while (cin >> a >> b) {
int k = 2;
// We require the kth root of a and b to both be whole numbers.
// "while a^{1/k} and b^{1/k} are not both whole numbers..."
while ((fmod(pow(a, 1.0/k), 1) != 1.0) || (fmod(pow(b, 1.0/k), 1) != 0)) {
k++;
}
Run Code Online (Sandbox Code Playgroud)
差不多,我在(a,b)中读到,我从k = 2开始并且增加k直到a和b的第k个根与0 mod 1一致(意味着它们可以被1整除,因此整数) …