Round関数について、四捨五入より誤差が少なくなる偶数丸め(五捨五入・銀行丸め)だが、使い方には注意が必要

 この前、四捨五入でちょっとはまったんで、メモとして書いておきます。

 Excelで四捨五入といえば、Round関数ってのがあって、これを使うと四捨五入になる。例えば、セルA1に”1.5″、セルB1に”=Round(A1,0)”と入力して、Enterキーをバシッとやると”2″となるし、セルA2に”2.5″、セルB2に”=Round(B1,0)”ってやってバシッとやっても”3″になり、普通に四捨五入になってることがわかる。

 ところが、これをエクセルのマクロ(VBA)でやると、違った結果になる。エクセルのワークシート関数のRoundは四捨五入だが、VBAのRoundは「偶数丸め」(「五捨五入」とか「銀行丸め」とも)というやつで、ちょうど0.5のとき偶数になるように切り捨てか切り上げかが選択される。

 例をあげるとわかりやすいんで、1.5を偶数丸めする場合、切り捨てだと1、切り上げだと2になるが、偶数になるように、ということなので1.5の場合は2となる。2.5を偶数丸めすると、切り捨ては2、切り上げは3となり、切り捨ての偶数の2が選択される、以下、3.5なら4、4.5なら4って感じになる。

四捨五入と偶数丸めの比較
四捨五入と偶数丸めの比較

 これの利点は、四捨五入だと、真ん中は全部切り上げられてしまうので、プラスの数字はより大きく、マイナスもより大きくなってしまうが、偶数丸めはそこのところを半々に切り分けているので、誤差が少なくなり、金額計算などより精度の高い計算結果が欲しい場合に有用となる。実際、銀行で使われてたので、英語でbankers’ roundingとも言うらしいし、日本語でも「銀行丸め」という場合もあるみたい。

 プログラミング言語によっては引数で丸め方を指定できる場合もあるが、そういうのがない言語もあるし、引数なしで使う場合のデフォルトの挙動も言語によってまちまちなようなので、いずれの丸め方を使うか、ちゃんと意識しておかないと、私みたいにはまることになります……。ロジックは同じなのに言語が違うと合わないってことが起こりえます。

 ちなみに、この丸め方の日本語での使われ方が気になったので、ググッてみたが、こんな結果になった。

"JIS丸め" 四捨五入    - 約 3,010 件(単独 約 3,370 件)
"銀行丸め" 四捨五入   - 約 2,440 件(単独 約 2,580 件)
"ISO丸め" 四捨五入    - 約 2,350 件(単独 約 2,360 件)
"偶数丸め" 四捨五入   - 約 1,140 件(単独 約 3,290 件)
"五捨五入" 四捨五入   - 約 1,000 件(単独 約 2,040 件)
"最近接丸め" 四捨五入 - 約   133 件(単独 約   193 件)
"偶捨奇入" 四捨五入   - 約   261 件(単独 約   598 件)

 Wikipedia英語版のRoundingの項によると、英語では、以下のような呼び名があるらしい。同じくググッて件数調べてみた。日本語で言う「最近接丸め」がよく使われてるようで。

"round-to-nearest" 約 186,000 件 
"banker's' rounding" 約 9,800 件
"bankers' rounding" 約 5,490 件
"unbiased rounding" 約 6,070 件
"convergent rounding" 約 4,770 件
"statistician's rounding" 約 1,270 件 
"Gaussian rounding" 約 649 件
"odd–even rounding" 約 435 件
"Dutch rounding" 約 424 件

 昔から四捨五入って五が切り上げ側にされてて、なんか不公平だなと思ってたが、この偶数丸めは公平性があって、知った時は、四捨五入やめて、全部これにしたらええやん、って思ったものだが、世の中、そんなに精度が高いのは常に必要ではないし、四捨五入は何よりもルールが簡潔でわかりやすいので、このままでええねん。

