銀行丸めと四捨五入。

というわけで、端数の丸め処理についてです。

端数処理ということで、たぶん思いつくのは、

  • 切り捨て
  • 切り上げ
  • 四捨五入

こんなところではないかと思います。

ここで、テストデータとして

11.4, 11.5, 11.6, 12.4, 12.5, 12.6

という6つのデータを用意します。
それぞれの処理についてですが、通り下記のようになります。

データ 切り捨て 切り上げ 四捨五入
11.4 11 12 11
11.5 11 12 12
11.6 11 12 12
12.4 12 13 12
12.5 12 13 13
12.6 12 13 13

 

C や C# そして Ruby や Java などでは、実数を整数に丸める際、
単純にキャストしますと切り捨てますが、

round 関数で丸める際に、挙動が異なります。

Python:
image

Ruby:
image

C#: (自作のシェル経由でごめんなさい)
image

 

C や Ruby, Java では四捨五入がデフォルトで行われますが、
C# では、銀行丸めがデフォルトで行われます。

正式名称は 「最近接偶数への丸め」と言いますが、
「銀行丸め」のほか、「JIS丸め」「ISO丸め」とも言われます。

[Wikipedia の解説記事]

JIS丸めとは?
http://homepage1.nifty.com/s_miyake/hp/jisround.htm

JIS Z 8401
http://www.jisc.go.jp/app/pager?id=94037

 

上の記事の文章を用いて、簡単に説明すれば、

N桁で丸める場合
第N桁が偶数なら 5以下は切り捨て。それ以外は切り上げ。
第N桁が奇数なら 5未満は切り捨て。それ以外は切り上げ。

 

この挙動について、
11.5 と 12.5 という2つの値を整数値に丸めるという場合で説明しますと、

まず 11.5 の場合。
整数値に丸めるので、整数第1位に丸めることになります。

この場合、整数第1位の値は 1 となり、「奇数」です。
次にこの一つ下の値を参照し、 5 であるため、奇数で5未満でないため切り上げ。

よって、 12 となります。

 

次に 12.5 の場合。

同様に整数第1位の値を見ると 2 となり「偶数」です。
一つ下の値は 5 であるため、偶数で5以下のため切り捨て。

よって、12 となります。

 

ただどうしてこういう丸め方をしているかというと、
主に銀行や統計などにおいて、誤差を小さくするために用いられています。

整数に丸める時の注意 – DiaryException
http://d.hatena.ne.jp/LaclefYoshi/20110430/1304138274

こちらの記事におもしろい実験結果がありますので、参照して頂けたら。

 

上記ブログで用いられている R という言語は、統計に特化した処理系ですので、
やはり誤差を抑えるために、銀行丸めが行われているものと思われます。

 

というわけで、先ほどの結果に、銀行丸めと合計を追加すると以下のようになります。

 

データ 切り捨て 切り上げ 四捨五入 銀行丸め
11.4 11 12 11 11
11.5 11 12 12 12
11.6 11 12 12 12
12.4 12 13 12 12
12.5 12 13 13 12
12.6 12 13 13 13

 

というわけで、統計やトレードなどを行う場合はありがたいわけですが、
どうしても四捨五入を行わなければならない場合があります。

その場合は、Math.Round(val) としているところを、

Math.Round(val, MidpointRounding.AwayFromZero);

とすることで解決可能です。

image

 

ではではー!

distcc と ccache でビルド高速化

みむらです。

複数台のマシンをお持ちの方、絶対いらっしゃいますよね。
ついでに、隅っこで寝てるとかそういうパターン、絶対ありますよね。

ということで、そういうマシンをコンパイルの際に利用して、是非とも効率よくパワーを使いましょう。

ついでに、ccache を有効にして、キャッシュしましょうという、そんなお話。

追記ですが、 Mac OS X にはこれがなにやら、標準で入っているそうです。
Mac マシンを大量にお持ちの方は、是非ともやってみるといいんじゃないでしょうか!


ということで、カーネルを並列ビルドすることを例にして、使い方。 (Linux Mint 12 でテストしてます。)

 

1.distcc と ccache をインストール。

