在c++中循环内的值不会改变

Value inside loop doesnt change in C++

本文关键字:改变 c++ 循环      更新时间:2023-10-16

这里是一个示例代码,似乎不工作。在所有的迭代中,X和Y的值都是一样的(它们都等于0)有人能帮我改正这个错误吗?

#include <iostream>
using namespace std;

int main()
{
     double coord[4][2];
     int div_x, div_y;
     coord[1][0]=2;
     coord[1][1]=0;
     coord[2][0]=2;
     coord[2][1]=4;
     coord[3][0]=0;
     coord[3][1]=4;
     div_x  =  4;
     div_y  =  3;
     double a =0,b=0,c=0,d=0,e=0,f=0,g=0,h=0;
     a = coord[1][0]+coord[2][0]+coord[3][0];
     b = coord[1][0]+coord[2][0]-coord[3][0];
     c = coord[2][0]-coord[1][0]+coord[3][0];
     d = coord[2][0]-coord[1][0]-coord[3][0];
     e = coord[1][1]+coord[2][1]+coord[3][1];
     f = coord[1][1]+coord[2][1]-coord[3][1];
     g = coord[2][1]-coord[1][1]+coord[3][1];
     h = coord[2][1]-coord[1][1]-coord[3][1];
     for (int i=0; i<div_y+1; i++){  // loop all rows (blue)
      for (int j=0; j<div_x+1; j++){  // loop all nodes of one row (green)
        double w = -1 + (2/div_x)*j;
        double s = -1 + (2/div_y)*i;
        double X = (a+b*w+c*s+(w*s*d));
        double Y = (e+f*w+g*s+(h*s*w));
        cout<<"nX "<<X<<endl;
        cout<<"nY "<<Y<<endl;
      }
     }
     return 0;
}
.

你的问题是这里的划分:

double w = -1 + (2/div_x)*j;
double s = -1 + (2/div_y)*i;

2/div_x2/div_y是整数除法。当你在c++中除两个整数类型的值时,这个除法是作为整数除法进行的。因为div_x是4,div_y是3,所以它们的结果都是0。作为整数除法:

2 / 4 = 0
2 / 3 = 0

解决这个问题的最简单方法是对两个值中的一个使用双精度值,这将导致双除法。例如:

double w = -1.0 + (2.0/div_x)*j;
double s = -1.0 + (2.0/div_y)*i;

您也可以考虑使用float类型而不是double,除非您确实需要比float更高的精度,即大约7个十进制数字。

在您的代码中,div_xdiv_yint,因此,(2/div_x)(2/div_y)是整数除法,并求值为0

所以ws总是等于-1

可以使用:(2.0/div_x)(2.0/div_y)