2016-02-25 1 views
0

J'utilise la bibliothèque de précision multiple MPFR, et en particulier l'implémentation de here.Comment faire MPFR pour utiliser les types standard?

Existe-t-il un moyen de compiler le code de telle sorte que toutes les opérations soient effectuées en utilisant les types standard (par exemple double)? Par exemple. un indicateur de compilation qui transformerait toutes les "opérations logicielles" en "opérations matérielles" normalement implémentées dans les types standard? En pratique, le code est lent même quand j'utilise 64 bits, j'ai profilé que le coupable est le mpfr/gmp, et je voudrais mesurer combien je gagne en changeant double (sans avoir à re -Ecrire tout le code).

Répondre

1

Cela n'est pas possible dans la bibliothèque MPFR pour plusieurs raisons. D'abord les formats sont différents. En particulier, MPFR a une gamme d'exposants différente, pas de sous-normales, un seul NaN ... De plus, il arrondit correctement en 5 arrondis, alors que les processeurs ont seulement 4 modes d'arrondi, et pour les types natifs, la plupart des opérations ne sont pas correctement arrondies. Vous voudrez peut-être écrire des wrappers, des classes C++ ou quoi que ce soit pour faire ce que vous voulez, mais ce n'est pas forcément intéressant car vous pourriez obtenir beaucoup de conversions entre les deux formats.

EDIT: Si vous ne vous souciez pas du comportement exact, peut-être que ce que vous voulez est quelque chose basé sur des modèles C++. Vous devez probablement regarder une autre interface C++ MPFR telle que MPFRCPP ou mpfr::real class.