2

v = fxb
^e
f - 仮数
b - ベース
e - 指数

例: 3.14 = 0.785 x 2^2

サポートされていない場合は、flonum の (IEEE 754) ビットに直接アクセスして、上記の値を抽出する問題に取り組みたいのですが、flonum を一連のバイト (バイトベクトル) に変換する関数が見つかりませんでした。

ありがとうございました。

4

1 に答える 1

3

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
于 2010-09-07T11:19:12.167 に答える