$ sudo aptitude install distcc ccache

 

2./etc/default/distcc を修正する。

$ sudo vim /etc/default/distcc

# 書き換えるのは下記3点

# 動作を許可させる
STARTDISTCC="false" -> STARTDISTCC="true"

# 接続可能ホストを設定する。
ALLOWEDNETS="127.0.0.1" -> ALLOWEDNETS="192.168.1.0/24"

# リスナとなる NIC の IP アドレスを入力
LISTENER="127.0.0.1" -> LISTENER="192.168.1.200"

 

3. distcc を起動する。

$ sudo service distcc start

 

4. (操作マシン側にて) 接続先のホストを、 DISTCC_HOSTS に設定

(例 192.168.1.200 と 192.168.1.201 が処理マシンだった場合 )

$ export DISTCC_HOSTS="localhost 192.168.1.200 192.168.1.201"

 

5.ビルド

# configure を行う場合
$ CC="ccache distcc gcc" CXX="ccache distcc g++" ./configure

# make を行う場合
#
# なおこの場合、物理コア数の2倍を同時実行数に指定すると、
# なんかいい感じらしいです。
#
# http://distcc.googlecode.com/svn/trunk/doc/web/faq.html
#
# 今回の場合は、各ノードに 4スレッドの CPU が乗っていて、
# 自分と、それ以外の2台のマシンがあると仮定。
#

$ make -j 24 CC="ccache distcc gcc" CXX="ccache distcc g++" HOSTCC="ccache distcc gcc" HOSTCXX="ccache distcc g++"

たぶん、HOSTCC と HOSTCXX の指定は、カーネルビルドの時ぐらいしかいらない気がしなくも。

ついでに、 configure で CC と CXX 指定したら、 make 時はいらなそうな。

とりあえず、自分の備忘録ってことで。メモメモ。

 

追記事項としては、

ビルド環境のコンパイラとかインクルードファイルとかは一緒にしておいた方がいいよということ。

あわせておかないと、面倒なことになるようです。

ソフト面だけ合っていれば問題なさそうなので、ハードウェア面は、プロセッサのアーキテクチャが違うとか、

そういう系を除けば大丈夫だと思います。

SELinux で restorecon してあうあう。

もう、毎回のごとく忘れるので、備忘録。

動かない –> /var/log/audit/audit.log* を見に行く。
毎度のごとく「コンテキストがちげーぜお兄さん」と書かれてる。

そのときに、 chcon で片付けてしまうのが私のひどく悪い癖w

いやね、なんかの拍子に restorecon して、
ぶっ飛ばしてしまうわけですよ。

ということで、それも含めて幅広く、いろいろ備忘録。

 

*ファイル関連。

chcon (CHange file selinux security CONtext)

ファイルとかディレクトリのコンテキストを変える。
一時的にそのファイルに対して、特定のコンテキストを割り当てる時に使うと良さそう

# chcon –t httpd_sys_content_t /home/hogehoge/public_html/ –R

 

ls –aZ

ファイル・ディレクトリに設定されているコンテキストを表示する。
・・要は Z オプションをつける。

# ls –Z
drwxr-xr-x. hogehoge hogehoge unconfined_u:object_r:httpd_user_content_t:s0 public_html

 

restorecon (RESTORE file(s) default selinux security CONtext)

ファイルとかディレクトリのコンテキストをデフォルト設定に戻す。
後述する semanage で恒久的に変更した場合は、その設定に戻る。

(chcon の変更は、restorecon で復元される際に破棄される。)

# restorecon /home/hogehoge/public_html/ –R

 

semanage (SElinux  policy MANAGEment tool)

ファイルとかディレクトリのコンテキストをはじめとする、様々な設定を恒久的に変更する。
このコマンドで変更した内容は、今後もデフォルト設定として保持される。

(ポートに関しては後述)

設定取得 ( –l を使う ) :
# semanage fcontext –l

追加 ( –a を使う ):
# semanage fcontext –a –t httpd_sys_content_t “/home/hogehoge/public_html/(/.*)?”

