最も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)