ddot2
C DDOT2 SOURCE PV090527 23/03/03 21:15:03 11616 * * produit scalaire compensé de deux vecteurs * algorithme de Ogita,Rump & Oishi * http://perso.ens-lyon.fr/nicolas.louvet/TheseLouvet07.pdf * implicit real*8 (a-h,o-z) real*8 x(n),y(n) * dans la constante, l'exposant est la moitie du nombre de bits de la mantisse * soit 26 pour le 64 bits IEE * a ajuster eventuellement parameter (c=2.D0**26+1.D0) * if (n.le.0) then return endif * code non compense ** res=0.D0 ** do i=1,n ** res=res+x(i)*y(i) ** enddo ** ddot2=res ** return * * twoprod x(1),y(1) z=c*x(1) xx=z-(z-x(1)) xy=x(1)-xx z=c*y(1) yx=z-(z-y(1)) yy=y(1)-yx * s1=x(1)*y(1) * boucle do i=2,n * twoprod x(i),y(i) z=c*x(i) xx=z-(z-x(i)) xy=x(i)-xx z=c*y(i) yx=z-(z-y(i)) yy=y(i)-yx s2=x(i)*y(i) * twosum s1 s2 xx=s1+s2 z=xx-s1 xy=(s1-(xx-z))+(s2-z) s1=xx enddo end
© Cast3M 2003 - Tous droits réservés.
Mentions légales