L'opérateur ternaire peut se remplacer par (en version longue ...) :
if (sr!=0) {
res = 0x80000000;
} else {
res = 0;
}
Sinon pour le résultat étrange ... je vois au moins 2 choses :
si les mantisses sont alignés à droite, le réalignement après l'addition devrais être quelque chose comme "while(buf>0x0EFFFFFF)" (il faut que la mantisse résultante soit dans les 23Bits de poid faibles).
Ensuite ces 23bits doivent être recopier dans les 23bits de poids faible du flottant, pour ça une ligne comme :
res=res|(mantisseRes&0x0EFFFFFF);
parais plus adapté.
Enfin ce code ne gère pas les soustractions, donc dans le meilleur des cas tu obtiendra 5.5 (voir -5.5 si tu inverse a et b) :-).
[^] # Re: Une implémentation
Posté par Arnaud Taffanel . En réponse au message Addition de flottants. Évalué à 1.
if (sr!=0) {
res = 0x80000000;
} else {
res = 0;
}
Sinon pour le résultat étrange ... je vois au moins 2 choses :
si les mantisses sont alignés à droite, le réalignement après l'addition devrais être quelque chose comme "while(buf>0x0EFFFFFF)" (il faut que la mantisse résultante soit dans les 23Bits de poid faibles).
Ensuite ces 23bits doivent être recopier dans les 23bits de poids faible du flottant, pour ça une ligne comme :
res=res|(mantisseRes&0x0EFFFFFF);
parais plus adapté.
Enfin ce code ne gère pas les soustractions, donc dans le meilleur des cas tu obtiendra 5.5 (voir -5.5 si tu inverse a et b) :-).