Le processeur ARM Cortex-M4F a une instruction qui charge une constante immédiate dans un registre en virgule flottante, comme dans:Algorithme pour ARM acceptable Cortex-M4F instantané à virgule flottante?
VMOV S0,+6.75
Cependant, la valeur de l'est limité constante et doit être égal à une valeur qui peut être exprimé par +/- mx 2 -n, où m est un nombre entier compris entre 16 et 31 et n est un nombre entier dans l'intervalle 0-7. Par exemple, l'instruction ci-dessus fonctionne parce que vous pouvez obtenir 6,75 avec m = 27 et n = 2. Je voudrais vraiment trouver un algorithme qui détermine si un nombre réel particulier peut être représenté de cette façon, et si oui, donne les valeurs correspondantes de m et n.
Des idées brillantes?
Dan
FWIW, je ne sais pas la réponse, mais je _can_ déduire qu'il doit exister une façon simple, parce que c'est précisément ce que les assembleurs doivent faire quand ils encodent une telle instruction en premier lieu.Pour sauver un peu de problème, [voici un assembleur] (https://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=gas/config/tc-arm.c;h= 061aaa8222d03f6e52953ae3fdcd1e047d7bbee3; hb = HEAD # l4995) - quel que soit le vaudou qui semble impliquer d'avoir le nombre comme un flotteur régulier IEEE754 pour commencer, ce qui signifie que vous devrez commencer par comprendre s'il peut être représenté comme l'un de ceux-là. – Notlikethat
Si vous avez la bibliothèque mathématique C disponible, frexp pourrait être un moyen de commencer – dmuir