c++ - 为什么 cmath pow 给出的答案不准确?
问题描述
在 C++11 中:
pow(1061,6); // = 1426567426713180416
检查最后 3 位数字。我确定结果是错误的,因为 1061^6 = 1426567426713180361。
但是这种另一种方法是正确的:
long a =1;
for(int i=0; i<6 ; i++){ a*=1061; }
cout << a; // = 1426567426713180361
pow 包含在 cmath 中。
如果有人知道,我想知道为什么两个结果不相等。
解决方案
pow
用于double
其输出,其精度约为 16 位十进制数字。但是64 位long
有 19 个。
推荐阅读
- autocomplete - VSCode 中完整的 Markdown 文件路径
- android - 一起启动两个动画
- parsing - 批处理脚本:解析文件并获取特定的行号子字符串
- c - C 编程:字符串数组 - 如何检查相等性?
- c# - Unity 语法错误 按空格键时 LaserSound 不播放?
- shell - sh,读取大量日志文件并 grep 一些文本并打印所有出现的文件名和行号
- java - 如何在 Maybe.create(emitter) 中发出 Maybe.empty?
- python - 如何从数组中选择数据以绘制图形
- javascript - 第二次执行遵循href
- python - 如何比较第一列和第二列