这是否可以从主要 R6RS 方案实现中的浮点数中提取尾数和指数,以便:
v = fxb^e
f - 尾数
b - 基数
e - 指数
例如:3.14 = 0.785 x 2^2
如果不支持,我想直接访问 flonum 的(IEEE 754)位来解决提取上述值的问题,但我没有发现将 flonum 转换为一系列字节(字节向量)的函数。
谢谢你。
这是否可以从主要 R6RS 方案实现中的浮点数中提取尾数和指数,以便:
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!字节向量 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