2010-04-18 23 views
1

J'ai une application qui utilise un calcul à virgule fixe 24 bits.Je la transfère à un matériel qui supporte le virgule flottante, donc pour l'optimisation de la vitesse, je dois convertir tous les calculs basés sur des points fixes en calcul basé sur le virgule flottante.Conversion de virgule flottante à partir d'un algorithme à virgule fixe

Pour ce bout de code, il calcule mantisse

for(i=0;i<8207;i++) 
{ 
    // Do n^8/7 calculation and store 
    // it in mantissa and exponent, scaled to 
    // fixed point precision. 

} 

Donc, puisque ce calcul, ne convertit un entier en mantisse et exposant à l'échelle de précision du point fixe (23 bits). Quand j'ai essayé de le convertir en float, en divisant la partie de la mantisse par des bits de précision et en soustrayant la partie de l'exposant par un bit de précision, cela ne fonctionne vraiment pas. S'il vous plaît aider à suggérer une meilleure façon de le faire.

Répondre

2

Il suffit de calculer un facteur de conversion et de le multiplier. Quelle valeur représente 1,0 dans votre système de point fixe? Multipliez par 1,0/cela et vous aurez votre conversion.

Le point fixe désigne généralement un nombre fixe de bits pour la partie entière et un nombre fixe de bits pour la partie fractionnaire. Par votre description, je vais deviner que vous avez 1 bit d'entier et 23 bits de fraction; donc votre représentation de 1.0 est 0x80000. Le facteur de conversion est 1.0/0x80000.

double conversionFactor = 1.0/0x80000; 
floating = fixed * conversionFactor; 
+0

Merci pour la réponse. Pouvez-vous s'il vous plaît élaborer avec un exemple pratique, car cela aidera beaucoup. – Viks

1

Si vos nombres à virgule fixe ont 23 bits de fraction,

f = n * (1.0/0x800000) 
+0

Devrait-il s'appliquer à la fois à la mantisse et à l'exposant. ou seulement sur la mantisse. Que dois-je faire avec la partie exposant. – Viks

+1

Le point fixe n'a aucune partie exponentielle. –