2

Est-ce possible d'extraire mantisse et exposant d'un flotteur dans les grandes implémentations Scheme R6RS de sorte que:
v = fxb^e
f - mantisse
b - la base
e - exposantSchéma: En utilisant seulement R6RS, comment puis-je déterminer la mantisse d'un nombre flottant et exposant

Par exemple: 3,14 = 0,785 x 2^2

Si ce n'est pas pris en charge, je voudrais avoir accès aux bits de nombre flottant (IEEE 754) directement à l'approche de la problème d'extraire les valeurs ci-dessus, mais je n'ai trouvé aucun fu nction de convertir flonum en une série d'octets (bytevector).

Merci.

+0

D'accord, Racket, poulet, Les fonctions spécifiques d'Ikarus le feront également. Soupir .. –

+0

Je suis choqué que Scheme n'ait pas jugé bon de fournir l'opération 'logb' recommandée par 754 (et requise dans la norme révisée). –

Répondre

3

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

- Procédure: bytevector-ieee double-native-set! BYTEVECTOR K X
- Mode opératoire: bytevector-ieee-double-set! ENTÉGRAGE K X ENDIANNESS

K, ..., K + 7 doivent être des indices valides de BYTEVECTOR.

Pour `BYTEVECTOR-IEEE-DOUBLE NATIVE-SET!, K doit être un multiple de 8.

Ces procédures stocker une représentation IEEE 754 double précision de X en éléments K par K + 7 BYTEVECTOR, et renvoie des valeurs non spécifiées.

Ici, il est utilisé:

 
> (define bv (make-bytevector 8)) 
> (bytevector-ieee-double-native-set! bv 0 1.0) 
> bv 
#vu8(0 0 0 0 0 0 240 63) 

Pour vérifier le résultat, voici un programme C qui accède aux octets directement:

#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
+0

Oh, j'ai probablement été confus par 'set'. Je vous remercie. :] –

Questions connexes