ソフトウェアの法則 ソフトウェアと“K” 計量単位について
ソフトウェアの法則
(39)

ソフトウェアと“K”


── 計量単位について

(野茂投手がメジャーリーグに登場した頃書いたものです)

◆Kの意味
S:こんにちは。
K:やあ、S君じゃないか。よく来たねえ。
S:近くまで来たんで、ちょっと寄ってみたんです。
K:しばらく顔を見せなかったじゃないか。ゆっくりしていってよ。お茶でもどう?
S:いいですねえ。でもそういうときは「お茶でもドジャース」と言うんですよ、最近は。
K:「飲も(野茂)う」って言いたいんだろ。
S:何だ知っているんですか。やられた、やられた。
K:それにしても、ドジャースの野茂の活躍はすばらしかったね。
S:そう。最近いいニュースが少なかったから日本の国民は皆久し振りに痛快な思いをさせてもらったと思いますよ。トルネード投法といってアメリカでは大変な人気らしい。
K:野茂の登板予定の日には日本でも決まってTV放映されたから、このままだとメジャーの野球を知った日本人は、皆ドジャースファンになってしまうんじゃないかなあ。
S:それも、いいじゃないですか。
K:こうなると日本人は直ぐ大挙して応援に行ったりして、中には派手に騒ぐ人もいるというからアメリカではひんしゅくをかっているそうだ。
S:そう、「ドクターK」というボードを使ったりして応援している、あれでしょう。一部の人だろうけどね。でも、何で“K”なんですかねえ。
K:知らないの? 最近の若者は困ったもんだねえ。Kは三振のマークだよ。昔はラジオで野球放送を聞きながら、ひいきのチームの試合ではスコアブックをつけたりしたものさ。そのとき三振のマークはKと書くんだ。
S:ふ〜ん。知らなかった。
K:日本には昔、沢村という名投手がいた。知ってるだろ?
S:うん。それくらいは知っている。
K:今まで日本のプロ野球にどんな名投手が現れても、あの沢村投手と比較すると結局は彼を超えてはいないと誰でも思ってきた。
S:どうして。
K:だって、沢村投手の当時の球速など分からないから、今の投手と比較のしようがないんだ。
S:そうか。それに沢村投手は一種神格化されてしまっていますからね。
K:しかし野茂投手の活躍を見ていると、完全に沢村を超えたと思いたくなるんだ、僕は。
S:メジャーのマウンドに立つという夢を自ら実現し、しかもオールスター戦に選ばれて先発投手として活躍したんだから当然でしょうね。
K:最後には西地区での優勝まで勝ちとって新人王に選ばれたんだから。少なくとも、後20年くらい経ってから振り返ってみたとき、誰でもそう思うようになるよ。
S:でも技術的にどちらが上か比較できないものかなあ。たとえば、当時の沢村投手の投球の様子が映画フィルムにでも残されていれば、球速なんか直ぐに測れると思うのだが。
K:残っていないらしいよ。それに、もし残っていても、それが彼の最も速い球とは限らないからね。
S:沢村投手なら、時速150kmくらいはいっていたかもしれない。
K:さあ、今となってはもう分からないよ。
K:ところで、よくスコアボードなどに球速“146Km”などと表示されているけど、あれ間違いだっていうの知ってる?
S:知らない。何が間違いなの?
K:キロメートルの表示は、小文字で“km”と書かなければいけないんだ。
S:大文字で“Km”と書いてはいけないの?
K:いけない。場合によっては罰金を取られることになる。
S:へえ〜。知らなかったなあ。君の名前の頭文字だからかい?
K:まさか。国際単位系(SI)(*1)という規格が定められてね、1993年11月から施行されることになった。つまり、どの国も共通の度量衡単位を使おうということになったんだ。それで“キロ”は小文字で“k”としなければならないことになった。
【注】(*1)JIS Z 8203 国際単位系(SI)及びその使い方
S:そんな細かいことを言わなくてもいいじゃないか。
K:いやいや、そうはいかない。もともと“キロ”は小文字と決まっていたんだけど、このとき初めて大文字のKはケルビンの意味で使われることになった。だから、厳密に区別する必要が出てきたんだよ。
S:ケルビン? 何だねそれは?
K:絶対温度って知ってるだろ。あれの単位だよ。
S:ふ〜ん。でも気に入らないなあ。
K:実は、僕も大いに気に入らないんだ。コンピュータの分野ではKは特別な意味で使われてきたからね。
S:へ〜。君の専門分野ではKはどういう意味なの。
K:もちろん、同じ“キロ”なんだけどね。少し解釈が違うんだ。知っての通り、コンピュータの世界では2進法が使われているから、2進数と10進数の変換が便利なようになっていないと困る。
S:ふん、ふん。
K:たとえば、ある2進数が10進表現だとどのくらいの大きさの数になるのか直観的にすぐ分かると便利だろ。
S:うん、うん。
K:それで、たとえば2の10乗はどのくらいの数になると思う?
S:そんなの知らんよ。面倒臭い。
K:2の10乗は、1024になるんだ。約1000だと思えばよい。
S:ふむ、ふむ。「2の10乗は千」これは覚えやすい。
K:それを大文字のKを使って“1K”と表現することにしたんだ。小文字の1kは1000だけど、大文字の1Kは1024なんだ。コンピュータの分野ではこれは常識であって、コンピュータの入門コースでは最初に学ぶことなんだ。たとえばコンピュータのメモリの大きさなどを32Kバイト、64Kバイトなどといって表現する。32Kというと、これは32掛ける1024で32,768のことになる、64Kといえば65,536のことだ。
S:なるほど、うまいことを考えたね。そんな面倒な数をいちいち覚えなくてすむ訳だ。
K:そう、日本のコンピュータの先駆者の中に、ある知恵者が居られてね。これを、通常のキロを表す“k”と区別するために大文字の“K”で表現することにしたんだよ。

