[SML 7881] Re: 連想計算というリフレクティブな手法
Shin Sahara from Home
shinsahara @ shinsahara.com
2010年 12月 17日 (金) 10:24:29 JST
佐原です。
VDM++だと、高階関数使ってもリフレクション的なことはできそうもないので、数値アルゴリズムで作りました :-)
リフレクション使うより速いので、シンボリック実行しているVDM++インタープリタでも、fastFib(-1)からfastFib(100)まで全部計算しても、一瞬で終わりますが、多倍長計算できないのでfastFib(92)=7540113804746369024までしか計算できません。
fastFib(93)からfastFib(100)までは、fastFib(100)の場合、Error 4065: Value 3.542248481792631E20 is not a nat などと怒られます :-)
class Fibonacci
values
static sqrt5 = new MATH().sqrt(5);
static phi = (1+sqrt5) / 2;
functions
static public fastFib : nat +> nat
fastFib(n) ==
floor (phi ** n / sqrt5 + 0.5);
end Fibonacci
On 2010/12/14, at 17:56, AOKI Atsushi wrote:
> (10/12/14 17:11), Narita Takaoki wrote:
>> 同様にぎやかしですが、それどころか Smalltalk にもなってません。
>
> おぉ!いとにぎやかし。
>
>> 計算量は、O(log(n))なので、数値格納のメモリーさえ確保できれば20
>> 万項目くらいまでなら我慢できる時間で計算可能ですが、計算できたか
>> らって何に使うんでしょうね・・・
>
> 何に使う、何に役立つ、・・・
> そんなんばかりを追っていたら、科学することが伝わらないかしらん。
>
> --- 青木淳@本日も学生たちとペアプログラミング
>
-----------------------------------------------------------------------
Imagine the World Movement!
Shin Sahara
E-Mail: ss @ shinsahara.com http://shinsahara.com
Mobile: +81-80-1114-3378(in the world), +81-80-3089-7518(in the world)
------------------------------------------------------------------------
SML メーリングリストの案内