2010年9月30日木曜日

蛍雪の功

  新作ハーフマウスのためのマウントとホイールの切削.をしようと思ったが,もともと暗い環境なのに蛍光灯が切れていてほとんど加工面が見えない.何ヶ月も前から切れているけど新しいものに替わらないあたり私のサークルの活動実態を反映している.仕方ないので自転車用のライトで照らしながら作業する.昔明かりがなかった時代の苦労がわかる.

  しかしながらホイール径がイマイチ.設計がよくなかったらしい.明日の夜また作ることにする.また暗いと嫌だなあ.

2010年9月5日日曜日

中部地区初級者大会

  名古屋まで遠征してきました.今回は行き帰りともリッチに新幹線を利用したのでだいぶ楽に移動し,かつ,移動時間の有効活用ができました.参加者は多かったように思いますがスムーズに進行していましたね.さすがです.

  私は,ハーフマウスの競技だけ参加し,結果は以下の通り.参加者が少なく,エキスパートの人除外のおかげですが.私は初級者なのか?ハーフでは初級者ですね.たぶん.

    こじまうす6 5秒772 優勝

  次は中部地区大会ですかね.それまでに今年の本番用にハーフマウスを作りたいが,どうせいろいろあって忙しいだろうな.でも作るけど.

2010年9月4日土曜日

小数点演算の単精度化

  STM32に小数点演算をさせる場合は倍精度だと時間がかかるし,倍精度も必要無いので単精度で計算すべきだろうと思う.つまり全ての浮動小数点変数はfloatで宣言し,浮動小数点定数は1234Fのようにfloat型であることを明示すべき.特に定数値は数値だけ書くと倍精度として扱われるので,途中の演算が倍精度で行われて時間がかかるだけでなく,代入の時に単精度に変換することになるのでよけいにかかる.

  私のマウスは現状定数には何もつけていなので倍精度で計算されていることになる.全部定数にFをつけるのが面倒だなあとか思っていたが,やはりそういうコンパイルオプションはあるらしく,
    -fsingle-precision-constant
とすると定数が全て単精度になるらしい.(GCC以外にこのオプションがあるかどうかは知らない)

  以下,このオプションを付けない場合の調査結果.ただし,一定時間毎に割り込みがかかってたりするので計算時間の絶対値に意味はない.

1. 304ms
    float temp=1.0;
    for(int i=0;i<100000;i++) temp = temp * 1.0001;

2. 116ms
    float temp=1.0;
    for(int i=0;i<100000;i++) temp = temp * 1.0001F;

3. 225ms
    double temp=1.0;
    for(int i=0;i<100000;i++) temp = temp * 1.0001;

4. 406ms
    float temp=1.0;
    for(int i=0;i<100000;i++) temp = temp / 0.9999F;

初級者大会前

  さて,5日は中部地区の初級者大会ですね.わりといろんな方が参加されるようで,運営の方は大変かと思います.私もハーフだけ登録してあります.といっても7月末から何も変わっていないし関西支部の大会から中途半端にプログラムを書き換えてある分遅い.とりあえず壁切れだけちゃんと読めるようになれば少しはましになるはず.あと一日あるが,調整に使えるのは2時間くらいか.