Странный результат при вычислении числа пи в Chicken Scheme

Информация о версии: Версия 4.9.0.1 (стабильность/4.9.0) (rev 8b3189b) macosx-unix-clang-x86-64

Код на самом деле для упражнения 1.3.1 в SICP:

(define (product term a next b)
    (define (iter a result)
        (if (> a b)
            result
            (iter (next a) (* (term a) result))
        )
    )
    (iter a 1)
)

(define (get-pi n)
    (define (next x) (+ x 2))
    (define (term x) (* x x))
    (* 8 n (/ (product term 4 next n) (product term 3 next (+ n 1))))
)

Выход:

#;102> (get-pi 165) 
3.13208714360219
#;103> (get-pi 167)
3.13220081034665
#;104> (get-pi 169)
3.13231179078142
#;105> (get-pi 170)
0.0

Почему результат стал 0.0?

Благодарю вас!


person Zhen Zhang    schedule 29.10.2014    source источник


Ответы (1)


Курица не реализует полную числовую башню по умолчанию. Вам нужно (use numbers).

У меня не установлен Chicken, но вам, возможно, придется использовать (exact->inexact (get-pi 170)), чтобы получить те же результаты, что и раньше.

person uselpa    schedule 29.10.2014