首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

变量与恒量printf结果不同

2012-12-31 
变量与常量printf结果不同?int xx 100printf(%d\n, (short)(pow(100, xx / 100.0)))打印结果为99,然

变量与常量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

热点排行