在 C++ 中创建浮点数组时的奇怪问题

Strange problems when creating a float array in c++

代码:

#define N 4
float unknowns[N] = {71/129, 539/1461, 1493/8507, 17/33};
for(int i = 0; i < N; i++)
{
    cout << unknowns[i] << " ";
}
cout << endl << endl;

输出:

0 0 0 0 

出于某种原因,程序将数组中的数字输出为整数而不是浮点数,我不知道为什么。我该如何解决这个问题?

例如,此代码有效,我尝试将它们转换为数组本身,但仍然无效:

cout << (float)71/129 << " " << (float)539/1461 << " " << (float)1493/8507 << " " << (float)17/33 << endl;

输出:

0.550388 0.368925 0.175503 0.515152

您显示的数字被隐式转换为整数,因此结果始终为零,这就是您通过零结果得到的结果。当您告诉编译器这些是浮点数时(例如,通过添加零),结果也是浮点数。这是一个工作代码示例:

int main() {
    int N = 4;
    float unknowns[N] = {71.0/129.0, 539.0/1461.0, 1493.0/8507.0, 17.0/33.0};
    for(int i = 0; i < N; i++)
    {
        std::cout << unknowns[i] << " ";
    }
    std::cout << std::endl << std::endl;
    return 0;
}

问题是,您正在进行整数除法(例如 71/129)并稍后将值存储在浮点数中。整数的结果是所有值的除法都是 0.

构造数组时使用浮点数除法(使用71.0/129.0)。

密码是:

define N 4
float unknowns[N] = {71.0/129.0, 539.0/1461.0, 1493.0/8507.0, 17.0/33.0};
for(int i = 0; i < N; i++)
{
    cout << unknowns[i] << " ";
}
cout << endl << endl