Why a+=b*pow(10,c-i-1) == 99 c++?
Why a+=b*pow(10,c-i-1) == 99 c++?
我写了这段代码,第一次循环结果是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类型)。
相关文章:
- 没有找到相关文章