2009-09-15 31 views
0

J'ai utilisé gdb pour parcourir le code assembleur qui implémente la fonction C sin() standard dans la bibliothèque mathématique C standard (-lm -march = pentium3 -mfpmath = 387). Il y a beaucoup de bout et je ne sais pas pourquoi ils n'ont pas simplement souligné l'instruction de l'assembleur fsin. La même chose arrive avec d'autres fonctions mathématiques. Pourquoi n'appellent-ils pas simplement l'instruction FPU correspondante?Implémentation des fonctions math.h dans l'assembleur

+1

Avez-vous compilé avec -O2 ou -O3? – joeforker

+0

Salut, dans mon MacBook J'utilise: gcc -S sin.c -mfpmath = 387 -mdynamic-no-pic gcc -o sin.s -g sin J'ai essayé -O2/-O3 mais plus tard J'ai réalisé que les options d'optimisation ne modifient pas le contenu des bibliothèques système. – Freeman

Répondre

-1

Vous devriez probablement enable intrinsics - l'implémentation intrinsèque de sinf est à peu près sûre d'être inline (à moins, disons, que quelqu'un en prenne une adresse, ou d'autres circonstances inhabituelles).

Sur VS qui revient à la compilation with /Oi.

+0

Il n'y a pas d'intrinsèques pour 'fsin' – hirschhornsalz

2

Parce que le « lot de bout il » est à la fois plus rapide et plus précis que l'instruction x87 fsin. Contrairement à la croyance populaire, les auteurs de bibliothèque savent généralement ce qu'ils font.

+1

+1 un lien pour augmenter votre réponse. Dans le cas où il serait mort, le titre du fil est "x87 FSIN/FCOS médiocre précision", et cela résume assez bien la discussion: http://software.intel.com/en-us/forums/showthread.php? t = 74354 –

+0

Spécialement pour les grands arguments, les résultats 'fsin' sont pour la plupart des nombres aléatoires – hirschhornsalz