为什么双重是负面的,应该是积极的?

时间:2013-12-23 17:15:15

标签: c++ types

我想创建一个应用程序来生成满足等式的完整电话号码列表:

Equatation

x是一个有理数。

我们可以假设

x=s/t

现在,经过一些转换后,我们获得了

Equatation

由于telephone number是整数且10^9是整数,我们知道t * 666333999 / s是整数。因此st * 666333999

的除数

到目前为止,我的程序搜索666333999的所有除数。我认为应该做得很好(它应该写出大部分电话号码)。不幸的是,有时我的电话号码(tym变量)是负数。

为什么会这样?

这是我的代码。

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector < unsigned > divisor;
    const int number = 666333999;
    long double tym;                     // it's the phone number (9 digits)
    for (int i = 2; i < number + 1; i++) 
    {                              // I'm pushing all the divisors to vector.
        if (number % i == 0)
        {
        divisor.push_back(i);
        }
    }

    for(unsigned i = 1; i < divisor.size() + 1; i++) 
    {                                      // i are consecutives values of s
        for(unsigned j = 1; j < (unsigned)2000000000; j++) 
        {                                  // j are consecutives values of t
            tym = number / divisor[i];
            tym *= j;
            if(tym > 99999999 && tym < 2000000000)  // I must substract 10^9
            {
                 cout << "\t(!)\t i = " << i << " and j = " << j << ","
                         "div[i] = " << divisor[i] << ", telephone"
                         " number = " << (tym - 1000000000) << endl;
            }
            else if(tym >= 2000000000)
            {
                break;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

计算中涉及的数字超过32位整数的能力,但可能适合64位整数。

可能在您的平台int是32位。只需使用long long

如果您想确定64位,请使用std::int64_t中定义的<cstdint>