我已经阅读了一些已经分解双打并“将它放在一起”的主题,但我试图将它分解成它的基本组件。到目前为止,我已经确定了一点:
breakDouble( double d ){
long L = *(long*) &d;
sign;
long mask = 0x8000000000000000L;
if( (L & mask) == mask ){
sign = 1;
} else {
fps.sign = 0;
}
...
}
但我对如何获得指数和尾数感到很困惑。我没有强迫双倍长,因为只有前导位很重要,所以截断没有发挥作用。但是,对于其他部分,我认为这不会起作用,而且我知道您不能对浮点数执行按位运算符,所以我被卡住了。
想法?
编辑:当然,一旦我发布了这个,我就会发现这个,但我不确定在这种情况下浮动和双打有多么不同。
编辑 2(对不起,我正在工作):我阅读了我在编辑 1 中链接的那篇文章,在我看来,我可以以同样的方式执行他们在我的双重上执行的操作,指数的掩码是:
mask = 0x7FF0000000000000L;
对于尾数:
mask = 0xFFFFFFFFFFFFFL;
这个对吗?