ゴールデンウィークに滋賀南部にある希望が丘に行ってきた

 今年のゴールデンウィークはしなくてはいけないことはちょっと脇に置いておいて(おい)、滋賀南部にある希望が丘に子供を連れて行ってきた。希望が丘とは、簡単にいうと、だだっ広い芝生ランドが広がる主に家族連れが集う公園、ってことになるのだろうが、森の中のアスレチックやグラウンドゴルフ他、テニスコートや野球場、サッカー場などの様々なスポーツ施設も充実していて、休日は学生や社会人スポーツを楽しむ人たちで賑わうところだ。

 希望が丘には子供の時から何度も行っていて、それなりに覚えているつもりだったが、大人になってからは一度も行ったことがなく、久々に訪れてみて、例えば屋外トランポリンの位置や感じなどが記憶と全然違っており、自分の忘れっぷりにちょっと驚いたが、それでも滞在するうちにいろいろと記憶が蘇ってきて、多分大人になってから一度も思い出したことのない記憶もズラズラと芋づる式に出てきて、それもまた個人的に興味深かった。チェルノブイリ被災者の話で子供時代の記憶のことを話される方が時々おられるが、やはり子供の時の記憶というのはそうそう忘れるものではないらしい。

 ただ、子供の時にはなかったようなのも結構あり、時代に応じた変化はあるようだ。ここは駐車料金さえ払えば、施設を利用しない限り、ほとんどお金はかからないところなので、これから滋賀南部に住むなら時々は訪れたいところ。以下、写真をいくつか。(複数回訪れたので、快晴の日のとくもりの日の写真が混在しております)

希望が丘の南口の駐車場。西口は一杯だが、アクセスの悪い南口はガラガラだった。ゴールデンウィーク中の平日、ということもあったが。月曜は駐車料金半額なのでちょっとお得。
希望が丘の南口の駐車場。西口は一杯だが、アクセスの悪い南口はガラガラだった。ゴールデンウィーク中の平日、ということもあったが。月曜は駐車料金半額なのでちょっとお得。
希望が丘文化公園・全体案内図。敷地としては相当広く、子連れで端から端まで歩くのはちょっと無理。
希望が丘文化公園・全体案内図。敷地としては相当広く、子連れで端から端まで歩くのはちょっと無理。
木製パネルの動物園
木製パネルの動物園
ドラえもんでお馴染みの土管が転がる広場
ドラえもんでお馴染みの土管が転がる広場
希望が丘への道にかかる橋。背景には三上山
希望が丘への道にかかる橋。背景には三上山
2歳の子供でも歩けるハイキングコース
2歳の子供でも歩ける初級ハイキングコース
ハイキングコース出口
ハイキングコース出口にはなぜか柵があった
花緑公園にあった謎の丸太ベンチの広場
花緑公園にあった謎の丸太ベンチの広場
花緑公園のツツジ。5月ということできれいに咲いていた
花緑公園のツツジ。5月ということできれいに咲いていた
花緑公園の藤棚。藤は6月の花というイメージだが、5月初旬で結構咲くんやな。桜同様例年より早め?
花緑公園の藤棚。藤は6月の花というイメージだが、5月初旬で結構咲くんやな。桜同様例年より早め?
花緑公園の錦鯉。餌は100円で売っているが、行った時は自作の餌を持ってきて与えていた子連れのパパがいた
花緑公園の錦鯉。餌は100円で売っているが、行った時は自作の餌を持ってきて与えていた子連れのパパがいた

