study

値返ししよう。

小さな算術クラスは値返ししようというお話。 以前(といっても1年半以上前だが)僕はconst参照を使ってET(Expression Template)を実装しようと試みたことがある。 const参照ならコピーのコストが無いので、これがさらに最適化すればETが実装できるはずだと…

copy_n

copy_n()という関数は標準にはない*1。fill_nはあるのに。なんでないのか?その理由は良くわかってない。 copy_nの存在価値はあるか?あるとしたら最適化の考慮のためだろう。 copy_nは条件次第で最適化により高速な関数memmoveまたはmemcpyに置き換える。 …

CRTP (Curiously Recurring Template Pattern)の使い方

CRTPというC++で使われるテクニックがある。これは自分自身をテンプレートパラメータとしたテンプレートから派生してクラスを定義するものだ。これはこちらのページに詳しいが、今回はCRTPのもっとも便利だと思われる使い方を示してみようと思う。 CRTPを具…

allocator考察

標準コンテナは初期値を持たないコンストラクタはどうしてるかというお話。たとえばstd::vectorでいえばvector()やvector(size)なんか。そのとき内部型をTとすると、T()を呼び出す。ということはintやdoubleなんかも必ず0になる。しかしおもしろいことがひと…

拡散環境マップ

理論的つじつまがあってきた。 ある値はπ/Nθ·Nφだ。多分。 2π/Nθ·Nφだった。 拡散環境マップをつくる方法 ざっと説明してみる。 ある微小面におけるirradianceの和はその法線との入射角をθ*1とすると、ランバート則に従うのなら以下の式のようになる。 I = ∫…

異なる型の演算

以前異なる型の演算した結果の型をどう推測すべきか疑問にした。http://d.hatena.ne.jp/ototoi/20030604#p3 そこでは解決策としてexpression templateを挙げたのだが、実装してみると、expression templateもその問題に縛られてしまうことが分かった。 昨日…

2点間の距離を近似

次の記事について考えてみた。http://www.flipcode.com/articles/article_fastdistance.shtml この記事はある2点間の距離を近似して求めてしまおうというもの。普通距離は2点をA、Bとすると x = A.x - B.x , y = A.y - B.yとして距離distanceは distance = …