Calculs et arrondis

Tout ce qui concerne le langage Asymptote. Ce langage est supporté sur le forum via les balises asy.

Modérateur : gdm_asy

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
mumblee
Utilisateur confirmé
Utilisateur confirmé
Messages : 32
Inscription : lundi 07 janvier 2008, 20:39
Localisation : Académie de Lille (chez les ch'ti!)

Calculs et arrondis

Message par mumblee »

Bonjour,

Est-ce que c'est normal qu'une rotation d'angle 90° dans asymptote ne donne pas le résultat escompté ? Testez le code suivant svp.

Code : Tout sélectionner

import three;
unitsize(1cm);

triple a=Y;
dot((string) a,(0,0),W);

a=rotate(90,X)*a;
dot((string) a,(1,0),E);
L'image de Y par la rotation d'angle 90° et d'axe X n'est pas Z. :(
Fabrice Eudes

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Calculs et arrondis

Message par GMaths »

Je n'ai pas compris l'intérêt des dots dans ta présentation du problème rencontré : write est pratique. ;-)

Effectivement, je confirme que

Code : Tout sélectionner

import three;
write(rotate(90,X)*(0,1,0));
donne (0,6.12323399573677e-17,1) au lieu de (0,0,1).

On n'est pas très loin... Pour une figure, je t'assure que cela ne se verra pas ! :lol:

Mais, si c'est pour afficher le triplet, il va falloir arrondir.

As-tu posé la question à J.Bowman ?

mumblee
Utilisateur confirmé
Utilisateur confirmé
Messages : 32
Inscription : lundi 07 janvier 2008, 20:39
Localisation : Académie de Lille (chez les ch'ti!)

Re: [Asymptote] Calculs et arrondis

Message par mumblee »

GMaths a écrit :Je n'ai pas compris l'intérêt des dots dans ta présentation du problème rencontré : write est pratique. ;-)
write que je ne connaissais pas, merci !
donne (0,6.12323399573677e-17,1) au lieu de (0,0,1).

On n'est pas très loin... Pour une figure, je t'assure que cela ne se verra pas ! :lol:
Bien sûr, mais comme je testais si le vecteur obtenu était égal au triple "Z", j'ai mis un moment à réaliser qu'il n'y avait pas de bug dans mon code. Dans mon cas, je m'en suis sorti en remplaçant la rotation par un produit vectoriel.
As-tu posé la question à J.Bowman ?
Non, je ne savais pas si c'était un comportement normal ou à considérer comme un (tout relatif) bug.
Fabrice Eudes

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Calculs et arrondis

Message par GMaths »

mumblee a écrit :write que je ne connaissais pas, merci !
Il est bien pratique pour afficher l'état de variables pour déboguer.
mumblee a écrit :Non, je ne savais pas si c'était un comportement normal ou à considérer comme un (tout relatif) bug.
Si le triplet n'était pas si simple, on pourrait penser à un classique problème de précision mais c'est vrai que là...
Il y a peut-être une amélioration à apporter à rotate et peut-être que John B. serait content d'avoir ce retour.

mumblee
Utilisateur confirmé
Utilisateur confirmé
Messages : 32
Inscription : lundi 07 janvier 2008, 20:39
Localisation : Académie de Lille (chez les ch'ti!)

Re: [Asymptote] Calculs et arrondis

Message par mumblee »

GMaths a écrit :Il y a peut-être une amélioration à apporter à rotate et peut-être que John B. serait content d'avoir ce retour.
Ok, j'ai posté sur le forum de sf.net
Fabrice Eudes

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [Asymptote] Calculs et arrondis

Message par OG »

Bonjour

Même si "c'est normal" est un peu rapide, c'est du calcul, il y a de l'approximation
de cosinus dans l'air.
Par exemple
cos(pi/2) retourne 6.12323399573677e-17

O.G.

projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1915
Inscription : samedi 29 décembre 2007, 00:58

Re: [Asymptote] Calculs et arrondis

Message par projetmbc »

Les arrondis sont courants. mumblee renseignes-toi sur les nombres en virgules flottantes.

mumblee
Utilisateur confirmé
Utilisateur confirmé
Messages : 32
Inscription : lundi 07 janvier 2008, 20:39
Localisation : Académie de Lille (chez les ch'ti!)

Re: [Asymptote] Calculs et arrondis

Message par mumblee »

Réponse de JC Bowman :
The problem is with your test; when comparing the results of floating point computations you need to include some fuzz:
Code:
if(abs(a-b) < 10realEpsilon*max(abs(a),abs(b))) write("close");
Vous aviez raison, ce n'est donc pas rotate qui est en cause, mais le fait de faire des calculs en virgule flottante. Comme déjà dit, pour mes besoins, un produit vectoriel à suffit à mon bonheur.
Fabrice Eudes