保育園落ちるかどうかわからんけど、中途入園が不可能ではないことを知り、書類を提出してきた

 今週頭から子供が家にいない状態になってて、週末となり、少しは慣れてきたところ。一緒にいる時は写真や動画を撮影しても、ほとんど見返す余裕がないが、少しずつ見なおしたりしている。いたらいたで、うるさいなぁ、とつい思ってしまうが、いないといないで、やっぱり寂しさを感じないではない。しかし、映像は相変わらず手ブレしまくりで、時々は見て、手ブレしないような撮影を心がけるようにしないと。

 子供はそのうち戻ってくるものと想定しているので、保育園について、動いてみた。少し前から、一時保育では時間も短く、期間も月に最大14日と決まっていて、我々の生活事情からして、もう少し預かって欲しいと思っていたので。

 保育園に入れるのはとても大変、という先入観があり、我々のような典型から外れた生活実態の夫婦はもう無理と諦めていたのだが、我々は常時保育を必要としており、そういう需要があることを分かってもらおうということで、役場で尋ねると、どうやら途中からでも応募可能なことが分かった。

 以前もらった書類には保育園の申し込み受付期間がデカデカと書いてあり、そこを逃すともう1年はあかんもんと思い込んでいたのだが、そうではなかった。考えてみれば当たり前の話で、転勤とかで引越しとかした人はどないなるねん、って話だし、逆に途中で抜ける人もいるだろうから、空きも出るに違いないわけで。日本の学校制度同様、基本は4月入所で、そのため秋の一定期間に募集する、ということになっているようだが、それ以外でも不可能ではないようだ。もっとも私の住む地域のような過疎地域ですら狭き門ではあるようなのだが。

 提出書類としては申請書と、私の場合、「自営業就労申立書」というのが必要で、さらに自分の開業状態を証明する書類(確定申告書など)も必要となるとのことで、コピーして持参した。申請書には同居しているわけではない自分や嫁さんの両親の年齢や就労状態も記入する必要があり、なかなか細かく念入りにチェックされる。親(つまり子供の祖父母)の年齢が60未満の場合も就労証明書が必要となるらしく、もし親が主婦だったりしたら、その人に面倒見てもらえ、ってことになるってことなんだろうか。

 説明を聞いてちょっと驚いたのは、希望が通らなかった場合、連絡は来ない、ということ。これにはさすがに、「え゛っ?」と声を上げてしまった。今時の就活では「サイレントお祈り」といって、今後の活躍をお祈りする不採用通知メールすら寄越さない会社もあるそうだが、行政もこういう対応するんですなぁ。多分、何らかの背景があるんだろうけど、そういうのって、人としてどうなんだろう。こちらとしては、落ちたら落ちたで次の対応を考えなあかんのやが。例の「保育園落ちた」の匿名ブログは2016/02/15 17:17:59に投稿されていて、2月頃には「不承諾」とか「不認定」の連絡が来ることが多いようだが、自治体によっては来ない場合もあるようだ。

 調べるまで知らなかったのだが、私の通える範囲の保育園の多くは認定こども園になっていて、この認定こども園というやつは、基本的には「誰でも入れる」ことに名目上はなっているようだ。しかし、実態としては誰もが入れるような状態には程遠く、結局は「保育の必要性」が高いと認定された人が優先して入園できるようになっているらしい。あまりリアルには想像できないが、どうやら現代日本においても、保育を必要としない恵まれた状態にある人が一定数いて、そういう人にも税金を補填して、保育園に子供を入れてもらってもいいのか、と問われると、なるほどとちょっと思ってしまうが、昔とは状況が違うわけだし、社会全体で子供を育てる、ということはそういうことなのでは、とも思ったりもする。何かと過渡期ではあり、現場の判断として、なかなか難しいところはあるだろうが。

 今回、私の子供は3歳未満なので、「3号認定」というので、申請書を出してみたが、どうなることやら……。ダメ元なんで、ダメならまた従来通り一時保育を利用すればいいか、とも思っているが、出来れば通って欲しいなぁ。

2016年5月9日の身辺雑記

 諸事情によりしばらく子供と会えない状態となった。

 最寄りの駅まで妻子を送り、いつもだったら、そこでサヨナラするところ、今日は電車がギリギリになってしまい、子供を抱きかかえてホームまで連れて行き、電車に飛び乗った妻子を見送ることになった。(いや、駆け込み乗車はしてなくて、一応、間に合ったんですけどね)

 こういう時、子供は割りとあっさりしていることが多かったのだが、今日は違った。こちらは普段のようなあっさりした別れを想定していたので、ホームから電車の中の子供に笑いかけながら手を振っていたのだが、子供の表情はといえば、泣くでもなく、笑うでもなく、感情を内に押し込めたような、2歳の子供としてはあまりに複雑な表情をしながら、こちらを凝視しており、電車が動き出しても、こちらから目を離そうとはせずに、ずっとこちらを見つめ続けていた。その目は切実に私を求めている目で、あのような目で誰かに見られたことは、40数年生きてきたが、なかったのではないかと思う。こみ上げるものを抑えきれず、私は思わず泣いてしまった。(書いてて思い出して、また泣いてもうた・・・)

 今までにも何度か私と長期間離れることがあったが、こんな感じになることはなかった。最近、いろいろと分かり始めてきたようで、何かにつけ、以心伝心ではないが、心が通じあっている感があって、お互い笑い合ったりすることがあったが、こういう風になるとは実際にそうなってみるまでわからなかった。

 子供には適応力があり、最初の数日はともかく、その後は案外ケロっとしているものとも思っているが、こちらがこんなにつらい感じになるんだから、子供が感じている辛さがどの程度なのか、ちょっと想像できない。

 福島から関西に母子避難された方が、福島から会いに来た夫を見送る時が一番つらく、子どもたちはもちろん夫婦どちらもいつも泣いていた、とおっしゃっていたが、こんな感情を毎回味わっておられたのか、と思ったりもした。

 永の別れ、というわけでもないはずなのだが、「別れ」についてふとこんな言葉を思い出した。

