变量与常量printf结果不同?
int xx = 100;
printf("%d\n", (short)(pow(100, xx / 100.0)));
打印结果为99,然后把xx直接用常量100替入。结果打印结果为100。第一次碰到这种情况。
如果是
int xx = 100;
printf("%f\n", pow(100, xx / 100.0));
打印结果正常,为100.000000
求解。
[解决办法]
内存中浮点数存储100是99.9999999999999
[解决办法]
pow本来就很蛋疼, 都是浮点数参数, 结果是什么, 更是未知.
[解决办法]
这个大概是double到short转换的时候由于精度问题导致的错误(99.99999999转short变成99),而直接写100是常量折叠,是在编译期间直接替换掉了,并且不同编译器结果大概不同,在vs2008下都是100