2010-09-04 11 views
2

這可以從各大R6RS方案實現的浮動,從而提取尾數和指數:
V = FXB^E
的F - 尾數
b - 基
ë - 指數方案:只使用R6RS,我怎麼確定flonum的尾數和指數

例如:3.14 = 0.785×2^2

如果它不支持,我想訪問flonum的(IEEE 754)位直接接近提取上述值的問題,但我沒有發現fu將flonum轉換爲一系列字節(bytevector)。

謝謝。

+0

好的,球拍,雞, Ikarus的特定功能也會這樣做。唉.. –

+0

我很震驚,Scheme沒有看到適合提供754推薦(並在修訂標準中要求)'logb'操作。 –

回答

3

http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-3.html#node_sec_2.8

- 程序:bytevector-IEEE雙原生設置! BYTEVECTOR K X
- 過程:bytevector-ieee-double-set! BYTEVECTOR K X ENDIANNESS

K,...,K + 7必須是BYTEVECTOR的有效索引。

對於`BYTEVECTOR-IEEE-DOUBLE-NATIVE-SET!」,K必須是8

這些程序存儲X的IEEE 754雙精度表示的倍數爲元素幼兒園到K + 7的BYTEVECTOR,並返回未指定的值。

這在使用中:

 
> (define bv (make-bytevector 8)) 
> (bytevector-ieee-double-native-set! bv 0 1.0) 
> bv 
#vu8(0 0 0 0 0 0 240 63) 

要驗證的結果,在此可以直接訪問字節的C程序:

#include <stdio.h> 

int main(void) 
{ 
    double x = 1.0; 
    unsigned char *p = &x; 

    for (size_t i = 0; i < sizeof(double); i++) 
    printf("%u ", p[i]); 

    puts(""); 

    return 0; 
} 
0 0 0 0 0 0 240 63
+0

哦,可能我被'set'弄糊塗了。謝謝。 :] –

相關問題