最も0に近い数字を求める、その2

30分プログラム、その600。最も0に近い数字を求める、その2。
id:osiireさんに"doubleの最小値はe-300ぐらいですよ"と言われたので、やりなおしてみる。1と比較しているのが原因だから、"2で割ると0になるような数字"を探せばいいはずだ。
途中で再帰が深すぎると怒られてwhileで書き直したりしたけど、それっぽい値を求めることができました。ちなみに適当なモジュールに定数として定義されている気がしないでもない。

使い方

$ python min.py
4.94065645841e-324

ソースコード

#! /usr/bin/python
# -*- mode:python; coding:utf-8 -*-
#
# mim.py -
#
# Copyright(C) 2009 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2009/06/08 20:41:31
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#

def newton(improve,is_good,x):
    y = improve(x)
    while not is_good(x,y):
        x = y
        y = improve(x)
    return x
#    y = improve(x)
#    if is_good(x,y):
#        return x
#    else:
#        return newton(improve,is_good,y)

print newton(lambda x : x / 2,
             lambda x,y: y == 0.0,
             1.0)