c++ - 在 C++ 中打印 pow() 函数的精确值
问题描述
int n;
cin>>n;
unsigned long long int a,s;
cin>>a;
s=(2*pow(10,n)+a);
但是当我给出大n
的赞17
或者18
我的输出s
没有按预期出现时。查看图像以获取输出,例如:何时n=17
,a=67576676767676788
那么s=267576676767676800
理想情况下应该是 2*10^17 + 67576676767676788
解决方案
首先,您必须了解正在发生的事情。
- 为了能够使用std::pow编译器进行静默转换,将整数类型转换为
double
并且返回值也是 adouble
。 - 注意
double
有 16 位有效数字(十进制表示) - 当您执行 to 的赋值转换时
double
,long long int
会静默执行 unsigned long long int
如果此类型有 64 位,则 10 的最大幂为 19
现在,如果您超出此限制,则应使用外部库。gmp
很不错。
unsigned long long int
如果可以接受仅实现您自己的幂函数的范围的限制。
推荐阅读
- ios - Facebook 的 debug_token 响应不成功
- regex - 在postgres 11中将子字符串与字母数字字符(忽略其他子字符串)匹配
- netlogo - 试图欺骗 NetLogo 执行作为参数传递的函数
- amazon-s3 - 我可以向充当 S3 代理的 AWS API Gateway RestAPI 的请求中发送的最大有效负载大小是多少?
- javascript - 如何使用 jest 返回的 promise 来测试函数?
- rspec - Rspec 共享示例:辅助方法中的访问参数
- python - Cannon Sprites 滞后游戏而不是向玩家旋转
- node.js - 多个验证错误 Aws SDK
- reactjs - React Build Locally 与 Build from CI/CD 不同
- android - javax.net.ssl.SSLHandshakeException:SSL 握手中止:ssl=0x7a83ccb988:系统调用期间的 I/O 错误,对等方重置连接