求助!!c++发现一个奇怪的问题

 #include <iostream>
 #include <cmath>
 #include <cstdio>
 using namespace std;
 bool isint(double num);
 int main(){
     double a=log(536870912)/log(2);
     printf("%f\n",a);
     cout<<isint(a)<<'\t'<<isint(29.00);
     return 0;
 }
bool isint(double num){
        int tnum=int(num);
        cout<<tnum<<'\t'<<num<<endl;
        if(num-tnum) return false;
        return true;
}

明明log(536870912)/log(2)和29值一样,为什么最后调用isint()的结果不同

把a向0后面输出16位,你就会发现他并不是29.0。

isint((int)29.00)

把a向0后面输出16位,你就会发现他并不是29.0。