とみながたけひろ
@takehiro_t
x86 FPUでsincosが何故同時に計算できるのか分からなかったcordicを学ぶ前の俺。学んだ頃にはx86なんて完全に忘れていたがその後数年たって二つの知識が頭の中で融合した^^;;
2011-05-03 01:19:12
AoiMoe a.k.aしお兄P
@AoiMoe
CORDICとか懐かしいアクロニムをTLで見た。sqrtとかsinとかcosみたいな関数を、代数的に直接計算する変な手法
2011-05-03 01:24:58
AoiMoe a.k.aしお兄P
@AoiMoe
収束があんまり速くない(というか1ループ回すたびに1ビット厳密に計算される)ので、最近はあんまり使われないけれど、単純な整数の四則演算しか持ってないようなハードで固定小数点で計算するには便利
2011-05-03 01:27:08
とみながたけひろ
@takehiro_t
などというおっさん発言を、実家に並ぶ二台のX68kを前にして感慨深く思い出すのであった。なお俺が始めてコの業界でお金を稼いだのはFLOAT2!(分かる人はオッサンorオバサン確定)
2011-05-03 01:29:37
AoiMoe a.k.aしお兄P
@AoiMoe
あれの面白さは、任意のビット数のsinやcosの値を、代数的手法の繰り返しだけで厳密に計算できるという変な美しさだな。
2011-05-03 01:32:40
AoiMoe a.k.aしお兄P
@AoiMoe
マクローリン展開あたりだと、確かsin/cosあたりは一項増やすだけで有効数字が倍になったりするので、CORDICの一項あたり1bitってのは、やっぱり遅い。
2011-05-03 01:36:58
AoiMoe a.k.aしお兄P
@AoiMoe
でも、「sin/cosはマクローリン展開すると1項ごとに倍になるよ」みたいなどーでもいいことだけ覚えてれば、あとはいくらでも調べられるわけ。……しかしながら、この例に関して言えば、もっと大事な格言を思い出した:「sin/cosは自前で書くな」
2011-05-03 01:43:44
AoiMoe a.k.aしお兄P
@AoiMoe
CORDICとかDDA/bresenhamアルゴリズムあたりは、純粋なプログラミングの楽しさが味わえる題材だと思う
2011-05-03 01:50:40
AoiMoe a.k.aしお兄P
@AoiMoe
CORDICは確かに(オーダー的な意味で)遅いんだけど、たとえば16bit固定小数点演算だったらマクローリン展開より速かったりするわけです。そういう世界もあるんだな。
2011-05-03 07:59:32