鍋あり谷あり

テーマを決めずに適当に書いています。

プログラミング

昨日の続き

コメントを頂いたのはいいんだが、リンク先の内容は仕事で故意にそういうことを書く人がいたら厳重に注意する必要があるような内容だと思う。 そもそも。

仮想関数のことをヘッダに書きたくない

今日は C++ の話。先日仕事中にふと思ったこと。例えば struct foo{ virtual void hoge() = 0; }; struct bar : public foo{ virtual void hoge(); }; struct baz : public baz{ virtual void hoge(); };こんな時。 foo に hoge という仮想関数があるという…

やっぱりわかってないような気がする C++

プログラミングと無関係な話題なのに、いつもリファが多いのは関数的なアンテナ。 申し訳ないようなそうでもないような。 で。 久々にプログラミングの話題。 でも、関数的じゃなくて C++。まずはソース: struct A{ virtual void foo(){ puts( "A::foo" ); …

{...} と begin...end

私は、begin...end よりも {...} が好きだ。ruby でも、each do ... end ではなく、each{...} と書く。 理由は簡単で、対応する括弧にジャンプできる可能性が高いから。 エディタが十分賢ければ bgein...end だろうが do...end だろうが、対応する begin/end…

私の知らない浮動小数点

先日の f(f(x)) == -x で気づいたことなんだが。 numeric_limits::min() というか DBL_MIN って、double で表現できる、最も小さな正の値ではないらしい。 その証拠に: for( double d = numeric_limits<double>::min() ; d!=0 ; d/=2 ){ cout << d << endl; }とかい</double>…

f(f(x))==-x の答え

http://oss.timedia.co.jp/index.fcgi/kahua-web/show/ossz/oneline/2006-04-17 出題され http://oss.timedia.co.jp/index.fcgi/kahua-web/show/ossz/oneline/2006-04-18 で答えが出ているが、無限大を使っているのが不満であった。それに、計算誤差で負ける…

二回適用すると符号が反転する関数の、インチキ臭くない実装

というわけで、問題。 以下の仕様を満たす関数 f を実装せよ。 f は、浮動小数点型を引数にし、浮動小数点型の値を返す x が有限の実数の時、f(f(x))-x がゼロになる。 x が有限の実数の時、f(x) は、有限の実数になる。 ただし、少なくとも x が以下の値の…

二回適用すると符号が反転する関数

昨日の続き。昨日書いたやり方だと f(f(x)) が -x にならないことがある。 数学的には正しいと思うんだが、計算誤差でうまくいかないことがある。その点は、メンテナンス中になっているので確認できないんだが、たぶん、 http://oss.timedia.co.jp/index.fcg…

類題

思いついた類題。 f(f(f(x))) == x^1 ( ただし、^ は排他的論理和演算子) を満たすような、整数を受け取り整数を返す関数 f を書け。 解けるかどうか考える前に寝る。 ……と思ったらすぐに解けた。アホ。

f(f(x))==-x

jijixi's diary 経由で見た問題 http://oss.timedia.co.jp/index.fcgi/kahua-web/show/ossz/oneline/2006-04-17 を解いてみた:

はじめてのC

d:id:soutaro:20060413:1144957107 を読んで: はじめての S EXPRESSIONってのはどうでしょう。いやそんだけ。

それはあんまりだよマイクロソフトさん

派生クラスで基底クラスと同名だけど返り値がちょっとだけ違う関数を定義しても、オーバーライドになる。 という話と、多重継承を絡ませると: struct root{ virtual root * create(){ return new root; } }; struct foo : public virtual root{ virtual foo…

マイクロソフトの すごい 最適化

なんか、すごい最適化をすることがあるのを発見した。 ソースは void foo( char * ); void bar() { char buf[] = { 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9, 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9, }; foo( b…

久々に私の知らないC++ - 初期化されないオブジェクト

先日。 素でタイプミスして CSomeClass obj = obj;みたいなことを書いた。 まあこれがコンパイルできることは知っていたんだが、どんなコードが落ちるのが正しいのか、あるいは得意の「未定義」なのかはいまだに知らない。 で。 struct foo{ foo(){ cout << …

ドライブが使えるかどうか調べるの続きの続きの続き

コメントありがとうございます>なかだ様 で。 存在しないホストに対するUNC っていうのは、具体的には p File.directory?( '\\\\foobarbaz\\directory' )ということですよね。 それなら、メッセージボックスは出ませんでした。

ドライブが使えるかどうか調べるの続きの続き

先日 ( d:id:Nabetani:20060104:p4 ) の続き(d:id:Nabetani:20060107:p1)の続き。 コメントありがとうございます。>なかだ様 で。 早速 ruby を 「ruby 1.8.4 (2005-12-24) [i386-mswin32]」にアップデートして、「File.directory?( 'A:' )」を試してみま…

ドライブが使えるかどうか調べるの続き

先日 ( d:id:Nabetani:20060104:p4 ) の続き。 コメントありがとうございます>なかだ様 で。 私の手元の環境(winXP pro SP2 / ruby 1.8.2 (2004-12-25) [i386-mswin32] ) では、フロッピーディスクを刺していない状態で File.directory?( 'A:' ) を実行す…

ドライブが使えるかどうか調べる

USB経由でメモリカードリーダーがつながっていて、しかもメモリが刺さっていたらなんかする、というプログラムを ruby で書こうと思い。 ドライブが存在して、そのドライブにメモリカードが刺さっている状態なら黙って真を返す関数というのがあるといいなと…

私の知らないC++ - typename-class-struct

しつこく私の知らない C++。 今回は、テンプレート関数を宣言するときに使う、typename 修飾子。という名前のような気がしているものの話: class hoge{ public: class c{}; struct s{}; typedef int i; }; template< typename t > typename t::i tt() // も…

返信返信

コメントありがとうございます。>k.inaba さん・shiro さん きちんと時間を取って考えないと返信が書けないので、ペースが遅くなってます。すいません。まず。 私は既存の処理系の話と言語仕様の話をごっちゃにして書いていて、shiro さんは言語仕様の話を…

返信

http://d.hatena.ne.jp/Nabetani/20051203/c1134603533 への返信。 sumii さん、コメントありがとうございます。 で。なんとなく話がかみ合ってないような気がするんですが、あまりそのことは気にせずに書きますと。 私が気になるのは、ある言語にもともとな…

私の知っているC言語

今日は、C言語の意外かもしれない仕様をいくつか。 配列の添え字のように見えるもの a[b] と書くと配列演算をしているような気分になるが、式の中に表れる a[b]は、(*( (a) + (b) ) ) の略記であり、ポインタの計算と何も変わるところがない*1。 というわけ…

今度はコンパイラを殺してみる

ランタイムの自殺プログラムが好評だったような気がするので、今度はコンパイラを殺すプログラムを書いてみる。 template< typename x=int > struct x{ x::x(){} }; void test(){ x<>x; }g++ だと、エラー。 declaration of `class x' shadows template parm…

後悔はしなくても補足はする

はてなブックマークで、鍋あり谷ありとしては最多の、5users となった。 びっくり。補足をしておくと: main=0 こういうソースを見ると、ああBCPLの正当なる後継者なんだなと思う。私自身はBCPLの経験はないんだが。 で。 main というシンボルの指す値へジャ…

私は後悔していない

C言語で自殺する方法。 思いつくままに: ソース 短評 死にやすさ main=0; たぶん、これより短くはできない ★★ main(){main();} 手元では死ななかった。そういうもの? - main(){*(int*)0=0;} 地味にゼロ番地へ書き込み ★★★ main(){++0[(int*)0];} ゼロ番地へ…

わかっていたつもりの C++

先日に引き続き、同名関数の解決。 実は、catch ハンドラの話を書こうと思っていてソースを書いていたんだが。 同名関数に関わる問題の無理解だか誤解だかがあったので、そちらに変更: struct baz; struct bar{ bar(){} bar( const baz & ){ cout << "bar::…

私には一生わかりそうにない C++

私の無知をさらけ出しつつしつこく続けるこのシリーズ。何回目だろ。 今回は無能もさらけ出してオーバーロードの解決: template< typename t > void foo( t ); template<> void foo( double ){ cout << "template<> void foo(double)" << endl; } void foo(…

返信遅くなりました

返信遅くなりました。すいません。 で。コメントいただいたリンク先は、しっかり読んでいるわけではないんですが http://channel9.msdn.com/ShowPost.aspx?PostID=68302 によると However, we do have around some assembly code. Like a kernel written in …

私の知らなかった C++ まだまだ

不思議な世界シリーズじゃなくてすいません。 実は、不思議な世界シリーズをもう一回と思っていたんだが、いいのが思いつかなかった。残念。 で。 代わりに私の知らなかった C++。C++ の言語仕様という海に果てはないのかとさえ思えてくる。 今日は、デフォ…

先日の記事へのコメントに返信

コメントありがとうございます>shiro 様・sumii様。 で。 OSを書こうとしたこともなければD言語を使ったこともない私が「OSを書くことができるような気がしない」などと書くべきではなかったと反省しきりなんですが、何を思って書いていたのかは書いておこ…