for循环多变量,第二变量不更新

时间:2014-06-21 23:49:16

标签: c++ for-loop

我试图在一个for循环中编写两个循环,所以我在for循环中查找了多个变量的语法

问题是第二个变量l没有更新我不知道为什么

#include<iostream>
using namespace std;

int main ()
{
    float vsum=0, lsum=0;
    double nsum=0, msum=0;
    float v=1, l=100000000;
    for (v, l ; v<= 100000000, l >= 1 ;  v++, l--)
    {
        vsum= vsum + 1/v;
        nsum= nsum + 1/v;
        lsum= lsum + 1/l;
        msum= msum+ 1/l; 
    }
    cout << " The float sum of all numbers 1 through 1/100000000 is " << vsum << endl;
    cout << " The double sum of all numbers 1 through 1/100000000 is " << nsum << endl;
    cout << "The float sum of all numbers 1/100000000 through 1/1 is " << lsum << endl;
    cout << "The double sum of all numbers 1/100000000 through 1/1 is " << msum << endl;
    cin >> vsum; 
}

2 个答案:

答案 0 :(得分:2)

我想你的问题是在

之后
float f = 100000000;

为什么--f;保持f不变?

答案是由float的粒度决定的。 float没有足够的精度来存储每个可能的整数。例如,显然32位浮点数不能存储与32位int一样多的整数值。

0越远,float的连续可能值之间的差距就越大。在您的系统上100000000 - 1仍然大于100000000以下的浮动的下一个可能值。

C ++的规则是,当计算结果不能完全由浮点表示时,它的实现定义是使用下一个最低值还是下一个最高值。 (所以你的编译器应该实际记录这里发生的事情)。在这种情况下,您的系统使用次高值。

要获得预期的结果,请将vl设为整数类型,并在实际计算中进行浮点转换,例如

vsum += 1.f/v;
nsum += 1.0/v;

答案 1 :(得分:1)

正如dasblinkenlight所提到的,你只是检查第二个条件,但第二个变量正在更新。这是一个证明这一点的简略例子。

#include<iostream>
using namespace std;
int main ()
{

    float vsum=0, lsum=0;
    double nsum=0, msum=0;
    float v=1, l=10;
    for (v, l ; v<= 10, l >= 1 ;  v++, l--)
    {
        cout << v << " " << l << endl;
    }
}

输出:

1 10
2 9
3 8
4 7
5 6
6 5
7 4
8 3
9 2
10 1