代码之家  ›  专栏  ›  技术社区  ›  YasirA

方案:仅使用R6RS,如何确定flonum的尾数和指数

  •  2
  • YasirA  · 技术社区  · 14 年前

    在主要的R6RS方案实现中,是否可以从浮点中提取尾数和指数,以便:
    v=f x b^e
    f-尾数

    e-指数

    如果不支持,我想直接访问flonum的(ieee754)位来解决提取上述值的问题,但是我没有找到将flonum转换成一系列字节(字节向量)的函数。

    非常感谢。

    1 回复  |  直到 12 年前
        1
  •  3
  •   Nietzche-jou    14 年前

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

    --程序:字节向量ieee双本机集!字节向量K X

    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