本帖最后由 extlpf 于 2012-10-28 16:31 编辑 承诺再出一个题的,哈哈。以后没事就上来出个小题难为一下同学们,嘿嘿~ 不过这次的题比较二,涉及一个很拐弯抹角的知识点,有兴趣就回复一下啦~~ 还是读程序,写结果,并解释原因(标准C)。 [C] 纯文本查看 复制代码 #include <stdio.h> union number { int i; float f; } n1, n2, n3, n4; int main(int argc, char* argv[]) { n1.i = n2.i = 0xffff0000; n3.i = n4.i = 0x0000ffff; if(n1.f == n2.f) printf("USTC"); if(n3.f == n4.f) printf("SSE"); return 0; } |
[技术| 编程·课件·Linux] 再出一题目,想想看到底是USTC还是SSE?
extlpf
· 发布于 2012-10-28 16:32
· 2202 次阅读
转载文章时务必注明原作者及原始链接,并注明「发表于 软院网 RuanYuan.Net 」,并不得对作品进行修改。
本帖最后由 390125133 于 2012-10-28 19:32 编辑 结果SSE,首先Union内存空间共享,n1.f、n2.f存放的就是ffff0000,按IEEE 754标准,阶码为FF,数符为1,尾数非0,存放的数是错误的数,错误的数比较结果都是FALSE,n3.f、n4.f存放的就是0000ffff,阶码为00,再减去偏移7F,是个非常小的正数,几乎为0,printf出来确实为0,<float.h>中 #define FLT_EPSILON 1.192092896e-07F 比较时两数的误差在此范围内,认为相等,n3.f、n4.f是相等的,如果百度都出这种题,我看我还是不要当炮灰了,回答学长一个问题,都老伤神了,也难怪前几天面试百度的学长全军覆没了 |