◆接頭語の覚え方
S:その便利な表現方法をこれからは使えなくなるの?
K:うん、問題はそこなんだよ。K(=1024)の表記法も問題だけど、その上の単位のM(メガ)やG(ギカ)にも別の問題があることが分かってきた。
S:別の問題? ちょっと待ってくれよ。その前に、そんなに色々な単位があるのかい? 知らなかったなあ。それを先ず説明してくれよ。
K:いや単位というより、正確には接頭語というのかな。ある数量を表現するのに大きさからいってもっとも相応しい単位というのがあるだろう。たとえば、国家予算のような大きな額は“円”の単位よりも“兆円”とか“千万円”の単位で表現した方が便利なように、十、百、千、万という具合に接頭語を使うだろ。
S:うん、うん。
K:それと同じで、10の3乗の間隔で接頭語が定義されている。この表を見てごらん。

表:接頭語の一覧
接頭語 読み つづり 位取り
Y ヨタ yotta 1024
Z ゼタ zetta 1021
E エクサ exa 1018
P ペタ peta 1015
T テラ tera 1012
G ギガ giga 109
M メガ mega 106
k キロ kilo 103
h ヘクト hecto 102
da デカ deca 101
d デシ deci 10−1
c センチ centi 10−2
m ミリ milli 10−3
μ マイクロ micro 10−6
n ナノ nano 10−9
p ピコ pico 10−12
f フェムト femto 10−15
a アト atto 10−18
z ゼプト zepto 10−21
y ヨクト yocto 10−24
接頭語 読み つづり 位取り

