はじめMath! Javaでコンピュータ数学

第5回 正しく計算させるための基本,演算法則

この記事を読むのに必要な時間:およそ 3 分

演算法則

今回は,演算法則に注目します。演算法則を確認しておかないと意図した計算結果が得られません。コンピュータは律儀に演算法則を守るため,「題意からして,それは無いだろう」という計算式も,そのままきちんと実行してしまいます。

演算法則は,いわば算数・数学の基本中の基本です。大工さんに例えれば,「正確に早く釘を打ち,真っ直ぐ鋸を引く」という技にあたるのではないでしょうか。中学校の技術家庭科の時間に,いすや本立てを作られた方は少なくないでしょう。鋸で切るのは簡単なのですが,真っ直ぐに引くことがなんと難しかったことでしょう。失敗を繰り返しながら上手になっていきましたよね。数学やプログラミングも同じです。理にかなって適切に式を組み立て,コーディングする習慣をつけましょう。

図5.1 匠の技も基本から

図5.1 

演算の優先順位

左方優先

基本的に,演算は式の左側から右側へ行います。次の式を見てください。

右から計算してみましょう。

この式は左から計算しても,右からでも同じ結果になりましたが,次の式はどうでしょうか。

いかがですか,右から計算した結果と,左から計算した結果とでは違うのが一目瞭然です。「計算は左から右へ」という原則を再確認してください。人間は優れた計算機械です。このような計算ルールをいったん身につければ,問題の意図するところを読み取って,正しく計算式を組み立てようとします。しかし,コンピュータは人間がプログラムに書いたとおりにしか計算しません。「ここは面積を計算するところだから,こうして丸括弧を入れて計算しないとね…」などとは,コンピュータは気を利かさないのです。

人間が正しく厳密にプログラムを作成し,コンピュータに指示しない限りは,問題の意図する計算結果が得られないのです。

演算子の優先順位

演算子には優先順位があります。何の指定もなければ乗算・除算は加算・減算よりも先に計算しなければなりません。次の式の左辺は右辺のように計算しなければなりません。

しかし,場合によっては1 + 2 だけは,意味があって先に計算をする必要があるとします。そのときには,先ほどの式を次のように書き直さないと意図する計算になりません。

各種計算式をプログラム化する場合には,計算の意図を間違いなくプログラミング言語で指示してやらなければなりません。適切に丸括弧(「パーレン」ともいう) を用いて計算の順序を指示する癖をつけましょう。

交換法則・結合法則・分配法則

演算法則は表5.1に示すように3種類あります。

表5.1 演算法則一覧

法則名演算の例
交換法則a + b = b + a  ab = ba
結合法則(a + b) + c = a + (b + c)  (ab)c = a(bc)
分配法則a(b + c) = ab + ac  (a + b)c = ac + bc

演算法則についての表に加算と乗算しか現れないのには意味があります。次の例を見てください。

このように,交換法則は引き算や割り算には適用できません。ですから,次のように読み替える必要があるのです。

紙の上で計算するときには,こういう演算法則を無意識に使って計算ができる人でも,ソースコードの修正を行う際,変数を単純に交換しただけで済ませてしまったりすることがあります。心当たりはありませんか? また,次の例を見てください。

これらも適宜加算や乗算に読み替えてから結合法則を適用すれば問題ないのです。

著者プロフィール

平田敦(ひらたあつし)

地方都市の公立工業高等学校教諭。趣味はプログラミングと日本の端っこ踏破旅行。2010年のLotYはRuby。結城浩氏のような仕事をしたいと妄想する30代後半♂。

コメント

コメントの記入