1. HOME
  2. ブログ
  3. 暗号を理解するための数学の世界 CS四方山話(第33話)

暗号を理解するための数学の世界 CS四方山話(第33話)

「小学校からの数学」シリーズ・第12弾です。今回は、小学4年生の2回目です。

小学4年生の小数、「1」と「1.0」は同じ?

小数は小学3年生で登場しました。CS四方山話としては第31話で扱いました。小学4年生の課程では、小数の概念をおさらいして、大小比較や、足し算、引き算、掛け算を学びます。小学3年生で学んだことを少し深掘りするという感じでしょうか。

皆さんには上記のおさらいは不要だと思いますので、ここではもう少し違った「深掘り」を行ってみたいと思います。また、小学4年生では「大きな数」についても学びます。「億」「兆」あたりまで登場します。このあたりも併せて触れてみることにしましょう。

「1」と「1.0」は同じでしょうか? 数値の大きさという点では同じですが、ある意味まったく別モノと考えることもできます。「1」は整数で、「1.0」は実数と見なせます。「1.」も「1.0」と同じで実数ということになります。

小数の表現:ピリオドとカンマに注意!

小数の表現に「.」(ピリオド)を用いる(現在でも用いられている)画期的な方法を John Napierさんが発明したことは、第31話でも触れました。英語圏や日本ではこの表記方法を用いていますが、フランスやドイツでは(なんと!)「,」(カンマ)を用います。

これには色々な問題を発生します。たとえば「1,234」の表記は、ドイツの気持ちでは「1.234」という数値になりますが、これを我々(日本人)が読むと「1234」という、まったく別の数値になります。大問題ですね。

銀行のATMでの誤解や入力ミスにつながりますし、コンピュータ上のソフトウェアでも障害になります。例えば、CSV形式というカンマ区切りで値を区切る表現方法がありますが、ドイツ表記の場合は数字の途中にカンマがあるので、この表記は使えません。また Excel などでは、関数の引数は我々はカンマで区切りますが、ドイツ語環境では「:」(コロン)で区切ります。

ISO(国際標準化機構)などの工業規格では、小数点は「.」(ピリオド)を標準とするということになっています。SI(国際単位系)では、「.」でも「,」でも良いとされています(ただし、桁間の区切りは空白(スペース)のみ、つまり「,」はダメということになっています)。

ヤード・ポンド法がなくならないことと同様に、きっと小数点をカンマとする表記もなくならないのでしょう。文化に由来するものは簡単に捨ててしまってはいけないと思いつつ、統一できればスッキリできるのに……と思う次第です。

指数表記の「Scientific Notation」に統一したほうがスッキリ

いっそ、数値の表現は、Scientific Notation(指数表記、科学的記数法)に統一してしまえば良いのかも知れません。下記に表記の違いを表にしてみました。

Scientific Notation は大雑把な大きさは指数部(exponent, power of 10)で把握可能ですし、その桁でのおおよその大小は仮数部(mantissa)の先頭を見れば分かります。誤解は生じませんし、数値をザックリ捉えることにも適していると言えます。

また、Scientific Notation はプログラミング言語とも相性が良いです(そもそもコンピュータ上の実数は、浮動小数点で表現されている訳ですし)。例えば、Excel も Scientific Notation に対応しています。

大数(大きな数):3桁区切り、4桁区切りは文化に依存

Scientific Notation では、仮数部の桁数が多くなると3桁毎に区切ることが通例となっています(ただし、区切った最後が1桁になってしまう場合は、その空白は入れずに4桁で表記します。ex. .1.234 5678)。

何桁で区切るかも「文化」に依存しています。日本語では4桁区切りになります。「一」「十」「百」「千」「万」と1桁ずつ増えたあとは「億」「兆」と4桁ずつ増えます。英語では3桁区切りになります。「one」「ten」「hundred」「thousand」と1桁ずつ増えたあとは「million」「billion」と3桁ずつ増えます。

