gpt4 book ai didi

c++ - 程序精度因参数而异

转载 作者:行者123 更新时间:2023-11-28 04:25:51 25 4
gpt4 key购买 nike

我正在尝试学习如何用 C++ 编程,所以我创建了一些允许您输入最小和最大参数的东西,它将计算 k+(k+1)+(k+2)+ ...+(max),并将其与分析值进行比较,使用标准公式 (n(n+1)/2)。当我尝试小数字时它似乎工作正常,但是当例如尝试 min=4max=4*10^5 (400,000) 时,我得到总和的负结果,但使用分析方法检查结果为正,即使在将类型从“int”更改为“long”之后也是如此。尝试其他组合,我得到了相反的结果,分析方法导致了负和。我怀疑这与 int 类型可以达到一定位数这一事实有关,但我想对此进行一些确认,如果不是,那么实际问题是什么。代码如下:

#include <iostream>
// Values are inconsistent when paramin,parammax become large.
// For example, try (parammin,parammax)=(4,400,000)
int main() {
int parammax,parammin;
std::cout << "Input a minimum, then maximum parameter to sum up to" << std::endl;
std::cin >> parammin >> parammax;
int sum=0;
for (int iter = parammin; iter <= parammax; iter++){
sum += iter;
}
std::cout << "The sum is: " << sum << std::endl;
const int analyticalmethod = (parammax*(parammax+1)-parammin*(parammin-1))/2;
std::cout << "The analytical result for the sum is,"
" via (max*(max+1)-min*(min-1))/2: "
<< analyticalmethod << std::endl;
return 0;
}

最佳答案

在 C++ 中不加控制地使用非常大的数字是危险的。基本类型 intlonglong long 是依赖于实现的,只有以下要求:

  • int 至少 16 位大
  • long 至少和 int 一样大并且至少有 32 位大
  • long long 至少和 long 一样大并且至少有 64 位大

如果您认为您可能需要更大的值,您应该考虑像优秀的 gmp 这样的多精度库.

关于c++ - 程序精度因参数而异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54362940/

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