save+save/5与trunc(save*1.2)和round(save*1.2)

在P1096 津津的储蓄计划这道题目中,
因为最后要 多出20%,所以一开始我是这么写的(int)(save*1.2) 不过,WA了。
然后,我便用save+save/5,AC了。
后来,我用 trunc(save*1.2) ,WA了。
再后来,我用round(save*1.2),AC了。

这是我感到很不解的地方,
引用math.h文件中的一段注释:
/* round towards zero, regardless of fpu control word settings /
extern double __cdecl trunc (double);
/
round away from zero, regardless of fpu control word settings */
extern double __cdecl round (double);

所以trunc是朝向0,舍入的。而round是远离0,舍入的。
按道理 (int)trunc(save*1.2) 应该跟 save+save/5相等才对。

我做了一个循环来检验,
for(k=1;k<100000;k++)
if((int)trunc(k*1.2) != (int)trunc(k*1.2)){
printf("%d",k);
return 0;
}
是正确的。
所以我很不解为什么?求大神指点。

0 条评论

目前还没有评论...

信息

ID
1096
难度
5
分类
模拟 点击显示
标签
递交数
15974
已通过
5661
通过率
35%
被复制
35
上传者