Schéma: En utilisant seulement R6RS, comment puis-je déterminer la mantisse et l'exposant d'un nombre flottant
-
30-09-2019 - |
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.
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 endiannessK, ..., 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