Je pratiquais Régime en Guile 1.8.8
interprète sur OS X. j'ai remarqué quelque chose d'intéressant.
Voici expt
fonction de ce qui est fait de l'exponentiation expt(b,n) = b^n
:
(define (square x) (* x x))
(define (even? x) (= (remainder x 2) 0))
(define (expt b n)
(cond ((= n 0) 1)
((even? n) (square (expt b (/ n 2))))
(else (* b (expt b (- n 1))))
))
Si je l'ai essayer avec certaines entrées
> (expt 2 10)
1024
> (expt 2 63)
9223372036854775808
Voici la partie étrange:
> (expt 2 64)
0
Plus étrangement, jusqu' n=488
il reste à 0
:
> (expt 2 487)
0
> (expt 2 488)
79916762888089401123.....
> (expt 2 1000)
1071508607186267320948425049060....
> (expt 2 10000)
0
Quand j'ai essayer ce code avec repl.il interprète en ligne, il fonctionne comme prévu. Donc, ce que l'enfer est le problème avec Guile?
(Remarque: Sur certains dialectes, remainder
fonction est appelée en tant que mod
.)