57Fermer59
PolluxLe 18/05/2008 à 14:33
PpHd (./57) :
Si x est non évaluée et que tu le pases en argument à f puis à g.
Rien n'indique que si f à évaluer x, il n'a pas du le déplacer ailleurs car il ne rentrait pas dans l'espace mémoire initial.
D'où g doit à nouveau évaluer x lorsqu'il calcule.
Sauf si la place originelle de x est marqué comme un lien vers la nouvelle place.
Pollux (./56) :
Je vois pas... (


<------------------------------[1111111111111111111[2222222222222222[333333333------->

Mettons que [ indique les moments où j'ai appelé may_mark
Mettons que x appartienne à 2
Tous les fils de x ne peuvent être que dans 1 ou 2, et pas dans 3.
Parce que sinon, lorsque le GC voudra compacter x, il verra que x appartient à 2, et rendra la main directement en vidant la mémoire :

<------------------------------[1111111111111111111[2222222222222222[------->
Dans ce cas, on aurait des fils de x qui pointent vers une zone mémoire détruite, et qui n'ont pas été compactés.

Oui ok. La fonction d'eval() est de fournir un endroit où stocker le résultat.
Pollux (./56) :
- empêcher que le type top-down de pphdmod() descende à *toutes* les feuilles : on pourrait écrire pphdmod(integer((x+1)/2),2) pour protéger (x+1)/2 de l'évaluation mod 2

Perso, c'est la réponse que j'attend:mod((x+1)/2,2) ->NAN+NAN*x

Ben pour prendre l'exemple d'une interface haut-niveau vers may tu ne peux pas nier qu'on peut avoir envie de stocker l'entier (x+1)/2 dans une variable, puis après d'utiliser cette variable dans un calcul modulo p... Ca veut dire que si x avait une valeure concrète on aurait eu la vraie réponse, mais que s'il reste symbolique pouf ça dégénère en NAN, c'est pas le comportement qu'on veut (une TI qui est incapable d'intégrer une fonction la laisse intacte, elle ne remplace pas par NAN). C'est très courant en arithmétique de devoir faire ce genre de divisions, par exemple l'exposant du symbole de Legendre est (p-1)/2 ; tu peux me répondre que les exposants tu les calcules dans N, mais je te réponds que l'utilisateur peut vouloir les calculer dans phi(p) = p-1, et 2 n'est pas inversible modulo p-1 donc ça te ferait aussi un NAN*p + NAN.
En gros ta méthode consiste à peu de choses près à avoir un gros switch global "tout faire mod p" ou "ne rien faire mod p", mais c'est pas assez fin pour représenter tout ce qu'on veut faire, même si tu traites les exposants comme un cas spécial.
Pollux (./56) :
et suppose que toutes les feuilles sont modulo p.

Ca ne se propage qu'on sein de K[X,..]
mod(x^2,2) reste mod(x^2,2) et mod(f(2),2) reste mod(f(2),2) évidemment.Donc je ne vois pas trop ton problème.

mod(4^(1/2),3) est transformé en mod(1^(1/2),3) = 1, je suppose ? Or évidemment si tu calcules la puissance avant de "simplifier" tu obtiens mod(2,3) = 2.