自然対数の底eの計算
30分プログラム、その632。自然対数の底eを計算してみよう。
wikipedia:ネイピア数曰く、にx=1を代入することで計算できるらしい。
sumの計算をどうするかがポイントだろうけど、とりあえずutil.streamを使って計算してみた。
使い方
;; 第100項までを使って計算する gosh> (exp 1 100) 2.7182818284590455
ソースコード
#! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- ;; ;; e.scm - ;; ;; Copyright(C) 2009 by mzp ;; Author: MIZUNO Hiroki / mzpppp at gmail dot com ;; http://howdyworld.org ;; ;; Timestamp: 2009/08/02 21:10:57 ;; ;; This program is free software; you can redistribute it and/or ;; modify it under MIT Lincence. ;; (use util.stream) (define (fact n) (if (= n 0) 1 (* n (fact (- n 1))))) (define (facts n prev) (stream-cons prev (facts (+ n 1) (* (if (= n 0) 1 n) prev)))) (define (pows x prev) (stream-cons prev (pows x (* x prev)))) (define facts-stream (facts 1 1)) (define (pows-stream x) (pows x 1)) (define (exp x n) (fold + 0 (stream->list (stream-take (stream-map /. (pows-stream x) facts-stream) n))))