Schéma: En utilisant seulement R6RS, comment puis-je déterminer la mantisse et l'exposant d'un nombre flottant

StackOverflow https://stackoverflow.com/questions/3642274

Question

Est-ce possible d'extraire mantisse et exposant d'un flotteur dans les grandes implémentations Scheme R6RS afin que:
v = f x b ^ e
f - mantisse
b -
de base e - 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 à aborder le problème de l'extraction des valeurs ci-dessus, mais je l'ai trouvé aucune fonction pour convertir nombre flottant à une série d'octets (bytevector ).

Merci.

Était-ce utile?

La solution

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

  

- Procédure: bytevector-ieee double-native-set! BYTEVECTOR K X
  - Procédure: bytevector-ieee double-set! BYTEVECTOR K X endianness

     

K, ..., K + 7 doit ê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 double précision IEEE 754 de X dans des éléments K à K + 7 de BYTEVECTOR, et renvoient 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 donne accès directement les octets:

#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 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top