如何转换 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 等直到结束
我写了一个简单的程序,将 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 等直到结束