2012-09-10 1 views
1

Je travaillais sur la solution de l'exercice 1.6 du livre SICP quand j'ai vu deux comportements différents quand j'ai exécuté le code en fonction des nombres que j'ai utilisés. Si j'utilise des nombres naturels lorsque j'appelle la procédure sqrt-iter, l'interpréteur ne s'arrête jamais, mais quand je force la division décimale en utilisant des nombres à virgule flottante, l'interpréteur répond: Aborting!: Profondeur de récursivité maximale dépassée.MIT-Scheme: Comportement différent sur boucle infinie en fonction des nombres

Est-ce que quelqu'un sait la raison du comportement différent?

J'ai fait un sens avec ma réponse pour aider toute personne qui veut exécuter le code, il suffit de copier & pâte: http://bit.ly/Qv1wru. La version mit-scheme est 9.1.1.

+0

Vous pouvez nous dire ce que * deux chiffres que vous avez utilisé *. Aussi, pensez à regarder une solution de Bill le lézard http://www.billthelizard.com/2009/10/sicp-exercises-16-18.html –

Répondre

1

Votre procédure good-enough? semble mal, essayez celui-ci:

(define (good-enough? guess x) 
    (< (abs (- (sqr guess) x)) 0.001)) 
+0

Merci Óscar j'ai testé mon code avec votre version de bonne assez? procédure mais le comportement est le même. Je veux dire, le comportement attendu est la boucle infinie, cela fait partie de l'exercice. En fait le bien-assez? procédure n'est jamais appelée. Ma question concerne les différentes réponses que l'interprète vous donne lorsque vous utilisez des nombres rationnels ou lorsque vous forcez la division décimale en utilisant des nombres décimaux. J'ai écrit une note dans mon essentiel pour le signaler. – jolisper