v = fxb
^e
f - 仮数
b - ベース
e - 指数
例: 3.14 = 0.785 x 2^2
サポートされていない場合は、flonum の (IEEE 754) ビットに直接アクセスして、上記の値を抽出する問題に取り組みたいのですが、flonum を一連のバイト (バイトベクトル) に変換する関数が見つかりませんでした。
ありがとうございました。
v = fxb
^e
f - 仮数
b - ベース
e - 指数
例: 3.14 = 0.785 x 2^2
サポートされていない場合は、flonum の (IEEE 754) ビットに直接アクセスして、上記の値を抽出する問題に取り組みたいのですが、flonum を一連のバイト (バイトベクトル) に変換する関数が見つかりませんでした。
ありがとうございました。
http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-ZH-3.html#node_sec_2.8
-- 手順: bytevector-ieee-double-native-set! BYTEVECTOR KX
-- 手順: bytevector-ieee-double-set! BYTEVECTOR KX エンディアンネスK、...、K+7 は BYTEVECTOR の有効なインデックスでなければなりません。
「BYTEVECTOR-IEEE-DOUBLE-NATIVE-SET!」の場合、K は 8 の倍数でなければなりません。
これらのプロシージャは、X の IEEE 754 倍精度表現を BYTEVECTOR の要素 K から K+7 に格納し、未指定の値を返します。
ここでそれが使用されています:
> (定義 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