Posts Tagged ‘プログラミング’

x86_64だと浮動小数点演算の精度が低下する

12月 9th, 2008

64bit OSで動かすと32bitの時と処理結果が異なるプログラムで悩んだメモです。

調べていくとfloatを使った浮動小数点演算で誤差が出ることがわかりました。分からなかったのが、IEEE754でfloatの演算精度は32bitと規定されているのになぜ同じソースから作ったプログラムで結果が違うのかということです。

x86では浮動小数点演算にx87を使うのですが、この演算精度は32bitや64bitではなく、80bitで行われるそうです。この辺の話は 浮動小数点演算ではまった話 – bkブログとかBK通信に詳しく載ってます。要約すると32bitの精度で誤差が生じる計算が含まれていても”たまたま”うまく計算できることがある ということです。

たまたま精度よく計算できるプログラムをx86_64に持っていってコンパイルしようとします。このとき、x86_64では必ずSSEが使えるため、コンパイラはデフォルトでSSEを使うようにコンパイルします。SSEで浮動小数点演算を行うと演算精度がx87の80bitよりも悪くなるため、本来生じるはずだった演算誤差が表面化することになります。

高林さんがBK通信で書いているMac OSで演算結果が違うというのも、Mac OSが64bitOSであることが関係している気がします。

バイナリーハックス買おうかな。

Binary Hacks ―ハッカー秘伝のテクニック100選
高林 哲 鵜飼 文敏 佐藤 祐介 浜地 慎一郎 首藤 一幸
オライリー・ジャパン
売り上げランキング: 23306
おすすめ度の平均: 5.0

5 ハードコア?なソフトウエア
5 大工さんにおける電動工具の紹介本
5 当然教科書ではない。でも、とても参考になります。
5 バイナリアンの基本

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

11月 15th, 2008
ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
山下 伸夫
ソフトバンククリエイティブ
売り上げランキング: 44187
おすすめ度の平均: 5.0

5 関数型言語入門の決定版
5 Haskellに触れるにはこの本からが良いと思います。

前から気になってた関数型言語勉強の第一歩として青木さんのふつうのHaskellプログラミングを読みました。MapReduceとか分散処理を実現するアルゴリズムやErlangなど関数型言語が着目を集めつつあり、もうちょっと詳しく知っておかないとなと思っていたので、ちょうどよいレベルの入門書になりました。もちろんこの本だけで関数型言語がばっちり身に付くことはありませんが、関数型言語に対するアレルギーや恐怖心は大分和らぎ、今ならSICPも腰を据えて読んでみようかという気になります。

関数型言語のエッセンスを知りたいという人向けにもお勧めの本です。2年前に出版されている本なので、もっと早くに読んでおけばよかったです。

Subversion Links

3月 22nd, 2008

subversion: Subversion Links

Subversionの公式ページに山のような参考情報へのリンクが書いてあることを今日知りました。例えば・・・

  • メーリングリストのアーカイブ
  • 書籍(ただし英語のみ)
  • クライアントソフトやIDEのプラグインリスト(すごく充実してる♪)
  • 各プログラミングバインディングへのリンク
  • Subversionへのリポジトリ移行ツールへのリンク
  • Subversionをサポートしているホスティングサービスへのリンク
  • TracやsvkなどのSubversionを扱うことができるツールのリスト

があります。

暇なときとかに眺めていると新たな発見があるかも。Mercurialにいつ移行しようか悩んでるんだけどこういうツールの存在はでかいなぁ。やっぱり今の主流はSubversionなんだなと改めて感じます。

log4XX まとめ

2月 18th, 2008

オレンジニュースlog5j – Google Codeが紹介されていたので、log4XXって各言語にあるのかなと気になったので調べてみました。

思いつく言語で見つかったのだとこんな感じかな? 他にもご存知の方がいましたら教えて下さい。

SourceMonitor

1月 12th, 2008

Derive Your Dreamsさんの過去ログを見ていて知ったソースコードの複雑度を測ることができるソフトだそうです。

SourceMonitorに関する説明は以下のサイトが詳しかったです。

SourceMonitorの特徴をまとめると・・・

  • Windowsで動作するフリーソフトウェア
  • サポートする言語はC++, C, C#, VB.NET, Java, Delphi, Visual Basic,HTML
  • GUIで操作可能
  • ソースコード行数、コメント行数とともにソフトウェアの複雑度を測定してくれる

といったところです。複雑度はMcCabeのサイクロマチック数と呼ばれる値を計算しているらしく、ソースコード中の分岐が多いと高い数値が出るようになっているそうです。詳しくは McCabe’s cyclomatic complexityに紹介されています。

早速火曜日に会社に行ったら仕事で書いてるソースを測定してみよう!

scpp

12月 10th, 2007

Selective C PreProcessor(選択的 C プリプロセッサ)の略で、特定のディレクティブのみを処理できるCのプリプロセッサです。これを使うと不要な#ifdef#endを除いたソースを作り出すことができます。内部開発用に入れておきたいコードがあるんだけど外部へのリリースには忘れず取り除かなくてはならない・・・といった用途に力を発揮してくれそうです。

仕事でも少し前に必要としていて探したんですが探し方が悪かったみたいです。このソフトはWindowsで動作するものなんですが残念ながら商用利用はできないとあるので仕事で使うのは無理そうです。でも

scpp (selective C preprocessor – 選択的 C プリプロセッサ) と呼ばれるソフトの Win32 移植版です。

ということはscppの実装は他にもいくつかあるんでしょう。

他の実装をご存じの方がいらっしゃいましたらコメントで教えてくださいm(_ _ )m

インテルVTune パフォーマンス・アナライザー

10月 16th, 2007



会社で仕事のために購入してもらったIntel製のプロファイラ、Linux版とWindows版があって自分はWindows版の方を使っています。単体で動作させることもできるし、VisualStudioと連動して動かすことも出来便利です。

問題は使い方がまだよく分からないこと、今は開発中のライブラリのボトルネックを探すのにサンプリングを取ってソースとアセンブラを並べて表示させるところまでできていますがたぶんもっと便利な使い方があるはずです。

どう書く?org

7月 24th, 2007



与えられたお題をどう解くかを競うプログラマ向けのサイトです。人のソースを読むのは勉強になります。

時間を見つけてちょこちょこのぞいてみようかな。

google-gflags

7月 17th, 2007



Google Japan Blogで紹介されていたGoogleが公開しているプログラミング用ライブラリです。コマンドラインオプションをパースするのに使うgetoptよりも高機能で手軽に使えるようです。main関数に手を入れることなく、defineの定義の追加でオプション指定ができるのは便利ですね。

このライブラリのライセンスは修正BSDライセンス(New BSD Licence)です。著作権の表示と、無保証、免責をクリアすれば使えるかなり制限が緩いライセンスとのことです。これなら会社でも使えるなぁ。

masuidrive的プロジェクトの方針

7月 13th, 2007


はてなブックマークで知ったmasuidriveさんのプロジェクトの方針を読みました。
masuidrive on rails » Blog Archive » masuidrive的プロジェクトの方針

作業スクリプトまでSubversionに入れて管理ってのはこれまで考えたことも無かったので新鮮でした。Tracのチケットというのも使ってみたいのですがこれはちょっと敷居が高そうに感じます。

職場でも使ってみたいですが、うちの場合は徐々に導入することになりそうです。

Pages: 1 2 Next