S:ずいぶんと、いろいろな接頭語があるね。大半は知らないものばかりだ。
K:キロからミリまでは10倍間隔で、これはよく知られているやつだ。
S:ああ、覚え方は知っている。『キロキロとヘクトデカけた‥‥』というやつだろ。
K:そう、そう。子供の頃よく『キロ(k)キロとヘクト(h)デカ(da)けたメートルがデシ(d)に追われてセンチ(c)ミリ(m)ミリ』といって覚えた記憶があるだろう。この“キロからミリ”までの部分の呼び方が国際的に正式に決められたのは1795年なんだ。
S:ずいぶんと昔だね。
K:その後1960年に「テラ、ギガ、メガ」と「マイクロ、ナノ、ピコ」が追加された。
S:全部が一度に決められたんじゃないの。道理で知らないものが多い訳だ。
K:1964年に「フェムト、アト」が追加された。
S:ほう。
K:そして、1975年になって「エクサ、ペタ」が追加された。
S:ほう、ほう。
K:さらに、最近になって「ヨタ、ゼタ、ゼプト、ヨクト」が追加された。
S:ほう、ほう、ほう。
K:ほうほうと、ふくろうみたいな声ばかり出すなよ。
S:だって、そう説明されても、俺には到底覚えられないもの。
K:こうやって見ると、200年近く“キロからミリ”の範囲で事が済んでいた社会が、最近の急速な技術革新にともなって日常必要とする数値の範囲が急速に広がってきたことが理解できると思う。
S:なるほど。それは私にも理解できるね。
K:じゃあ、この表の覚え方を伝授してあげようか。
S:ああ、そう願いたいね。
K:これは、僕が考案した覚え方なんだ。本邦初公開だからね。
S:もったいぶるねえ。
K:いいか、よく聞いていろよ。“YからMまで”の覚え方だ。『ヨタってもゼタいやめないエクササイズ。ペタンこ鼻がテラテラ光るギガんメガネの大門じいさん』て言うんだ。
S:なになに? 大門じいさんが、どうしたって?
K:いいか、大門じいさんは年寄りなんで多少ヨタヨタしているが、頑固だからスポーツジムでの体操(エクササイズ)は絶対にやめないと言い張っているんだ。ペタンコの鼻の頭を汗でテラテラ光らせて、片方義眼なのにメガネを掛けて頑張っているという意味だよ。
S:う〜ん。もう一度言ってよ。
K:いいか、もう一度だけ言うからよく聞いて覚えろよ。『ヨタ(Y)ってもゼタ(Z:絶対)いやめないエクサ(E)サイズ。ペタ(P)ンコ鼻がテラ(T)テラ光る、ギガ(G)ん(義眼)メガ(M)ネの大門じい(大文字)さん』て言うんだ。
S:最後の“大門じいさん”というのは余計じゃないか。
K:この“YからMまで”は、すべて大文字で書けという意味だよ。
S:ああ、なるほど、なるほど。
K:言ってごらん。
S:『ヨタってもゼタいやめないエクササイズ。ペタンコ鼻がテラテラ光るギガんメガネの大門じいさん』。
K:そう、そう。うまい、うまい。
S:そうか、じゃあ後半の小さい方はどうやって覚えるの。
K:よくぞ聞いてくれた。これを作るのにはずいぶんと苦労したよ。
S:それも自分で考えたの? 好きだねえ。
K:そうともさ。いいか、こう言うんだ。『マイクロナノにピコピコ鳴ってエッフェムトうへアトムは飛ぶぞゼプト気流つヨクトも』 え、どうだ。
S:もっとゆっくりと言って、解説してくれよ。
K:つまりだ。最近のマイクロコンピュータはマルチメディア対応とか言って、多機能になってきている。あんな小さなものナノに、ピコピコ音を鳴らしてゲームもできるし、TV画面の表示などもできる。すると当然TV漫画が見られるから、エッフェル塔に登った怪獣を退治しに鉄腕アトムが飛んでいくという図を想像してみなよ。そのとき、ジェット気流が強くてもアトムはひるまないという意味なんだ。
S:う〜む。後半がちょっと苦しいなあ。もう一度お願いしましょうか。
K:『マイクロ(μ)[コンピュータ]ナノ(n)にピコ(p)ピコ鳴って、エッフェムト(f)う(エッフェル塔)へアト(a)ムは飛ぶぞ、ゼプト(z:ジェット)気流つヨクト(y)も(強くとも)』。
S:苦心の作だということは分かるが、後半ちょっと訛るのがご愛嬌だね。
K:いや、むしろ訛ったまま発音するのがコツなんだよ。昔覚えた“キロキロとヘクトデカけた‥‥”よりは、だいぶ自然な文章になっているだろう。だいいち“ヘクト出掛ける”って、どういう出掛け方なんだい? 僕は子供の頃から疑問に思っていたことなんだがね。
S:それもそうだ。ついでにその溢れるような創作力で“キロからミリまで”も作り変えたらいいのに。
K:いや、この部分は手を付ける気はないね。昔からの覚え方が定着しているし、「ヘクト、デカ、デシ」なんかは、ほとんど日常使わないから、今更作っても意味がないよ。

