首页 > 解决方案 > 为什么 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 中。

如果有人知道,我想知道为什么两个结果不相等。

标签: c++c++11cmath

解决方案


pow用于double 其输出,其精度约为 16 位十进制数字。但是64 位long有 19 个。


推荐阅读