我写了这段代码,第一次循环结果是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
有人可以解释原因吗?
答案 0 :(得分:0)
来自此链接cplusplus.com
此标头(cmath)中为其他算术类型组合(Type1和Type2)提供了额外的重载:这些重载在计算之前有效地将其参数强制转换为double,除非至少有一个参数的类型为long double(在这种情况下,两者都被转换为long double而不是。)
我敢打赌如果你施展它会在math.h中正确
答案 1 :(得分:0)
答案 2 :(得分:0)
正如人们所评论的那样,它可能与变量类型转换和浮点错误有关。 Pow操作双打,可能有浮点错误。机会是pow返回一个类似99.9999999的值,然后转换为整数。由于整数转换截断而不是舍入,因此得到99。