我最近遇到了一个问题,我没有得到我期望的数字结果。我跟踪它到由下面的例子示出的问题:为什么两个浮点乘法给出的答案不同于一个?
#include <stdio.h>
int main()
{
double sample = .5;
int a = (int)(sample * (1 << 31));
int b = (int)(sample * (1 << 23) * (1 << 8));
printf("a = %#08x, b = %#08x\n", a, b);
}
// Output is: a = 0xc0000000, b = 0x40000000
为什么是由(1 < < 31)大于由(1 < < 23)*相乘的结果不同相乘的结果( 1 < < 8)?我预计这两个人会给出相同的答案,但他们不会。
我应该注意到我所有的浮点值都在[-1,1)范围内。
你的代码和问题是不同的。 – leppie 2010-09-05 04:42:40
谢谢,我编辑了问题以匹配代码。 – sbooth 2010-09-05 04:58:04