在 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
代码:
#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