一个求非常高的数的平均值的程序
c++: a program to find the average of very high numbers?
所以我试着做一个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。但我找了又找,并没有找到诀窍。有什么帮助吗?
使用浮点数时必须考虑它们的精度,它由以10为基数的std::numeric_limits<T>::digits10
表示,下面的程序可以给出它们(它们可能取决于您的平台):
#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位浮点数一致。
因为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。
一个uint64_t
(从<cstdint>
)给你必要的构建块,但是你会在溢出的边缘摇摇欲坠:2倍1019太多了。
你现在必须找到一种方法来计算平均值,而不是将两个数字相加。
<引用类>假设两个整数M, N使得M <= N, (M + N)/2 = M + (N - M)/2
引用类>相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 计算数组c++的平均值
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- C++击球平均值程序使用输入/输出文件打印名称,平均值,最高/最低平均值时遇到麻烦
- C 平均程序在循环时不计算n后不计算平均值
- C 程序总和从用户和显示平均值
- 如何将输入C 程序的平均值输入
- 用于计算平均值的C++程序
- 程序不会降低最低分数并在没有它的情况下计算平均值
- 编译三个文件以创建一个用于平均值的程序(取消注释?)
- C++,计算正数和负数并计算数字的平均值)编写一个读取未指定数量的整数的程序
- 编写一个程序,读取所有命令行参数并打印平均值 c++
- 一个求非常高的数的平均值的程序
- 用于查找最小值、最大值、平均值、中值和模式的程序