今、話題の人工知能(AI)などで人気のPython。初心者に優しいとか言われていますが、全然優しくない! という事を、つらつら、愚痴っていきます

440.掛け算と割り算の混在した計算

»

初回:2025/10/22

 今回は、息抜きの回です。

P子「誰が息抜きしてるの?」※1

 もちろん、私の息抜きです。

P子「要するに手抜きしてるのね」

 そんなことは無いようなことは無い感じもしないでも無いかもしれないことも無い気がしないでも無い様なことも無いかもしれません。

P子「図星ね」

1.掛け算と割り算の混在した計算

 さて、最近昔のプログラムを改修する仕事をしています。その中で、非常に分かりにくい計算式...しかも掛け算と割り算が混在しているだけの式で、さらに固定値と変動値(配列)をコピー&ペーストであちこちで使用したりしているので、判りやすくしようとしているのですが、変換した計算式が間違っているのかどうかの検証もやりにくいので、色々と手間がかかっていました。

P子「AIに検証してもらえば?」

 私もそう思って確認したのですが、以前に取り上げたコラムでも説明しましたように、今一つ信用できませんでした。

 ≪参考資料1≫
 https://el.jibun.atmarkit.co.jp/pythonlove/2025/07/428ai.html
 428.AIは数学が苦手!?
 初回:2025/7/30

 さて、私が知っている範囲で言うと『掛け算と割り算の混在した計算は左から順番に行うこと』というルールがあります。

 例1) 10 ÷ 5 × 2

 左から順番に計算すれば、

 10 ÷ 5 = 2
 2 × 2 = 4

 答えは 4 になります。

 これを勝手に 5 × 2 を先に計算すると、10 となり、10 ÷ 10 = 1 になります。

P子「全然だめね」

 掛け算と割り算の混在ではなく、すべてが掛け算になれば、順番を変更することができます。これは、掛け算には「交換法則」と「結合法則」があるからです。

P子「割り算を掛け算にするのね」

 その通りです。つまり、割り算を分数の掛け算にしてしまおうという事です。

 例) 10 × (1 / 5) × 2

 これなら、10 × 2 × (1 / 5) にして計算すると、4 となり、正しい答えが導き出されます。

P子「複雑になってない?」

 この例題のケースでは...という事です。

2.順番を入れ替えたいケース

 次のような計算の場合は、どうでしょうか。

 例2) 9 ÷ 4 × 28

 このケースの場合、9 ÷ 4 = 2.25 となり、これに、28 をかけるのですから、暗算で解くには骨が折れます。これを、すべて掛け算にして順番を入れ替えてみましょう。

 9 ÷ 4 × 28 → 9 × (1 / 4) × 28 → 9 × 28 × (1 / 4)

 先に、28 × (1 / 4) を実行すればよいので、頭の中で、28 ÷ 4 = 7 となり、9 × 7 = 63 が答えになります。

P子「でも、分数の掛け算を、頭の中で 割り算に戻してるのが少し嫌だわ」

 ここで、少し面白い考え方をする人を見つけました。どこで見たか忘れましたが、判りやすい解説でした。

P子「もったいぶらないで教えてよ」

 割り算や掛け算を記号ごと動かすとよいそうです。

 例1) 10 ÷ 5 × 2 → 10 (÷ 5) (× 2) → 10 (× 2) (÷ 5) = 20 ÷ 5 = 4

 例2) 9 ÷ 4 × 28 → 9 (÷ 4) (× 28) → 9 (× 28) (÷ 4) = 9 × 7 = 63

 この考え方なら、一旦分数に変換しなくても、そのまま入れ替えることができます。

P子「最初の 10 とか 9 は移動できないの?」

 1 (× 10)とか、1 (× 9)と考えて、先頭を1にしてしまえばよいだけです。好きに移動してみてください。

3.まとめ

 単純な話ですが、この記号を含めて移動させる方法は、案外使えると思います。また、分数にするのもメリットがあり、割り算が複数存在する場合は、分数の掛け算になるので分母を先に掛け算してしまうとか、計算式の形式に応じて混在させるのもありかもしれません。

 特にプログラムで使用する式の場合、先の≪参考資料1≫のように変数と定数が混在した式を分解する場合、定数だけ先に計算しておく場合には、この掛け算の移動という手法を知っているかどうかで、大きな違いが出てきます。

P子「前回は、知らなかったのね」

 残念ながら知りませんでした。

 定数の計算と変数の計算が掛け算と割り算の計算式の中で混在している式を簡素化する場合、定数部分を切り出すには記号ごと移動させる方法が分かりやすいと思います。特に、計算機で分数を扱うというのは、結局、1 / foo などとして計算させることになり、計算誤差を発生させる可能性が高まるので、できるだけシンプルに計算しておきたいと思います。

 分数の計算は小学校で習うのですが、分数にして順番を入れ替えるとか、掛け算や割り算の記号を含めて移動する方法などは、教えてもらった記憶がありません。このあたりを理解していれば、もっと簡単に計算できたと思います。

P子「小学校の算数って、結構縛りが多いのよね」

 機会があれば、その話も取り上げてみたいと思います。

 ほな、さいなら

======= <<注釈>>=======

※1 P子「誰が息抜きしてるの?」
 P子とは、私があこがれているツンデレPythonの仮想女性の心の声です。

Comment(0)

コメント

コメントを投稿する