如何转换 8087 协处理器返回的短实数的小数部分?

How do you translate the fractional part of a short real number as returned by the 8087 co-processor?

我写了一个简单的程序,将 pi 加载到 8087 寄存器堆栈的顶部,然后 returns 那个常量到一个短实内存变量中。

FLDPI                     ;load pi
FSTP DWORD PTR shortReal  ;store pi in memory, then pop stack

shortReal 中存储的值是 40 49 0F DB 十六进制。这转化为二进制形式的 0100000001001001111111011011。

第一位是0,所以是正数。有偏差的指数部分转换为 1.

因此,实际数字如下所示:

1(隐含点数)10010010000111111011011

1(隐含点)1 转换为 3. ,所以这是 PI 的正确整数部分,但我的理解在这一点之后崩溃了。

现在还剩以下号码:

0010010000111111011011

001 可以转换为 1,这是正确的。然而,这意味着下一个数字将是 001,它又是 1,这是错误的,或者它可能是 0010,等于 2,但这也是错误的。

你如何区分小数部分的每个数字。

不,这不是您的计算方式... 当您从小数点向右移动时。精度提高。

使用这个公式计算 考虑 n 值减少,如 -1 -2 -3 ...

现在 十进制值 = 0*2^-1 + 0*2^-2 + 1*2^-3 + 0*2^-4 + 0*2^-5 + 1*2^-6 等直到结束