僕らが一生通じてさがし求めるものは、たぶんこれなのだ、ただこれだけなのだ。つまり生命の実感を味わうための身を切るような悲しみ。

※セリーヌ著『夜の果ての旅』(生田耕作訳)より引用

 ちょっと変わった親の元に生まれついてしまったため、あまり普通の子が経験しないようなことを今後も経験していくだろうし、年齢に相応しくない悲しみを感じることもあるかもしれないが、強く生きていって欲しいと思う。

WordPressで1ページ内に全記事タイトル一覧を表示する方法

 WordPressで全記事一覧を表示する方法は出ていたが、1ページ内に表示するやり方を書いたサイトを見つけられなかったので、自作してみました。いくつも参考にしたサイトはありますが、こちらのカテゴリごとの記事一覧をWP_Queryで表示する【WordPress】というページが一番役に立ちました。

 カテゴリー順は当初、文字コード順となってましたが、それではあんまりなので、投稿数順にひとまずしておきました。本当はカテゴリー順を決められるといいんですけど、WordPressでは標準機能でカテゴリー順を設定するやり方がないみたいなんで。

 こんな感じになりました。「カテゴリー別全記事一覧」(もう少し工夫の余地はありそうですが……)。

 具体的なやり方としては、以下の流れになります。

  1. 子テーマ用のフォルダを作成
  2. 子テーマ用のstyle.cssとfunctions.phpを作成し、上で作ったフォルダにftpで転送
  3. 子テーマを有効化
  4. 全記事一覧用のphpを子テーマ用のフォルダにftpで転送
  5. WordPress管理画面で固定ページ・新規作成を開く
  6. 「カテゴリー別全記事一覧」など適当なタイトルをつける
  7. テンプレートで「titles_by_category」を選び、公開ボタンを押す

 子テーマや固定ページでのテンプレートの使い方は各自、ググるなどして調べてみてください。

 ”titles_by_category.php”をそのまま使いたい方は以下にzip圧縮したものを置いておきました。

titles_by_category.zip

 中身を以下に掲載しておきます。

<?php
/**
 * Template Name: titles_by_category
 *
 * The template for displaying all post titles by category in a page
 * arranged from page.php by Yoshiro Miyagoshi
 *
 * @package WordPress
 * @subpackage Twenty_Fourteen
 */

get_header(); ?>

<div id="main-content" class="main-content">
    <div id="primary" class="content-area">
        <div id="content" class="site-content" role="main">
            <header class="entry-header"><h1 class="entry-title">カテゴリー別全記事一覧</h1></header>
            <hr />
            <div class="entry-content">
<?php
//    $categories = get_categories();
    $catargs = array(
        //投稿数の多い順
        'orderby' => 'count',
        'order' => 'desc'
    );
    $categories = get_categories($catargs);
    foreach( $categories as $category ):
        $str = '
                <h2><a href=';
        $str .= get_category_link( $category->term_id ) .'>'. $category->cat_name;
        $str .= '</a></h2>';
        $str .= '
                <ul>';
        $args = array(
            'cat' => $category->cat_ID,
            'posts_per_page' => -1
        );
        $query = new WP_Query( $args );
        if ( $query ->have_posts() ) :
            while ( $query ->have_posts() ) :
                $query ->the_post();
                $title = get_the_title();
                $str .= '
                    <li><a href="'. get_permalink() .'">'. $title .'</a></li>';
            endwhile;
        endif;
        wp_reset_query();
        $strFinal .= $str . '
                </ul>';
    endforeach;
    
    echo $strFinal;
?>

            </div><!-- #entry-content -->
        </div><!-- #content -->
    </div><!-- #primary -->
    <?php get_sidebar( 'content' ); ?>
</div><!-- #main-content -->

<?php
get_sidebar();
get_footer();