◆あいまいな定義
S:そんなもんかねえ〜。そうか、それで分かったよ。さっき言っていたM(メガ)やG(ギガ)での問題というのが。
K:お、さすがだねえ。
S:M(メガ)以上は全部大文字表記なので、1024を大文字のKで表現するというコンピュータ界の便法が、その先では適用できなくなるということだろ。
K:まあ、大体そんなところだね。ただ、僕の言いたいのは大文字という表記の問題だけじゃないんだ。それを少し詳しく説明してあげよう。まずK=1024と定義すると、当然のことながらM=1024Kでなければならない。
S:どうして“当然”なの。
K:だって、k=1000(10の3乗)のときは、次のMまでは10の3乗間隔だったろう。K=1024(つまり2の10乗)だったら、次も2の10乗間隔にしなければおかしいじゃないか。したがって、M=1024Kとするのが自然だ。そこに電卓があるから、1Mの値を計算してごらん。
S:そうか。すると1Mを正確に計算すると‥‥、
 1024×1024=1,048,576
となる。
K:そう。1,048,576は1,024,000とたいして差はないから、K=1000と定義しようがK=1024と定義しようが、これを1M=1024Kと書くことに、そう違和感は感じないだろう。
S:うむ、うむ。
K:でも、次のギガ(G)になるとそうはいかない。
 1024×1024×1024=
        1,073,741,824
となるから、1Gを約1000Mとみなすのは少し抵抗を感じる。そうかといって1G=1024Mとするのも変だ。段々と誤差が積み重なってきて10進での値と一致しなくなってくる。1G=1024Mではなく、1G=1073Mと書きたくなるからね。
S:なるほど。
K:大容量の補助記憶装置としてハードディスク(HD)というのがあるだろ。不思議なことに、ハードディスクの容量はK=1000,M=1000K,‥‥で表現するように統一されている。
S:へえ〜。
K:一方、メモリの大きさを表現したりプログラマがアドレス計算をする場合には、さっきも言ったようにK=1024,M=1024K,‥‥でやる習慣になっているんだよ。
S:何だ、ソフトウェア技術者の定義とハードウェア技術者の定義が異なっているということじゃないか。
K:そうかもしれないが、それ程単純な話でもないらしいよ。たとえば、もっと小容量の補助記憶装置として広く使われているフロッピーディスクというのがあるだろ。
S:うむ。
K:フロッピーディスクには、記憶できる容量にしたがって名前が付けられている。たとえば、2DD、2HDとか、1.2M形式、1.44M形式、2.88M形式とか呼ばれている。
S:うむ、うむ。それで?
K:たとえば、1.44M形式というフロッピーディスクは、80トラック、2シリンダ、18セクタ、512セクタ長のフォーマットで記録できるようになっている。
S:トラック、シリンダ‥‥などと言われても何のことやら分からないよ。
K:そうか、失敬、失敬。まあ、ここでは、記録するための領域の名称だと思っていればいいよ。
S:そういうことにしておこう。
K:1枚のディスクには80個のトラックがあり、1トラックは2シリンダから成り、1シリンダは18セクタで構成されている。そして1セクタの長さは512バイトなので、全体では
 80×2×18×512=1,474,560
