gpt4 book ai didi

c++:一个程序来找到非常高的数字的平均值?

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

所以我试图制作一个 c++ 程序,可以找到非常大的数字的平均值(范围是 <10^19)

这是我的尝试:

#include <iostream>
int main()
{

long double a,b,result;
std::cin>>a;
std::cin>>b;
result=(a+b)/2;
std::cout<<result<<"\n";
}

但不知何故,我没有得到预期的结果。我的老师说有一个“技巧”,甚至不需要使用 double。但我搜索和研究并没有找到诀窍。有什么帮助吗?

最佳答案

当使用 float 时,您必须考虑它们的精度,它由std::numeric_limits<T>::digits10 表示以 10 为基数,下面的程序可以给出它们(它们可能取决于您的平台):

#include <iostream>
#include <limits>

int main() {
std::cout << "float: " << std::numeric_limits<float>::digits10 << "\n";
std::cout << "double: " << std::numeric_limits<double>::digits10 << "\n";
std::cout << "long double: " << std::numeric_limits<long double>::digits10 << "\n";
return 0;
}

关于 ideone我得到:

float: 6
double: 15
long double: 18

与32位、64位和80位 float (分别)一致。

由于 1019 超过 18 位数字(它有 20 位),您选择的类型缺乏必要的精度来表示它下面的所有数字,并且没有多少计算可以恢复丢失的数据。


让我们切换回积分,虽然它们的范围更有限,但对于相同的位数,它们具有更高的精度。一个 64 位有符号整数的最大值为 9,223,372,036,854,775,807,无符号版本最大为 18,446,744,073,709,551,615。作为比较,1019 是 10,000,000,000,000,000,000。

A uint64_t (来自 <cstdint> )为您提供必要的构建 block ,但您将在溢出的边缘摇摇欲坠:2 乘以 1019 太多了。

您现在必须找到一种方法来计算平均值,而无需将两个数字相加。

假设两个整数 M, N 使得 M <= N, (M + N)/2 = M + (N - M)/2

关于c++:一个程序来找到非常高的数字的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33200323/

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