Page 1 sur 1

l'algo du bac S

Publié : jeu. juin 21, 2012 7:28 pm
par alb
Un exercice de l'épreuve de ce matin consiste à écrire l'algo pour calculer le terme général de la suite u(n)=1+1/2+...+1/n-ln(n). En Xcas on peut faire:

Code : Tout sélectionner

Terme(n):={
  local res;
  res:=0;
  pour k de 1 jusque n faire
    res:=res+1/k
  fpour
  res:=res-ln(n)
  retourne res
}
Les 10 premiers termes sont donnés par seq(evalf(Terme(n),3),n,1,10)
Le centième terme est evalf(Terme(100),3)
Dans l'énoncé on donne aussi u(1000), u(1500) et u(2000). Qu'à cela ne tienne faisons seq(evalf(Terme(n),3),n,1000,2000,500) et là surprise on obtient [-2147483.649,-2147483.649,-2147483.649] ce qui pour une suite minorée par 0 ne laisse pas d'étonner.
On arrange la chose en faisant seq(evalf(Terme(n),14),n,1000,2000,500) ou seq(round(evalf(Terme(n),14),3),n,1000,2000,500)
Je m'excuse de poser cette question rebattue mais j'aimerais ne pas dire trop de bêtises à la rentrée aux futurs bacheliers. Donc pourquoi cette réponse fausse ?

Re: l'algo du bac S

Publié : ven. juin 22, 2012 9:21 am
par parisse
c'est bizarre, ca ne le fait qu'avec seq, si on tape evalf(Terme(1000)) on obtient undef, ce qui est normal puisque Terme(1000) est une enorme fraction - ln(1000) et evalf ne peut pas la convertir (depassement de capacite flottant). Par contre evalf(fraction)-ln(1000) marche parce que xcas sait evaluer une fraction en precision double.
[Edit] c'est la precision 3 qui pose probleme.