OVH Cloud OVH Cloud

Calculs du point de vue de la norme

57 réponses
Avatar
jul
Salut,

Je programme une application qui fait un fort usage des calculs avec
des valeurs d=E9cimales (=E0 virgule) avec les types float ou double. Il
ne me semble pas que ces calculs sont pris directement en charge par
le(s) processeur(s). Ma question est donc la suivante : la norme
impose-t-elle l'identit=E9 des r=E9sultats de calculs entre diff=E9rents
compilateurs ? Si oui, au moyen de quel(s) crit=E8re(s) ?

Je pr=E9cise pour bien me faire comprendre. Il facile d'exiger qu'un
compilateur calcule de mani=E8re correcte sur les entiers (1+1 doit
toujours =EAtre =E9gal =E0 2), ce qui est en soi une garantie
(ext=E9rieure) de l'identit=E9 des r=E9sultats. Mais lorsque le calcul a
lieu sur des nombres d=E9cimaux, le r=E9sultat est souvent arrondi. Il
n'y a pas alors de "r=E9sultat juste" (ex. 1/3 n'a pas d'expression
d=E9cimale finie juste, m=EAme si certaines sont meilleures que
d'autres). Comment sait-on que la mani=E8re de calculer et d'arrondir
sera la m=EAme sur chaque compilateur ?

Merci pour vos =E9claircissements.
Jul.

7 réponses

2 3 4 5 6
Avatar
Sylvain
Jean-Marc Bourguet wrote on 21/05/2006 08:48:

A partir du moment où un CPU a une unité de calcul flottant,
ce n'est plus un petit CPU, avec ou sans guillements à
petit. En particulier si on a eu la place pour mettre des
tables de fonctions trigonométriques.


tout à fait "à partir du moment", mais mes petits CPU de travail ne font
que qlq mm2 et donc parler de petits-cpu (sans guillemets) n'évoquait
pas pour moi un "petit" cpu de bureau.

Voir CORDIC comme un développement est original. J'ai
plutôt tendance à le voir comme une réduction d'intervalle
où on fini par n'avoir plus qu'un point dans l'intervalle.


un _point_ dans l'intervalle des irrationnels ?!?...

et suite de Taylor sont les plus courantes, le
developpement par produit d'Euler existe aussi mais il
converge moins bien et est au final trop couteux.


Je ne suis pas un expert en la matière, mais utiliser un
développement de Taylor me semblerait naïf comme approche.


mais il y a plein de naifs dans ce monde: ceux qui compressent les
signaux audio, ceux qui calculent des FFT, ...

Il doit avoir moyen de calculer des polynomes de moindre
degré avec la même erreur maximale en acceptant qu'il y ait
plus de points où l'évaluation donne cette erreur.


je suis pas sur de comprendre: faut-il lire accepter que l'erreur max.
se propose plus souvent ? si c'est le cas, l'algo est soit moins précis
(sa moyenne est plus précise car l'erreur est plus souvent grande), soit
chaotique (si l'écart type de l'erreur est constant avec plus de cas à
grandes erreurs, il a également des cas plus précis qu'un algo
concurrent; en clair des fois très bon, des fois très pas-bon).

je laisse le mot de la fin à Wikipedia qui ne se demande pas si son
Cordic est mieux que son Taylor:


Modern computers use a variety of techniques (Kantabutra, 1996).


One common method, especially on higher-end processors with
floating point units, is to combine a polynomial approximation
(such as a Taylor series or a rational function) with a table
lookup --- they first look up the closest angle in a small table,
and then use the polynomial to compute the correction. On simpler
devices that lack hardware multipliers, there is an algorithm
called CORDIC (as well as related techniques) that is more
efficient, since it uses only shifts and additions.
All of these methods are commonly implemented in hardware
for performance reasons.
<<
http://en.wikipedia.org/wiki/Cosine

Sylvain.


Avatar
kanze
Sylvain wrote:
Jean-Marc Bourguet wrote on 21/05/2006 08:48:

et suite de Taylor sont les plus courantes, le
developpement par produit d'Euler existe aussi mais il
converge moins bien et est au final trop couteux.


Je ne suis pas un expert en la matière, mais utiliser un
développement de Taylor me semblerait naïf comme approche.


mais il y a plein de naifs dans ce monde: ceux qui compressent
les signaux audio, ceux qui calculent des FFT, ...


Et ils écrivent eux-même des fonctions trigonomètrique, plutôt
que d'utiliser celles de la bibliothèque ?

Il doit avoir moyen de calculer des polynomes de moindre
degré avec la même erreur maximale en acceptant qu'il y ait
plus de points où l'évaluation donne cette erreur.


je suis pas sur de comprendre: faut-il lire accepter que
l'erreur max. se propose plus souvent ? si c'est le cas,
l'algo est soit moins précis (sa moyenne est plus précise car
l'erreur est plus souvent grande), soit chaotique (si l'écart
type de l'erreur est constant avec plus de cas à grandes
erreurs, il a également des cas plus précis qu'un algo
concurrent; en clair des fois très bon, des fois très
pas-bon).


Non. C'est que sur un intervale fini, pour une précision donnée,
on peut trouver des polynomes à un dégrée moindre que ce qu'il
faudrait pour la série de Taylor.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
Jean-Marc Bourguet
Sylvain writes:

Jean-Marc Bourguet wrote on 22/05/2006 15:51:
Pour le moment, je n'ai que les x86 et les ia64 qui ont des fonctions
trigonometriques cablees.



oui, et ?! tu fais collec' ? si j'en trouve je te les mets de coté, promis.


