我寫了一個簡單的程序,將pi加載到8087的寄存器堆棧的頂部,然後將該常量返回到一個短的實內存變量中。如何翻譯8087協處理器返回的短實數的小數部分?
FLDPI ;load pi
FSTP DWORD PTR shortReal ;store pi in memory, then pop stack
存儲在shortReal中的值是40 49 0F DB hex。這轉換爲二進制的0100000001001001111111011011。
第一位是0,所以它是一個正數。偏置指數部分轉換爲1
因此,實際數目如下:
1(隱含點)10010010000111111011011
1(隱含點)1轉換爲3,所以這是正確的PI的整數部分,但是我的理解在這一點之後分解了。
現在下面的號碼遺留:
001可以轉化爲1,這將是正確的。但是,這意味着下一個數字將是001,也就是1,這是錯誤的,或者它可能是0010,即等於2,但這也是錯誤的。
如何分出小數部分的每個數字。
x87的32位浮點格式正好是[IEEE-754](https: //en.wikipedia.org/wiki/IEEE_floating_point)binary32(又名單精度)格式。 [Wikipedia文章](https://en.wikipedia.org/wiki/Single-precision_floating-point_format)有一些手動解碼的例子,就像你正在做的那樣,並且有一個方便的在線轉換器:https:// www.h-schmidt.net/FloatConverter/IEEE754.html –
請注意,在8087 ROM中pi的值稍微不正確,以防萬一您想知道。 – fuz
@FUZxxl:x87具有66位精度的內部pi,用於FSIN等的範圍縮減。 (這不夠準確,請參閱[Bruce Dawson的優秀文章](https://randomascii.wordpress.com/2014/10/09/intel-underestimates-error-bounds-by-1-3-quintillion /),是一系列非常優秀的文章的一部分)。但是,這不應該足夠準確,無法獲得存儲爲64位雙精度浮點數或32位浮點數的pi的正確舍入值嗎?或者它是否爲FLDPI使用了不同的值?或者你只是說它不是一個精確的80位值,它在內部加載 –