日本人としては、呼び名としては4桁区切りを使いつつ、銀行通帳や決算報告などでは3桁区切りを使うというやや歪な運用になっています。まあ、私自身は馴らされてしまったようで、特に不便は感じていませんが、最初は面食らったように思います(もう記憶が定かではありませんが)。

もっと、良くない(誤解を招きそうな)のはドイツ語、フランス語での大数の呼称です。「eins」「zehn」「hundert」「tausend」と1桁ずつ増えたあとは「million」と3桁ごとになっていくのですが、問題はその呼称です。1.0E6 million、1.0E9 milliade、1.0E12 Billion、…… えっ!! 英語だと 1.0E9 が billion なのに、ドイツ語では 1.0E12 が billion となるのです。英語では 1.0E12 は「trillion」で、ドイツ語では 1.0E18 が「trillion」です。こんな大きな数値は登場する頻度も少ないので、混乱することも少ないのかも知れませんが、ここまで来ると「誰がこんなことにしたんだ」「やれやれ、もう知りません」と言いたくなりますね。

ということで、間違いのない「Scientific Notation」を推したいと思います。小学4年生でも「指数表記(Scientific Notation)」を教えてしまえば良いでは? と筆者は思います。

まとめ

今回は、小数と大数(大きな数)の話題でした。現在の小学4年生が学ぶ内容から逸脱している部分が多いかも知れません(いつものことです)が、ここでは「数学」ということで、その概念に関わる部分に比重を置いているということでご理解ください。次回(第34話)も小学4年生です。「計算の決まりと式の関係」「計算の順序」といった「数学」と密接な関係を持つ項目が残っていますし「折れ線グラフ」もありますので。


四方山話

筆者は、航空路管制(Control)と、パイロット・ブリーフィング(Pilot Briefing、主にはウェザー・ブリーフィング)とに(まったく別のプロジェクトで、別の時期にですが)関わったことがありますので、1/2 の事故には少なからず興味を惹かれています。

飛行機の運航には、パイロット以外にも、管制承認伝達=クリアランスデリバリー(CLR)、地上管制=グランドコントロール(GND)、飛行場管制=タワーコントロール(TWR)、出域管制ディパーチャーコントロール(DEP)、航空路管制=コントロール(ACC)、入域管制席=アプローチコントロール(APP)、飛行場管制=タワーコントロール(TWR)、地上管制=グランドコントロール(GND)と複数の管制が関わっています。それ以外にも、キャビンアテンダント、航空整備士、航空機メーカなど、いろいろな役割のスタッフが支えて運航が実現しています。

何が言いたいかというと、飛行機の運航は、さまざまな役割の人や機械やソフトウェアが構成するシステムによって行われているということです。ヒューマンエラーは必ず発生しますし、それを前提にシステムを考える必要があります。ヒューマンエラーによって、重大なインシデントや大きなアクシデントが発生した場合は、そのエラーを犯したヒトが悪いのではなく、システムが悪いと考えるべきです。そのエラーをできるだけ抑止すること、そのエラーによるダメージをできるだけ軽減することは、システム全体で取り組むべきことです。

今回の事故に関しても、その観点をしっかり持って、個人の責任追及に走らず、原因を精査することで、より良いシステムになるための学びにつながることを願って止みません。


CS四方山話の過去の記事はこちら(合わせてお読みください)

中村 健 (Ken Nakamura)
株式会社SYNCHRO 取締役 CTO

機械屋だったはずだが、いつの間にかソフト屋になっていた。
以前は計測制御、知識工学が専門分野で、日本版スペースシャトルの飛行実験に関わったり、アクアラインを掘ったりしていた。
VoIPに関わったことで通信も専門分野に加わり、最近はネットワークセキュリティに注力している。
https://www.udc-synchro.co.jp/

サイバーセキュリティ四方山話の最新話は、メールマガジンにてもご案内致しています。是非JAPANSecuritySummit Updateのメールマガジンにご登録ください。
メールマガジンの登録はこちらからお願いします。

関連記事

サイバーセキュリティの課題をテーマ別に紹介中!!