削除 ( –d を使う ):
# semanage fcontext –d –t httpd_sys_content_t “/home/hogehoge/public_html/(/.*)?”

反映させる ( restorecon を使う ):
# restorecon /home/hogehoge/public_html/ –RF

 

*実行権限関連。

setenforce ( modify the mode selinux is running in. )

Enforcing (制約が施行されてる状態) と Permissive (制約が施行されていない[許可されている] 状態)
の2つを一時的に切り替える。

恒久的に変更する場合は、 /etc/selinux/config の SELINUX を書き換える。

有効にする:
# setenforce 1

無効にする:
# setenforce 0

 

getenforce ( GET the current mode of selinux )

現在、制約が施行されている (Enforcing) か許可されている (Permissive) か、
そもそも動いてないか (Disable) を返す。

# getenforce
Enforcing

 

setsebool (SET SElinux BOOLean value)

ポリシーを変更して、特定の動作を許可したり不許可にしたりという設定ができる。

# setsebool –P ftp_home_dir on

 

getsebool (GET SElinux BOOLean value)

ポリシーを取得したり、全列挙したりする。

全列挙:
# getsebool –a

特定の要素を取得:
# getsebool ftp_home_dir

 

ps –Z

プロセスのドメインを取得する。
・・・要は –Z をつける。

# ps –Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 15287 pts/0 00:00:00 bash

 

*通信ポート関連

semanage (SElinux policy MANAGEment tool)

ファイル操作は先述。プロセスが使用するポートなんかもここで設定。

ポートの設定を取得:
# semanage port –l

ポートの設定を追加 ( FTP を 11111 ポートで動作可能にする )
# semanage port –a –t ftp_port_t –p tcp 11111

ポートの設定削除
# semanage port –d –t ftp_port_t –p tcp 11111

 

とりあえず、こんな感じで。であであ。

本年もよろしくです。

2012年が始まりました。

喪中なので祝福する言葉を喪が明けるまで書けないそうなので、
本年もよろしくお願いしますということで。

さて、なにやら大晦日あたりに2011年はどんな年でしたってのを書くのが
微妙なブームになっていたらしいですね。

そんなこんなで私も書きましょうぞ。

 

時系列ではこんな所:

1月

  • U-20 プログラミングコンテストで経済産業大臣賞を受賞したので、
    その関係で BCN AWARD の受賞会に参加して、賞を頂く。
    1月14日 – BCN AWARD 2011 行ってきた。
  • 雪が局所的に降って、電車が止まり、テストは追試に。
  • 祖父が亡くなる。

2月

  • お葬式。
  • 葬儀の関係で、テストは再追試に。
    追試手続きをしようとして、事務部にありえねー書類の提出を要求されて、
    追試教科の担当教授や諸先生方と話をして追試可に。
  • 再追試
  • 悶々としながら春休みを迎える。
  • Internet Explorer 9 RC が出る。

3月

  • 免許を取りに行けということで、免許を取りに行く。
  • 東日本大震災が発生。このあたりからじわりじわりと情緒不安定になる。
  • 何とか免許取る。

4月

  • 2年生になってしまう。
  • 新入生が入ってくる。
    新入生で生きがよすぎる人が何人か居た記憶が。
    どっかの誰かさんは、Twitter でリプライ送って一本釣り。
  • 現在のPCを組む。
    4月?日 – 新規PC構築しました。

5月

