あけましておめでとうございます
去年もたくさん見てもらってありがとうございます。コメントくださった皆様にも大変感謝してます。今年もどうぞよろしくお願いします(^^)
コメントでいいアドバイスをもらったのに手を付けれてないことがいろいろあって、それが心残りです。今年はフットワークを軽くしたいなと、それはつまり自分の処理能力を上げていきたいなと思います。ってちょっと難しい目標だなぁ(^^;
新年早々、抽象化とか凝集度とか再勉強中。.NET のようなきれいな設計を目指したい!
納得いかないこと
こんばんは、siokoshou です。世の中、納得いかないことは多いものですが、今日も一つ納得いかないことが増えてしまったので聞いてください。
は、おk。じゃあ、両辺に 3 を掛けると
よって、
1 = 0.9999...
エェェー、納得いきません!
こちらの本からのネタでした。おもしろいです、コレ。
- 作者: 野崎昭弘,伊藤潤一,何森仁,小沢健一
- 出版社/メーカー: ベレ出版
- 発売日: 2001/02
- メディア: 単行本
- クリック: 5回
- この商品を含むブログ (6件) を見る
ちなみに、Windows の電卓で 1 / 3 = して、次に * 3 すると?お試しを。
eiz レジスタ?
さらに続き。
もう飽きてきたころに、なんで C のほうが速いんだろうってことで objdump で逆アセンブルしてみたときに見つけた変なレジスタ。
4017a5: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi 4017a9: 8d bc 27 00 00 00 00 lea 0x0(%edi,%eiz,1),%edi 4017b0: ...
Intel形式なら lea edi, [edi + eiz + 0] でしょうか。
eiz レジスタ?ぐぐってみると Add fake index registers, EIZ/RIZ, to x86 assembler/disassembler. だそうで、フェイクらしい。命令フォーマットを読み解いてみると、8d が LEA のオペコード、ModR/M が 74 なので デスティネーションが esi、SIB が 26 なので esi + none、ディスプレースメントが 0。というわけで、インデックスレジスタの指定なしを表してるようです。
さらに、この2つの命令は実行しても何も変わりません。CPU時間を食うのと、スペースを食うだけです。 gcc で -O3 をつけてコンパイルした結果なのになんでこんなのが挟み込まれるのかと思ったら、http://gcc.gnu.org/ml/gcc/2007-03/msg00817.html によるとアラインメント調整だそうです。なるほど納得。命令フェッチが16バイト境界に揃ってると有利とかなんとかありましたね。この2つの命令の次のアドレスがきっちり揃っています。
逆アセンブルしたコードを見てみると、あちこちにこの命令のバリエーションが挟み込まれています。上の例でも 4byte と 7byte の2つがありますが、ほかに 3byte (8d 76 00 lea 0x0(%esi),%esi)、6byte (8d b6 00 00 00 00 lea 0x0(%esi),%esi) もありました。一つだけ使ったり、上のように二つ並べたりしてます。
いずれも次の命令がきっちり 16byte 境界に揃っていました。ジャンプなどの飛び先を 16byte 境界にそろえているようです。
でも、必ずしも飛び先アドレスが 16byte 境界にそろってるわけでもないので、飛んだ先に十分な命令があれば調整しないとかしてるんでしょうかねぇ。まあ、とにかく、コンパイラには私はかないそうもないとわかりましたw
以上、アセンブラな記録はおしまい。
あこがれの cmov を使ってみた
前のエントリーの続き。
パイプラインの長い現代 CPU の敵はジャンプだ!ってことでジャンプを cmov 命令(条件 mov)に置き換えてみたんだけど、逆に遅くなってしまいました。cmov にあこがれてて、いつか使ってみたいと思ってたのにガッカリした!! やみくもに使ってもうまくいくわけじゃないんですねぇ。
難問解決
国立情報学研究所の先生が型付きラムダ計算についての難問を解決したそうで。未解決問題22問のリストがあって、このリスト中の問題解決は世界初だって。スゲー!
型付きラムダ計算の未解決問題集
http://tlca.di.unito.it/opltlca/
一問目は 1958年 Haskell Curry 由来の問題!はぅ。
Problem # 5 にある、分数みたいな表記法の意味が知りたいです。こないだの「プログラム意味論」にもこの表記が出てくるんですが、なんの説明もなくてこれが何を意味しているんだかさっぱり…。まあ、何から何まで難しい本でした…