Why a+=b*pow(10,c-i-1) == 99 c++?

Why a+=b*pow(10,c-i-1) == 99 c++?

本文关键字:c-i-1 c++ pow Why      更新时间:2023-10-16

我写了这段代码,第一次循环结果是99。为什么结果是99,而不是100?

#include <iostream>
#include<math.h>
using namespace std;
int main ()
{
  int skt = 0;
  int sk[3];
int nsk = 3;
sk[0]=1;
sk[1]=2;
sk[2]=8;
for (int i=0; i<nsk; i++)
{
    skt = skt + (sk[i]*pow(10.0,nsk-i-1));
    cout <<" "<<skt<<endl;
}
}

这段代码的结果

   99
   119
   127

,但如果我使用库cmath,它是正确的答案

#include <iostream>
#include<cmath>
using namespace std;
int main ()
{
  int skt = 0;
  int sk[3];
int nsk = 3;
sk[0]=1;
sk[1]=2;
sk[2]=8;
for (int i=0; i<nsk; i++)
{
    skt = skt + (sk[i]*pow(10.0,nsk-i-1));
    cout <<" "<<skt<<endl;
}
}

这段代码的结果

    100
    120
    128

有人能解释为什么吗?

power的math.h和cmath版本略有不同。基本上,cmath版本有更多支持的输入。你可以在这些链接中比较两者。

math.h and

正如人们所评论的那样,这可能与变量类型转换和浮点错误有关。Pow操作的是双精度体,可能有浮点错误。pow很可能返回一个像99.9999999这样的值,然后将其转换为整数。因为整数转换是截断而不是四舍五入,所以得到99。

from this link cplusplus.com

在这个头文件(cmath)中为其他算术类型的组合(Type1和Type2)提供了额外的重载:这些重载在计算之前有效地将其参数强制转换为double类型,除非至少有一个参数是long double类型(在这种情况下,两个参数都强制转换为long double类型)。

相关文章:
  • 没有找到相关文章