相关疑难解决方法(0)

浮动和双重比较最有效的方法是什么?

比较两个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)

似乎浪费处理.

有谁知道更聪明的浮动比较器?

c++ algorithm floating-point optimization

495
推荐指数
13
解决办法
39万
查看次数

我们可以依靠op ==来二进制比较浮点值吗?

我们都知道(对吗?!),不应该通过测试equality(operator==)来比较浮点值.

但是,如果我真的想确定两个是否float小号ab二进制的平等?如果他们不被允许为NaN(或其他"特殊价值"),这是"安全的"吗?我可以依靠operator==这种方式运作吗?

c++ floating-point

14
推荐指数
2
解决办法
608
查看次数

给定(a,b)计算k的最大值,使得^ {1/k}和b ^ {1/k}是整数

我正在编写一个程序,试图找到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整除,因此整数) …

c++ algorithm math c++11

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

标签 统计

c++ ×3

algorithm ×2

floating-point ×2

c++11 ×1

math ×1

optimization ×1