6月

  • 情報プラネット社から声が掛かり、お仕事を始める。
    (現在は、ソフトウェアの設定を複数台のマシンで同期させる Synclogue というソフトウェアの開発に携わっています。)
    http://www.synclogue.com/
    http://www.microsoft.com/ja-jp/mic/bizspark/showcase/case07.aspx
  • 自分の使っているデスクトップマシンとノートPCを Windows 7 Ultimate にアップグレード。
    6月5日 – Windows Anytime Upgrade 使ってみる。
  • SUA (Subsystem for UNIX Application) を見つけて、遊び出す。
  • 会社の飲み会の時に、 @tnzk さんから、不思議な物体の先端から、白い液体吹き付けられる(ぉ
    (注:吸うタイプのアイスが溶け出したものです。

7月

  • Windows Aero のアニメーション効果を全部切って、きびきびとした作業環境へ。
  • オペレーティングシステムの仕組みに興味を持つ。
  • ICTスクール同窓会&&京都旅行に行ってくる。初めての一人旅。
    このとき、はやみん(@rapwind) 宅に泊まり、夜通しいろんなこと語り合ってた。気づいたら朝になってた。
    でも、この経験がおもしろくて、8月にもっと大人数でやろうよとかいう話が起きる。
  • github にソースコードを公開するように。
    https://github.com/mimura1133/
  • IronPython, IronRuby などの .net の上で動作する言語実装に興味を持つ。(再熱?)
  • @alice1017 さんと秋葉原でオフ。

8月

  • セキュリティ&プログラミングキャンプ2011に参加。(ソフトウェアセキュリティ組。)
    おもしろい人にいっぱいあえた。特にほもっきんちゃん。
    IDA Pro とか OllyDbg とか、直前でたたき込んで行ってみたけれど、
    やっぱり難しいですねww
    セキュリティ&プログラミングキャンプ2011 に参加してきました。(テキスト版)
  • ドワンゴで行われていた、91-conf っていうところに首突っ込んでみる。
    とても濃かったです。
  • IIJ で行われた、スマートフォン勉強会@関東 #14 で発表する。
    http://sumaben.jp/?SPWorkshopKanto14
  • 技術屋クラスタで湯河原に旅行に行く。夜中は不思議な話が出来て、魚介類おいしかった。
    参加者:はやみん、みっとさん、upsilon さん、らくふぉさん、東雲からす、蟹、よしだ。

    結構いい経験が出来て、みんながどういう人かっていうのがわかって、
    なんとなく、このメンバで楽しいことが出来たらいいなとか思った。

    ただ、議論させるならさせるで、内容だったりなんなりを考えるべきかなとか、
    道のりを再検討すべきでしたねとか。いろいろと反省点とかいっぱい。でも楽しかったからいい!

  • 知り合いの女子(かつての生徒会副会長。私はそのとき会長。)と地元の祭りに出かける約束をしたけど、
    そのとき間に合わなくて、祭りが終わった後で合流という悲惨なことをしてしまう。
  • 後日、浦安市の花火大会に「花火が見られなかったから行くか-」ってことで、2人で見に行く。
    普通に見て、適当に屋台みて、食事して、夜遅くに帰りました。
  • 成人式実行委員会が発足。
  • 「高校大学行きたくないんだけど。」という記事を書く。
    8月20日 – 高校大学行きたくないんだけど。

9月

  • サークルの夏休み合宿。
    後輩2名を自分の部屋に呼び込んで、バイナリアンの楽しさを説いたら、そのままそっちの方面へ。
    布団をかぶらない人が寝てたり、奥でゲームやってたり、姫が私の部屋で寝ちゃったり、
    私自身は友人と一緒に、朝まで開発合宿してたりとか、非常にカオス部屋だったのは否めませぬ。
  • Windows Developer Preview が出て、飛びつく。
  • Microsoft 社で行われた、プログラミング生放送勉強会第10回@品川 で発表する。
    http://pronama.wordpress.com/2011/08/04/pronama-10-at-shinagawa/
  • @yutopp さん、@godai_0519 さんとオフ。 C++ について熱く語られた感じ。
    ゆうとさんの顔つきは、なんとなく日常の高崎先生のような感じでした。
  • サイボウズ・ラボさんの会場をお借りして、セプキャン卒業生による LT 大会を開く。
    主催だった癖して、プレゼンデータ忘れたり、道に迷っておまわりさんのお世話になったりした。

10月

  • @loutusu さんと蟹で CEATEC JAPAN 見てくる。
  • よしだ(@yosida95) さんの高校に突撃して、なんだかオフ会してきた。
  • セプキャン卒業生(年度関係なし)のLT大会に参加。このときは Google で行われました。
  • @loutusu さんのアパートに突撃してみた。
  • 福岡まで新幹線に乗って、一人で行った。
    4時間程度(だとおもう)一人ぼっちになる感じで、いろいろなことを考えてしまった。
    そして、まひるんるんさんと会った時に、離ればなれになってしまったかつての盟友に再びあえたような、
    そんな感じがしてたりしてた。
    帰りの新幹線で、なんだか知らないけれど、あまりに思い出がすばらしすぎて、
    感動のあまり泣いてしまったのは秘密。
  • セプキャンキャラバン in 福岡に参加。
    http://sites.google.com/site/seckitakyu/home/info/history/caravan
  • 一度会ってみたい! とかねてから思っていた、
    すのー( @sn0wnight ) とまひるんるん ( @solaris0616 )にあう。
  • セプキャンで仲良くなったわさお( @MatsumuraKs )に熊本案内してもらう。
    ついでに名店のラーメン屋でラーメンを食す。そして九州新幹線の時間(熊本~福岡間)を逃す(ぉ

11月

  • ほっそーさんとかとお食事会。
  • AVTOKYO 2011 に参加して、最先端の技術に触れた。発表者の人が皆さんとってもかっこよかった。

12月

  • 成人式関連の用事がかなり増え、いろいろと焦る。
  • レポート課題とかが出ていろいろと焦る。
  • クリスマスプロ生勉強会にて発表する。
    http://pronama.wordpress.com/2011/12/26/pronama-12-report/
  • 新しい学生証が交付される。
  • 同じ学科・学年のみなさんで忘年会いやっふぅ!

 

こんな感じでしょうかねぇ。

ちなみに、2011年の振り返りとしてその他重要なものとしては次のようなところ:

  • 実写まひるんるんと会う! みーさいなみさいな!!
  • 蟹と仲良くなる。
  • かーみさん (@carme16d) と仲良くなる!
  • @loutusu さんと仲良くなる。
  • よしだ(@yosida95) と仲良くなる。
  • 野村さん(@daisuke_nomura) と仲良くなる。
  • すのー (@sn0wnight) と仲良くなる。
  • わさお (@MatsumuraKs) と仲良くなる。
  • Liva さん(@liva_s) と仲良くなる。
  • わかとのせんせーがおもしろくて、気さくな人だということを知る。
  • はせがわさんと竹迫さんが斜め上下への技術の移動のプロであることを知る。
  • はせがわさんがあいさつ魔であることも知る。(後にあいさつ魔では無くなってしまった模様。
  • 愛甲さんが話しやすい人であることを知る。(事前情報だと結構お堅い人みたいな情報がですね・・
  • はっとりせんせーが、実はとっても話しやすい人であることを知る。(事前情報では(ry
  • 情報プラネット社で働いてみて、とってもおもしろいことに気づく。
  • あほみたいに年末が忙しかった。
  • 人が亡くなったという情報が1年に何度も耳に入ると、精神状況がおかしくなる。
  • 実は年末、誰かに本気で相談したかったのだけれど、実際出来なかった。
    (今はもういいけれどもねー。
  • デスマーチレベルを保ち続けると、ほのぼのとした日常がとてもうらやましく輝いたものに見える。
  • 紅白歌合戦の北島三郎さんの「帰ろかな」 が非常によかった。

 

本当はもっともっと、いっぱい書けるんだけれど、
主だったところだけ取るとこんな感じですかね。

2011年はいろいろな人との関わり合い、支え合いというのを感じた年でもあったように思えます。

 

2012年に関しては、
変に目標とかたてずに、例年通りほのぼのと行きたいと思います。

 

ただ反省点をいくつかあげておくと、
トラブルになったときに相談出来る人を確保しておきたいなーとか思いますね。

本当にこの人に相談していいのかなぁ、っていう不安が実はあって。
まー、この辺小心者のあれですね。

・・・相談する相手は内容にもよるけど、家族以外の第三者がいいなぁ。。
・・・・まひるんるんさんか・・・!

でもまぁ、一方的に相談しまくるのも、
相手に負荷を与え続けていいのかなぁという気になるので、なんともあれですね。

 

もう一つは、タスクの詰め込みすぎで本業がやばくなるのは非常によろしくないということ。
今学期がこわいです。

 

ではでは、本年度もよろしくお願いします。