限りある人生だからこそ

 2016年の連載では、円周率、三角関数、対数がいかに探究されてきたのかを紹介しました。連載「ホワイトデーは、アインシュタイン誕生日とπの日」「三角関数が面白くなる4000年の歴史旅行」「対数の発見がもたらした大航海時代と技術革新」参照。

 それらの数値がいかに算出されるのか、数が作られる原風景に迫っていきたいと思います。「いかに算出するのか」は電子計算機が発明された現代でさえ重要なテーマとなっています。計算には常に制約がつきまとうからです。

 いつの時代も計算は制約の中で行われます。制約の中で、いかに効率良く、いかに速く計算したらいいのか、様々な計算方法が考え出されてきました。

 円周率、三角関数、対数の数値計算に進む前に、今回は数値計算の初歩として3つの計算方法を取り上げます。

計算手順の工夫 頭からたし算

 手始めにたし算の工夫です。例えば、たし算967+158を筆算で行うと普通は次のように、一の位の桁から桁同士のたし算を行います。

  11
  967
+ 158
───
  1125
普通の筆算(しっぽからたし算)

 これを逆に百の位の桁から桁同士のたし算をすることができます。

   967
+ 158
───
 10
   11
     15
───
  1125
頭からたし算

 この筆算方法を「頭からたし算」、普通の筆算を「しっぽからたし算」と呼ぶことにしましょう。2つの筆算の違いはくり上がりです。

頭からたし算と普通の筆算の比較


 しっぽからたし算では、桁同士の和が10以上になると1がくり上がります。この際にくり上がりの1は隣の桁の最上部に小さく書いておいて計算しやすくする工夫がなされますが、1+6+4のように3つの数のたし算を行うことになります。

 それに対して、頭からたし算はしっぽからたし算のようなくり上がりを減らすことができます。

 例の計算の場合、計算途中は3行になりますが、くり上がりは現れません。2つの数の和が9になる場合(下の例の十の位)だけは9+1=10となり1がくり上がる場合があります。

   7507
+ 8695
─────
  15
    11
      19 ←1は1+9=10のくり上がり
        12
─────
  16202

頭からたし算


切りのいい数からのひき算 おつりの計算の呪文

 1000円、10000円からのおつりの計算方法です。例えば、代金174円に対して1000円札を出した場合、おつりは、1000-174を計算することになります。このひき算を筆算で行うとくり下がりが現れます。次のように計算することで楽に計算できるようになります。

1.おつりの百の位は、174の百の位1に対して「たして9」の数。
1000-174=8□□
2.おつりの十の位は、174の十の位7に対して「たして9」の数。
1000-174=82□
3.おつりの一の位は、174の一の位4に対して「たして10」の数。
1000-174=826

 10000-5602でも計算してみましょう。

1.おつりの千の位は、5602の千の位5に対して「たして9」の数。
10000-5602=4□□□
2.おつりの百の位は、5602の百の位6に対して「たして9」の数。
10000-5602=43□□
3.おつりの十の位は、5602の十の位0に対して「たして9」の数。
10000-5602=439□
4.おつりの一の位は、5602の一の位2に対して「たして10」の数。
10000-5602=4398

 この計算方法の理屈は至って単純です。1000、10000をそれぞれ999+1、9999+1と分けることです。1000からのひき算が面倒なのは0からは1から9までの数を引くことができないため繰り下がりが必要になります。

 999、9999であれば各桁の9からは0から9までの数をそのままで引くことができます。それが十の位以上の「たして9」です。一の位も「たして9」ですが、999+1、9999+1の1を最後に加えるので「たして10」になります。

 ところで、この計算はソロバンができる人にとっては自然なことです。1に対して「たして9」になる8は、1に対する「9の補数」と呼ばれる数です。

 現在普及しているソロバンは「四つ玉」と呼ばれますが、1列にある玉が5+4=9ですから、1を表したときには動かしていない玉が9の補数8(=5+3)を表すことになります。

 ソロバンができる人にとって、「たして9、たして9、たして10」の計算は至って自然な計算だと言えます。

 ひき算は、通常の筆算では一の位から計算し、繰り下がりが現れます。一方、999、9999を利用すれば繰り下がりが現れません。

演算回数を減らす工夫 ホーナー法

 次は式の値の計算方法です。

問題 2次多項式3x2+4x+1においてx=3の値を求めよ。

 もちろん、単純にxに3を代入すれば次のように値が計算できます。

3×3×3+4×3+1=27+12+1=40

 この計算における演算回数は、かけ算が3回、たし算が2回です。

 この演算においてかけ算の回数を減らすことができます。次のように式を変形してみます。

3x2+4x+1=x(3x+4)+1
 xに3を代入すると、
3×(3×3+4)+1=3×13+1=39+1=40

 かけ算は2回、たし算は2回、となり最初の計算からかけ算が1回減っています。

 式の次数を大きくしてみます。

問題 5次多項式2x5+3x4+5x3+6x2+3x+8においてx=2の値を求めよ。

 単純にxに2を代入した場合
2×25+3×24+5×23+6×22+3×2+8=64+48+40+24+6+8=190
 かけ算は5+4+3+2+1=15回、たし算は5回です。

 式変形した場合

2x5+3x4+5x3+6x2+3x+8
=x(2x4+3x3+5x2+6x+3)+8
= x(x(2x3+3x2+5x+6)+3)+8
= x(x(x(2x2+3x+5)+6)+3)+8
= x(x(x(x(2x+3)+5)+6)+3)+8

 カッコの中の2x+3から次のように計算していきます。
2×(2×(2×(2×(2×2+3)+5)+6)+3)+8 → かけ算5回、たし算5回
=2×(2×(2×(2×(7)+5)+6)+3)+8
=2×(2×(2×(14+5)+6)+3)+8
=2×(2×(2×(19)+6)+3)+8
=2×(2×(38+6)+3)+8
=2×(2×(44)+3)+8
=2×(88+3)+8
=2×(91)+8
=182+9
=191

 このような多項式の変形による計算方法をホーナー法といいます。英国の数学者ウィリアム・ジョージ・ホーナー(1786-1837)にちなんだ命名です。

 英国の数学者でド・モルガンの法則で知られるオーガスタス・ド・モルガン(1806-1871)は、1830年のホーナーの論文よりも前、13世紀中国の数学者朱世傑(しゅせいけつ)によってホーナー法は発見されていることを指摘しています。

 2つの計算例から分かるようにn次多項式の数値計算にはn+(n-1)+…+2+1=n(n+1)/2回のかけ算とn回のたし算が必要です。それが、ホーナー法ではn回のかけ算とn回のたし算に減らすことができます。数値計算においては一般に、たし算ひき算よりかけ算わり算の方が多くの計算時間を必要するので有効な計算法となります。

 ホーナー法を計算機に実装する場合には、多項式の係数(例の場合では2、3、5、6、3、8)のみを一次元配列に格納しておき、5次の係数2にxの値をかけて4次の係数をたした値2x+3を求め、次にその値にxの値をかけて3次の係数をたした値を求め、…この計算を0次まで繰り返し処理を行うことで多項式の数値が計算されます。

 次回はニュートン法、三角関数と対数の数値計算を紹介します。

筆者:桜井 進