月別アーカイブ: 2018年8月

2進数の恐怖

普段から EXCEL でいろいろと計算させたりチェック作業をしてる人で「10進数から2進数への変換誤差」と聞いて「ああ、はいはい、知ってますよ。それがどうかしました?」という人はこの記事を読む必要はナッシングありません。どうぞ心安らかに日常生活をお過ごしください。

さて、ここからは、EXCELで計算式や関数を活用してるけど、2進数と10進数とか丸め誤差とか言われてもピンとこない方々にお読みいただく部分です。知ってる人には「何をいまさら」って話ですけど、知らない人はこれを読んでる途中で過去に自分が仕事で何かとんでもないことをやらかしてしまってたんじゃないかと背筋がゾクッとするかもしれません。

EXCELで試してみよう

手元にパソコンあったらEXCELを起動しましょう。

あ、EXCELを使いますけど、悪いのはEXCELじゃないです。わたし、日頃からEXCELはクソだとかクソだとかクソだとかクソだとかひどいこと言ってますが、この件についてはEXCELさんも被害者っていえば被害者かな。ま、とりあえずエクスキューズしといたから、あとは言いたい放題言うよ。

EXCELを起動しましたか?

起動したら、A1セルに「0.1」と数字を入力して、B1セルには「=4.9-4.8」という式を入力してください。

入力を確定するとA1セルもB1セルも「0.1」が表示されますね?

ここでA1とB1に違うものが表示されたって人はおっちょこちょいです。このページをそっと閉じてまずは「よくわかるMicrosoft Excel 基礎」とか「すぐわかる はじめて学ぶExcel入門」とかって本を読みましょう。

さて、次にC1セルに『A1セルとB1セルが同じなら「同じ」、違うなら「違う」という文字が出力される』判別式を作ってください。If文を使います。

=IF(A1=B1, “同じ”, “違う”)

さて、A1セルとB1セルは同じだから、C1セルには「同じ」が出力されると思いきや・・・・

「違う」が出力されちゃいました。画面では両方とも同じ0.1なのに、違うという判定になってしまう。これはいったい何が起きてるのか。

D1セルに、A1セル引くB1セルを計算させてみましょう。

0.1 – 0.1 なんだから0になると思いきや

あら? 0.1 引く 0.1 の結果がビミョーにゼロになってない。指数表示だとわかりにくいから小数で表示すると

0.1 よりも 4.9 – 4.8 の答えの方がほんのちょっとだけ大きいってことになってる。

これが、丸め誤差と呼ばれる怪奇現象。

コンピュータは2進法で動いている

ご存知の方が多いと思いますが、コンピュータはあらゆる情報を0と1の組み合わせで記録する機械です。たとえば数値も

10進数の [5] は [101]

10進数の [6] は [110]

10進数の [7] は [111]

みたいに2進数で扱います。

計算も2進法で行われます。たとえば 5 + 7 は、コンピュータの中では2進数に変換されて 101 + 111という2進法の足し算が実行されます。答えは2進数の 1100 で、これを最後に10進数に戻すと 12 になり、答え 12 と表示されます。

10進数を2進数に変換して、2進法で四則演算を実行して、出た答えを10進数に戻す

このとき使われる数値がみな整数であれば10進数←→2進数の変換にまったく問題は起きないんだけど、小数が関係すると問題が起きる可能性が出てくる。たとえば10進数の「0.1」を2進数に変換しようとすると

0.00011001100110011001(1001)・・・・・・

と循環小数になってしまう。このときコンピュータは所定の桁数で丸めてしまうので、誤差が発生。2進数の0.00011001100110011001を10進数に戻すと

0.09999942779541016

で 0.1 には戻らない。

同様に

10進数の「4.9」は2進数で「100.11100110011001100110(0110)・・・・・」

10進数の「4.8」は2進数で「100.11001100110011001100(1100)・・・・・」

なので所定の桁数で丸められ、4.9 – 4.8 の計算結果は丸めた数値同士の引き算になるので、計算結果に誤差が発生する。そのため 4.9 – 4.8 の計算結果が 0.1 と微妙に違うという結果になってしまう。とまあそういうことらしい。

