2017-06-14 4 views
1

J'ai cherché beaucoup d'autres questions dans StackOverflow, mais aucune d'entre elles n'a vraiment résolu mon problème.Opérations de virgule flottante dans le module noyau Linux (à nouveau)

Je vous écris un module du noyau linux et je dois calculer une valeur de pourcentage en plongeant un nombre entier par un autre nombre entier afin d'obtenir une valeur flottante comprise entre 0 et 100:

int v1 = 5; 
int v2 = 25; 
float perc = v1/v2; 

Pour tous les raisons que nous savons déjà, quand j'essaye de le compiler je reçois le "retour de registre SSE avec SSE désactivé" erreur.

Existe-t-il une solution de contournement pour calculer une telle division dans un module noyau Linux?

Merci beaucoup. Antonio

Répondre

6

Vous pouvez simplement utiliser l'arithmétique entière, par ex.

int perc = 100 * v1/v2; 

Cela donnera un pourcentage entier. Si vous avez besoin d'une résolution supérieure à 1%, utilisez un facteur d'échelle supérieur à 100 et insérez un point décimal à des fins d'affichage si nécessaire.

+1

Ça marche, merci! –

+2

+1 La bonne façon de faire des virgules flottantes dans le noyau est de ne pas le faire. OP: Y at-il une raison pour laquelle vous devez faire cela en virgule flottante? – tangrs

+0

FOP n'est pas un must, la solution de contournement fourni @Paul a résolu le problème. –