c++ - 在处理 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
那永远不会适合 aint
或 a double
。您需要找到一个支持非常大数字的库。GNU 多精度算术库就是这样一个库。
推荐阅读
- laravel - VueJs NON-SPA Laravel 应用:基于视图自动加载组件
- python-3.x - python 3 tkinter:选项菜单不显示窗口
- excel - Workbook.BeforeSave 事件,确定他们保存为什么类型
- c# - 如何通过 System.Text.Json 从文件中加载值并将它们只读存储?
- sql - 如何通过脚本文件在 IDEA 中的 H2 DB 中创建数据库和用户?
- reactjs - 按下按钮时不会渲染组件 React Hooks
- android - 安卓偏好。如何在设置了 SummaryProvider 的情况下强制更新首选项的摘要?
- c++ - 如何在 c++ 项目中包含一个包含所有头文件?
- clojure - 是否有将字符串规范化为有效符号的默认方法?
- java - 当我在更新后选择 * 时,CrudRepository 本机查询给出了旧值