EXCELはその涙ぐましい努力によって画面の見た目では A1セルもB1セルも同じ0.1を表示してくれてるものの、実際の情報は誤差を含んだ状態でしか記録できていない。その結果、同じはずの2つの結果が違うということになる。

IF文とかで計算結果の比較したことある?

小数が関係する計算は誤差が含まれる可能性があるので、上記のように比較式に使うと同じはずの数値が、違うと判定されることが起きてしまう。

ここまで読んで、背中に冷たいものを感じた人がいるかもしれない。

大量の計算結果同士を比較してIF文で同じかどうか判別して集計に使ったりしたことがある人、あの時の集計結果は本当に正しかったのだろうか?

いやーっ

こだち第2事務所(2)

先を見通せない場当たり的な経営によって、せっかく建てた事務所がたった4年で使えなくなるという大失態を演じたオレってなんかカッコよくね?

ええ、カッコ悪いですよね、はい、わかってます。反省してます。

 

現事務所から徒歩3秒というすばらしい場所にアパートを借りてそこを第2事務所にしました。賃貸なので大丈夫。もしまた手狭になったら移転すればいいだけですから。『家賃払うくらいなら買った方がいいじゃん、みんなバカなの?おれ天才なの?』という能天気な考えは捨てました。企業規模にあわせて事務所を簡単に変えられるのが賃貸のメリットなのね。

さて、場所は好適な第2事務所なんだが、生活臭あふれる古典的なワンルームアパートというのが困りもの。全然仕事スイッチが入らない。

●台所の存在感を消したい

まずなんとかしなきゃならんのは「玄関のすぐ横にある台所」

 

玄関のすぐ横にむき出しの台所。キッチンじゃない「台所」だ。昭和のアパート感あふれるサイズとデザインの台所が玄関入ってすぐの場所に鎮座ましましている。これでは玄関入っていきなり仕事する気が失せる。取引先の人が来てもあまりの生活臭に失神してしまうだろう。

なんとかしなきゃいかんのだが、賃貸だから壁紙はがすとか穴開けて何か取り付けるとか無理。置くだけの何かでどうにかゴマかす方法を考えにゃならん。

・・・・・・・・DIY魂がメラメラと・・・・・・・湧いてこない。

この機に私物感があふれる机もまともなビジネス用デスクに買い換えようと思って世界のオカムラの営業マンに部屋を見てもらったついでに、この台所をどうしたらいいか相談してみた。

「パーテションを置いて隠したらいいと思います」と即答。カタログをパラパラっとめくって↓こういうのを紹介してくれた。

まあ、そうだよな。

でもパーティションくらいなら、買わなくてもなんかそれっぽいもの作れそうだなあ。ということで作ってみることに。

●パーティション作った

家の中に使えそうな材料は転がってないかと見たら、4年前に猫の侵入防止用に作ったドアがあった(その時の話は家がオリになっていくでどうぞ)。当時は金魚やネズミがいたし、長男がアレルギーだったり、キッチンに侵入して悪さしたりして、宅内での猫の移動を制限する必要があって、金属メッシュパネルを使った簡易ドアを何枚か作った。

 

あれから4年の間に金魚は死に、ネズミは天寿を全うし、長男はなぜかうちの猫にはアレルギー症状が出なくなったし、キッチンに侵入するものの子猫の時ほどの悪さはしなくなったし、で手作り侵入防止ドアが使わなくなってた。

そこでこのドアを解体してこのとき使った突っ張り棒とメッシュパネルで、第2事務所の台所を隠すパーティションをつくることにしたよ。

↑こんなイメージ。突っ張り棒の左右にメッシュパネルを結束バンドで取り付けて「く」の字形にして台所を隠す。カンタンパーティション。突っ張り棒立ててメッシュパネルを結束バンドで縛るだけ。あっという間に完成。しかし、メッシュパネルだけだとスカスカで台所丸見えの状況は変わらないので、メッシュパネルに何かを貼り付けて目隠しにする必要がある。

