exp(pi * sqrt(n))が整数に近くなるnを探す(失敗)

30分プログラム、その138。http://ja.doukaku.org/60/をやってみる。

浮動小数点の誤差のために、うまくいかなかった。世の中には、任意精度の浮動小数点ライブラリが存在するらしいですよ。

使い方

gosh> (main)
(0 37 58 117 128 129 130 131 132 133 134 135 136 137 138 139 
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 
.........................)

ソースコード

#! /opt/local/bin/gosh
;; -*- mode:scheme; coding:utf-8 -*-
;;
;; find_int.scm -
;;
;; Copyright(C) 2007 by mzp
;; Author: MIZUNO Hiroki <hiroki1124@gmail.com> 
;; http://mzp.sakura.ne.jp/
;;
;; Timestamp: 2007/09/21 21:58:55
;;
;; This program is free software; you can redistribute it and/or
;; modify it under the same terms as Scheme itself.
;;

(use srfi-1)
(use math.const)

(define (f n)
  (exp (* pi (sqrt n))))

(define (near? n)
  (< (abs (- n (round n)))
     0.0001))

(define (find-near-int nums)
  (map cadr
       (filter 
	(lambda (x) (near? (car x)))
	(zip (map f nums)
	     nums))))

(define (main)
  (find-near-int (iota 200)))