という計算になるから、1,474,560バイト分の情報が記憶できることになる。分かるかな?
S:う〜む。まあ、分かったことにしよう。
K:そこで、この1,474,560バイトが何Mバイトになるか換算してみよう。まず、K=1024とすると
 1474560÷1024=1440K
だから、1440Kバイト記憶できることになる。さらにKをMに換算すると
 1440K÷1024=1.40625M
だから、1.44M形式のディスクには約1.41Mバイト記憶できるというわけだ。
S:おかしいじゃないか、1.44Mバイト記憶できるから1.44M形式というんじゃないのかい。
K:そこなんだよ、僕がおかしいと言うのは。ところが不思議なことに、M=1024Kではなく、M=1000Kと定義すると
 1440K÷1000=1.44M となって、ちょうど1.44になり、名前のとおりになる。
S:一体、誰が1.44M形式などという名を付けたんだい?
K:アメリカの某社だろうと思うよ。それもソフトウェアのことは余り知らない人じゃないのかなあ。
S:どうして?
K:だって、意図が見え見えなんだよ。フロッピーディスクの設計者なら誰でも記憶容量をできるだけ多く見せたいと思うだろう。だとすると、正確な数で1,474,560バイトを用いて1.47M形式としたいじゃないか。
S:なるほど。しかし1.44M形式と命名した。たとえば君のようなソフトウェア屋さんが決めたら、M=1024Kとして1.40625Mとなるから、1.4M形式とするところだね。
K:しかしそうすると容量がだいぶ減ってしまって印象が悪い。そこで、M=1000Kの計算で1.44M形式としたんだと思うよ。これは僕の推量だがね。
S:すると何かい、アメリカではMは1000Kという定義になっているというのかい?
K:そうなんだ。このいい加減さに、ほとんどの人は気が付いていない。

K:どうもアメリカでは、Kは1024と厳密には定義していないように思えるんだ。
S:え? アメリカではK=1024ではないの?
K:いや、そういう意味ではなく、1024を概略1000とみなす習慣はあるけれど、ただそれだけのことであって、「大文字のKは1024のことですよ」とは明確に定義していないような気がするんだ。
S:M以上になると、例の大文字表記の便法は使えないから、あいまいにしておいた方がいいのかもしれないね。
K:そう。キロはあくまでも“k”であって、それを場合によって1000とか1024とかに使い分けている、というのが実態じゃないかと思うよ。日本の得意とする“あいまいな”定義になっているんじやないのかな。
S:ふ〜ん。
S:すると何かい、メモリとフロッピーディスクとハードディスクでは同じバイト単位の容量でも、それぞれ皆大きさが違うというのかい? 驚いたねえ。
K:そう。ソフトウェア技術者の定義とハードウェア技術者の定義が異なるといったような単純な問題ではないんだよ。
S:フロッピーディスクの設計者というのは、ソフトウェア技術者でもないしハードウェア技術者でもないんじゃないの。変な話だねえ。
K:要するにアメリカでは定義があいまいになっていて、場合によって適当に使い分けているというのが実態なんだ。逆に日本では厳密に考え過ぎているきらいがあるのかもしれない。
S:なるほど、日本も“K”の定義はあいまいにしておいた方がいいのかもしれないね。そう考えれば国際単位系とやらの規則との整合性で、そう悩むことはない訳だ。
K:それがいいのかどうかは分からないけど、「あいまいな日本の私(K)」としておいた方が悩まなくてすむというわけだよ。■

【器用なプログラマの法則】
◆プログラマは、アドレス計算は K=1024 で行うが、お金の計算は K=1000 で行う。

(解説:たとえば、10K番地といえば10240番地のことだが、
         10K円と書けばこれは一万円のことである   )


( 1995-10-23:初版を社内ネット上に掲示)
( 1996-01-08:インターネット上に掲示、1998-5-1:削除、2006-7-1:再掲示)