在与C 双打中存储的大整数时,如何避免舍入/精确错误
How to avoid rounding/precision errors when dealing with big integers stored in doubles in C++?
问题
我正在尝试解决以下内容:
2^15 = 32768,其数字的总和为3 2 7 6 8 = 26。
数字2^1000的数字之和是多少?
来源
由于精确错误,我不断获得错误的输出。但是,正如您在下面看到的那样,我试图确保没有任何圆形或因精确度而丢失。我写的代码落在所需的输出(1366)的情况下,两(1364)。如何优化我的代码,以免因精确和四舍五入错误而失去其他任何内容?
我的代码
#include <iostream>
#include <tgmath.h>
#include <string>
using namespace std;
int main() {
int sum=0;
double N = pow(2.0, 1000.0);
string num = to_string(N);
for(int i=0; i<num.size(); i++) {
sum += num[i] - '0';
}
cout<<sum;
return 0;
}
根据wolframalpha, 2^1000
的结果是
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
永远不会适合int
或double
。您需要找到一个支持大量数字的库。GNU多重精度算术库是一个这样的库。
相关文章:
- C++将浮点指针值舍入为小数位数
- Boost::posix_time::ptime舍入到给定的分钟数
- 浮点定向舍入和优化
- 为什么输出精度没有正确舍入?
- 使用设置精度时如何阻止数字向上舍入?
- 如何在使用 MPFR 时在提升多精度中设置舍入模式
- OpenCV 细分一致的 Rect2f 到 Rect2i 舍入
- C++ 中的舍入函数
- 舍入 QDecDouble 值,精度最多为两个字符
- 将大 int 转换为浮点数,而不舍入 c++
- 舍入错误检测
- 根据浮点符号对浮点进行舍入的最简单方法是什么
- 将整数舍入到另一个整数的最接近的倍数
- Sizeof 舍入到对齐方式,但编译器仍将对象放在剩余的字节中
- 避免将 Int 转换为双重类型转换舍入
- 浮点数学运算后舍入不一致
- 浮动到绳子而无需舍入
- 在与C 双打中存储的大整数时,如何避免舍入/精确错误
- 插入双弦流时避免舍入
- c++ linux x86_64中如何控制双精度计算以避免舍入误差