ここが悩みどころ。

最初は布を張ろうと思ったんだけど、しっかりたるみのないようにビタッと張らないとだらしない感じでオフィス感が出ないと思ってめんどくさいので却下。タペストリーかなとも思ったんだけど、よほどデザインに慎重にならないと学生さんのアパートって感じがするのでこれも却下。たぶん俺だとガンダムのタペストリーとか貼ってしまいそうだし。

結局、半透明のポリスチレン板がいいかなと思ってホームセンターへ。風呂のドアなんかに使われている半透明で片面がボコボコしていて、中に人がいるかどうかがわかる程度にしか向こう側が見えないやつ。

↑こういうのを想像して、ホームセンターへ。ところがホームセンターでいろいろ眺めているうちに横方向に細長い木製板材を取り付けて何段にも重ねる目隠し板式がいいかなと思い始めた。

方針転換。

色を塗った板材を貼り合わせてストライプ調の目隠し板を作ってみることに。

ど、どう?紺・青・白のストライプ柄ってベンチャー企業のオフィスとかクリエイティブ系オフィスなんかでよくある色使いだっていう偏見に基づいて3色の板材を貼り合わせて目隠し板を作った。板と板の間をピッタリ合わせちゃったけど、3mmくらいの間隔をとったほうがよかったかもという後の祭り、後悔先に立たず。まあいいか。俺の背丈だとこれで台所は見えないんだけど、背が低い人だと台所の端が見えそうだから下にもう1枚入れた方がいいかな。

●調子に乗ってオサレデザインに挑戦

さて、パーティションをオシャレクリエイティブ系に路線変更したので、それならばと調子に乗って板材にオシャレっぽいデザインを施してみることにした。といってもオシャレクリエイティブ系とは縁のない昭和脳の人間が無理すると超絶恥ずかしい結果になるのが目に見えてるので、まずは控えめに1枚だけアクセントを入れた。

上部の白い板材の左端に手書き風メッセージ、右側に会社名とメッセージ。

オシャレクリエイティブ系を目指してがんばってみたものの結局『プログラムはお前が思った通りには動かない、お前が書いた通りに動く。』とかIT業界あるあるネタを書いてしまうあたりがウケ狙いの悪いクセがにじみ出てしまってちょっと悲しい(ほんとはうれしい)。

左端のメッセージも英語でオサレっぽく見せてるけど『私が書いたプログラムが動かない理由がさっぱりわからない。私が書いたプログラムが動く理由がさっぱりわからない。』というこれまたIT業界あるあるネタだし。

まあしょせん久光は久光ってことで冷笑するくらいで許してくださいな。

●折り返し部分のデザイン

さて、玄関側からの視線をこれで遮ったので次は折り返し部分のデザイン。同じ色の板材で端の凸凹ずらしも合わせて(パーティションを直線状に開いたらピタッとつながるように)デザインしようと思ったんだけど、「ただの目隠しじゃもったいない。せっかくなんだから掲示板のような使い道がある方がいいんじゃないのかね」という心の声が・・・貧乏性なのかな。ということでコルクボードを購入。

折り返し部はコルクボードを上下対称の板材で挟み込んでみた。

・・・・・・・・・うーん、紺と白の板が逆の方がよかったかな。いやそもそもコルクボード入れずにすんなり玄関側と色と凸凹を合わせたデザインの方がよかったかな。うーん、だんだんオサレクリエイティブじゃない感じがしてきたけど、まあいいことにしよう。気にしない、気にしない。

いずれにしてもこっち側は下半分も目隠しした方が良さそうだな。台所がありますっていうのがもろわかりだもんな。どうしようかな。このまま板材を下まで繰り返すとしつこい感じがするし、ライトオークかウォルナットの大きな一枚板で隠すか、ここで半透明ポリスチレン板を使うか、あ、壁面緑化タイプの人工観葉植物を取り付けるのもいいかも。ゆっくり考えよう。