関数プログラム言語で不動点の勉強をする良い方法を教えて下さい。
②再帰、ポインタ、不動点理論以外で、コンピューターサイエンスの基礎として、分野に関わらず、勉強しておいた方が良いことはありますか?
宜しくお願いします。
1.理解を深めるのであれば、16進数や2進数の小数を意識することが大事だと思います。
http://www-06.ibm.com/jp/developerworks/java/030314/j_j-jtp0114....
こちらのページに、
0で初期化した倍精度浮動小数点変数に、0.1を26回足すと、結果は2.6ではなく 2.600000000000001 であるという話しがあります。
これも、0.1は16進数では、0.19999999... です。2進では0.0001100110011001.... です。つまり、1.10011001100...1100 x 2^-4 となります。2進小数を理解し、有効桁数を理解すると、飲み込みやすいと思います。
手前味噌になりますが、こちらに16進小数の扱える電卓がありますので、よければ使ってください。
http://www.vector.co.jp/soft/win95/personal/se357013.html
2.充分だと思います。優秀な人でも、再帰呼び出し、ポインタ、浮動小数点を完璧に理解するだけで3年ぐらいはかかる気がします。これらを基礎と呼ぶならば、あえてもう1つ上げるならオブジェクト指向を勉強してはいかがでしょうか。
不動点て浮動小数点の間違いなんですか?きっとA=F(A)となるようなAのことだと思うんですが。演繹データベースだと「兄弟や親子」という関係に対する不動「点」は「家族」(例が異端‥)
関数型言語で勉強というリクエストにはきちんとは答えられそうにないのですが、とりあえず固有値・固有ベクトル(aA=F(A))に強いといいのかもしれません。Aの次元が大きい場合も小さい場合も、なにかといろいろあるようです。
実際の問題には、最短経路関係の利用頻度が高いと感じてます。かなりいろんな問題の解法がここに帰着する感じで。あと欲を言えば最○クリークとかマッチングとかも、ざっと知ってるだけで問題の見通しの良さが違ってくると思います。
このサイトで言及されている不動点をイメージしていたのですが、浮動小数点のことなのでしょうか?
http://local.joelonsoftware.com/mediawiki/index.php/Java%E3%82%B...
専門的なご意見をどうもありがとうございます。
参考にさせて頂きます。
①
C言語で↓のような共用体を使って、
union {
float f;
unsigned char c[4];
} u;
fの値をビットごとに調べてみたらどうでしょうか?。
②
チューリングマシンについて。
まだ勉強不足な部分がありますが、
頂いた情報をもとに、調査、勉強してみようと思います。
貴重な情報をどうもありがとうございます。
将来何をしようとするかで全然違います。
私は学生時代を含めて不動点は使ったことはありませんね。LISPコンパイラを日本で初めて開発した中西正和先生の授業も受講しましたが。
微積分方程式はやることはやりましたが、コンピュータサイエンスは微積分方程式に直接値を入れていくような強引な手法を使いますので、やったところで意味を持ちません。
私の学生時代の研究テーマは高校でマルコフ連鎖、大学で数値流体工学です。
> 将来何をしようとするかで全然違います。
おっしゃる通りですね。。
上記の回答にも記載しましたが、下記サイトを見て、コンピューターサイエンスの基礎として、不動点を勉強しておいた方が良いのかと思いました。
http://local.joelonsoftware.com/mediawiki/index.php/Java%E3%82%B...
最終的には、ウェブ開発/サーバーまわりのことをやりたいので、スクリプト言語だけでも必要最低限のことができるのですが、
スクリプト言語しか組まないとしても、C/C++、ポインタ、再帰を知っているといないでは大違いだと思いますし、
アルゴリズムやコンピューターサイエンスの基礎を抑えている人と、抑えていない人では、
適当な知識の積み上げでスクリプトだけを組んでいる人とは大違いかと思っています。
そういう意味で、scheme, Haskell, アセンブリ、lisp等も勉強したいと思っているのですが、
何をどこまでやるか、ですよね。
貴重なご意見どうもありがとうございました。
参考にさせて頂きます。
不動点ってコンピュータサイエンス上でそんなに重要なもんでしょうか?
Yコンビネータあたりの話なんでしょうけど、それだけを知ったからといって何か応用があるわけでもない気がします。より深いプログラム意味論のなかで生きるものでしょう (薀蓄を傾けるためにもつかえますが)。
というわけで、不動点のみならず意味論の教科書として:
Haskellを使って意味論を勉強するとかいう教科書があればもっと意に沿ったんでしょうけど、寡聞にして知りません。
あと、ガチなコンピュータサイエンスとしては計算可能性(チューリングマシン)、計算量理論、正規言語、オートマトン、論理学一般、型理論あたりが自分の中で思いつきます。
アルゴリズムの話とかは基礎じゃないのかもしれません。
> 不動点ってコンピュータサイエンス上で
> そんなに重要なもんでしょうか?
上記回答にも2回記載しましたが、Joel on Softwareの記事を見て、コンピューターサイエンスの最難関といわれている2つを押さえておこうかなと思い、今回ご質問させて頂きました。
専門的な知識をお持ちの方からアドバイス頂けて、勉強になりました。
参考にさせて頂きます。
どうもありがとうございました!
貴重な情報をどうもありがとうございます。
参考にさせて頂きます。
HPも拝見させて頂きました ^ ^