Merci.

la question (liée à "comment garantir des résutats identiques") ne
passe-t-elle pas plutôt par des commentaires sur les librairies
mathématiques disponibles sur le marché ?


Depuis quand les fils restent contraints a la question initiale? Nous
avons derive (un peu trop d'ailleurs) sur les implementations hard
suite a ton affirmation que "tous les chips ne contiennent pas les
mêmes tables".

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Jean-Marc Bourguet
Sylvain writes:

Jean-Marc Bourguet wrote on 21/05/2006 08:48:
A partir du moment où un CPU a une unité de calcul flottant,
ce n'est plus un petit CPU, avec ou sans guillements à
petit. En particulier si on a eu la place pour mettre des
tables de fonctions trigonométriques.


tout à fait "à partir du moment", mais mes petits CPU de travail ne
font que qlq mm2 et donc parler de petits-cpu (sans guillemets)
n'évoquait pas pour moi un "petit" cpu de bureau.


Et tes petits CPU ont une implementation hard de sin/cos? C'est quoi?

Voir CORDIC comme un développement est original. J'ai
plutôt tendance à le voir comme une réduction d'intervalle
où on fini par n'avoir plus qu'un point dans l'intervalle.


un _point_ dans l'intervalle des irrationnels ?!?...


Un point representable dans le format choisi.

et suite de Taylor sont les plus courantes, le
developpement par produit d'Euler existe aussi mais il
converge moins bien et est au final trop couteux.
Je ne suis pas un expert en la matière, mais utiliser un

développement de Taylor me semblerait naïf comme approche.


mais il y a plein de naifs dans ce monde: ceux qui compressent les
signaux audio, ceux qui calculent des FFT, ...


Il y a certainement plein de naifs en ce qui concerne le calcul
numerique. Mais une approche telle que une approche polynomiale par
morceau (que j'avais indiquee dans un autre message et qu'indique
aussi l'article de Wikipedia que tu cites) n'est pas naive meme si les
polynomes en question sont des developpements de Taylor tronques -- le
choix des bornes entre les polynomes et du degre de ceux-ci sont
normalement le resultat d'une analyse fine.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org



Avatar
Sylvain
kanze wrote on 23/05/2006 08:37:

Et ils écrivent eux-même des fonctions trigonomètrique, plutôt
que d'utiliser celles de la bibliothèque ?


ahhh, il y aurait la bibliothèque !! que peux-t-on dire de ses portages?
essaye-t-elle d'offrir une précision constante ou est-elle toujours
dépendante du hard et du compilo qui l'utilise ?

Il doit avoir moyen de calculer des polynomes de moindre
degré avec la même erreur maximale en acceptant qu'il y ait
plus de points où l'évaluation donne cette erreur.



Non. C'est que sur un intervale fini, pour une précision donnée,
on peut trouver des polynomes à un dégrée moindre que ce qu'il
faudrait pour la série de Taylor.


ça c'est évidemment - mais je continue à ne pas comprendre la seconde
partie de la phrase.

Sylvain.



Avatar
James Kanze
Sylvain wrote:
kanze wrote on 23/05/2006 08:37:


Et ils écrivent eux-même des fonctions trigonomètrique, plutôt que
d'utiliser celles de la bibliothèque ?



ahhh, il y aurait la bibliothèque !! que peux-t-on dire de ses
portages? essaye-t-elle d'offrir une précision constante ou
est-elle toujours dépendante du hard et du compilo qui
l'utilise ?


Une bonne bibliothèque de ce genre doit bien tenir compte des
caractèristiques des flottants dans l'environement où elle
s'exécute. Les formules qui donnent de bons resultats sur un IBM
ne sont pas forcément les plus adaptés aux formats IEEE.

Il doit avoir moyen de calculer des polynomes de moindre
degré avec la même erreur maximale en acceptant qu'il y ait
plus de points où l'évaluation donne cette erreur.





Non. C'est que sur un intervale fini, pour une précision
donnée, on peut trouver des polynomes à un dégrée moindre que
ce qu'il faudrait pour la série de Taylor.



ça c'est évidemment - mais je continue à ne pas comprendre la
seconde partie de la phrase.


Tu veux dire la phrase de Jean-Marc. Je ne suis pas sûr
moi-même, mais je crois que c'est l'idée qu'on peut trouver un
polynôme à moindre dégrée qui a la même erreur maximum, mais
qu'alors, cette erreur apparaîtrait plus souvent (qu'avec la
serie de Taylor). Mais je ne suis pas sûr.

Ce dont je suis sûr, c'est que la série de Taylor donne un
résultat exact à 0, et que plus on s'éloigne de 0, plus la
résultat est faux. Alors, si on cherche à calculer sur
l'intervale [0..pi/2), par exemple, il me semble naïvement
évident qu'un polynôme du même genre, mais centré sur pi/4 (par
exemple) donnerait un meilleur résultat.

J'ai vu une fois un algorithme pour calculer le polynôme optimal
(de moindre dégrée), donné une equation réputée précise et une
erreur maximum permise. Malheureusement, je l'ai vu il y a
très, très longtemps, et je ne me rappelle plus du tout des
détails. Mais a priori, il permettrait de rétrouver le polynôme
optimal pour une précision donnée. (En revanche, rien ne dit
qu'un polynôme soit la solution optimale.)

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34




Avatar
vladimir
You can add :

CORDIC Bibliography Site :

http://web.archive.org/web/20001017173921/http://devil.ece.utexas.edu/
2 3 4 5 6