比较向量中的浮点数

时间:2019-01-16 22:16:32

标签: c++ vector floating-point

我正在编写一个程序,该程序创建两个向量以练习比较向量中的元素。第一个向量是所有不是1-100之间的质数的数字的列表(不是素数),第二个向量是1-100之间所有数字的质数的列表(向量number_bank)。我正在使用循环来比较向量中的每个元素。可以说数字5来自number_bank(它是质数),如果该数字与not_prime_numbers向量中的任何数字都不匹配,则将其推回第三个向量,称为质数。如果要将类似4的数字与not_prime_number列表中的元素进行比较,则应该与该列表中的数字4匹配,并中断循环,而不必将该数字推回prime_numbers向量。发生的情况是1-100之间的所有数字都被推迟。 number_bank向量中的4永远不会等于not_prime_numbers向量中的4,因此循环会继续将4推回质数向量。

不涉及改变这些向量中的元素的数学运算,因此通常不存在与比较浮点数相关的增量误差范围(ε)。有没有更好的方法比较这些向量中的元素?

int main()
{
    float i = 1.0;
    unsigned int n = 0;
    std::vector<float>not_prime_numbers;
    std::vector<float>number_bank;
    std::vector<float>prime_numbers;
    while (i < 101.0)
    {
        for (float j = 1.0;j<(i);++j)
        {
            float p = i / j;
            if (abs(floor(p)) == p&&j!=1.0)
            {
                not_prime_numbers.push_back(i);
                break;
            }
        }
        ++i;
    }

    for (float k = 1.0; k < 101.0; ++k)
    {
        number_bank.push_back(k);
    }

    for (unsigned int m = 0; m < number_bank.size(); ++m)
    {
        while (n < not_prime_numbers.size())
        {
            if (not_prime_numbers[n] == number_bank[m])  // here is where i try to break the loop
            {                                            
            break;                                   
            }
            if (n == (not_prime_numbers.size()-1))
            {                   // here is where element is pushed back when compared to all loop elements
                prime_numbers.push_back(number_bank[m]);
                break;
            }
            if (not_prime_numbers[n] != number_bank[m])
            {
                ++n;
            }

        }
    }


    std::cout << "All prime numbers between 0 and 100 are as follows:\n";
    for (unsigned int j = 0; j < prime_numbers.size(); ++j)
    {
        std::cout << prime_numbers[j] << "\n";
    }
    return 0;
}

我阅读了.compare并尝试了它,但它指出左侧需要一个类结构(也许向量没有类结构?)。我是C ++的新手,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您永远不会重置n,因此一旦获得素数(n == (not_prime_numbers.size()-1)时),其余的数字也将添加到素数列表中。

为什么要在循环中检查该条件?如果发现数字不是素数,则应设置一个标志变量,然后在循环后检查以将其添加到素数列表中。