J'ai essayé en vain pendant plusieurs jours pour trouver la précision des fonctions mathématiques (en maths) du compilateur GNU GCC. La norme C99 indique que l'exigence de précision des fonctions mathématiques en mathématiques est définie. Je n'ai trouvé aucune mention à ce sujet dans les manuels du compilateur GNU GCC. Est-ce que quelqu'un a une réponse à cela? P>
3 Réponses :
Le math.h code> Les fonctions font partie de la bibliothèque GNU C, pas du compilateur GCC. Leur précision est documentée Ici , dans le cadre du Manuel de la bibliothèque GNU C . p>
Merci d'avoir répondu; Je suppose que les '-, dans la table (1er lien) signifie inconnu / non testé, suis-je correct?
@ user1200373 - Oui, je suppose que le "-" signifie inconnu ou non testé, mais je ne suis pas positif.
Notez que cela ne s'applique que si vous utilisez GCC code> avec la bibliothèque GNU C, qui est loin de la seule option. Par exemple, si vous utilisez
gcc code> sur FreeBSD, vous êtes plutôt à l'aide de la bibliothèque FreeBSD C; Si vous utilisez le
GCC code> dans MINGW, vous utilisez la bibliothèque Microsoft C, etc.
Les ', dans le tableau signifie que ces fonctions sont exactes à une demi-ULP.
@Davidhammen: Cela ne semble pas être documenté nulle part; Il serait plus raisonnable de deviner que - code> signifie que la plus grande erreur testée est inférieure à une ULP (qui est une réclamation inférieure I> que de dire que l'erreur est dans une demi-ULP) .
Méfiez-vous: GCC peut pas i> appeler la fonction GLIBC si elle le pense peut faire le travail plus efficacement en ligne. Cela fera généralement cela lorsque la CPU a une instruction (ou des instructions) spécifiques pour effectuer l'opération. Dans ce cas, la précision dépendra de la mise en œuvre du processeur. De plus, si l'expression est constante, elle peut l'évaluer à la compilation, pas de temps d'exécution, auquel cas il dépendra de l'environnement de compilation, ce qui pourrait ne pas correspondre à l'endroit où elle fonctionne. GCC garantit généralement que la précision est assez bonne. Il y a une option -ffast-math code> pour activer "raccourcis" qui réduisent la précision.
La seule chose sûre à assumer est que les caractères '-' dans le tableau de précision des mathématiques Glibc: P>
moyenne "non testée", étant donné l'absence de documentation officielle suggérant autrement. P>
C'est une table des erreurs . I> '-' signifie donc aucune erreur; Une valeur signifie une erreur de cette ampleur. Il n'est pas raisonnable d'assumer que des fonctions telles que ciel () code>,
exp (), code>
fmod () code>, etc., ne sont pas testés .
Ensuite, '0' (zéro) serait sûrement plus approprié que la trompeuse '-', peut-être.
Les erreurs sont en effet répertoriées ici a>, mais imho l'hypothèse qui "-" signifie "correctement arrondi" (c'est-à-dire 1/2 ulp em>) est presque certainement réfutée par la déclaration en haut de la page p>
[t] HE GNU C Bibliothèque ne vise pas les résultats arrondis correctement arrondis pour
fonctions dans la bibliothèque de maths ... à la place, les objectifs de précision de
Les fonctions sans résultats entièrement spécifiés sont les suivantes: quelques
Les fonctions ont des bugs signifiant qu'ils ne répondent pas à ces objectifs dans tous les cas.
À l'avenir, la bibliothèque GNU C peut fournir une autre arrondie correctement
fonctionne sous les noms tels que CRSIN proposé pour une extension à
Iso c. P>
blockQuote>
Après avoir recherché le code source un peu, j'ai trouvé ce qui semble être Les résultats d'un test ULP (pour x86-64). On dirait que, pour le mode d'arrondi par défaut (rond à la plus proche, les liens passent même), ils testent uniquement explicitement Il y a une certaine étrangeté, cependant. P>
double code> lorsque le ulp em> de
double Code> (80 bits IEEE) est pire que
float code>. L'hypothèse implicite semble être que
double code> ne peut pas em> être pire que
LONG DOUBLE code>. Pour les modes d'arrondi dirigés, ils semblent toujours tester les deux
float code> et
double code> explicitement. P>
exp code>. li>
cos code> et
tan code>, ils testent uniquement réel / complexe
double double code>. li>.
ul>
Y a-t-il un ensemble particulier de fonctions qui vous intéressent? Je suppose que la liste des fonctions en maths.h est assez longue.
J'ai commencé cette recherche à la recherche de pow () i> et exp () i>