gpt4 book ai didi

c++ - for循环多变量,第二个变量不更新

转载 作者:行者123 更新时间:2023-11-30 02:45:34 28 4
gpt4 key购买 nike

我想在一个 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;
}

最佳答案

我猜你的问题是在

float f = 100000000;

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

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

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

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

为了得到你想要的结果,将vl设为整数类型,并在实际计算中进行float转换,例如

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

关于c++ - for循环多变量,第二个变量不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24346887/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com