2

这是否可以从主要 R6RS 方案实现中的浮点数中提取尾数和指数,以便:
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!字节向量 KX 字节序

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

对于“BYTEVECTOR-IEEE-DOUBLE-NATIVE-SET!”,K 必须是 8 的倍数。

这些过程将 X 的 IEEE 754 双精度表示存储到 BYTEVECTOR 的元素 K 到 K+7 中,并返回未指定的值。

在这里它正在使用中:

> (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
于 2010-09-07T11:19:12.167 回答