« 9月に実施される東京都の創業セミナーのオンラインイベントのポスターをプロ演「企業・団体のプロモーション技法」で制作しました。 | トップページ | メディア社会コース ソーシャル・デザイン科目群の紹介 1) »

べき乗演算子「^」の謎

2021年8月29日 (日) 投稿者: メディア技術コース

渡辺です。みなさんこんにちは。今回は、冪乗(べきじょう)演算子についてお話ししたいと思います。

冪乗というのは「a の b 乗」という演算のことで、指数演算とか累乗(るいじょう)演算と呼ぶこともあります。(ちなみに、「累乗」は指数が整数の場合のみでしか使えない用語だそうです。) 私の授業では、CG やゲームの基礎理論についてプログラミングによる課題を出すことがあるのですが、その中で頻繁に出てくる処理の一つに「二点間の距離を求める」というものがあります。数学的には三平方の定理で求めることができますが、平方根(√)の計算が必要となります。これは授業資料で事前に提示しているのですが(C#なら「Math.Sqrt()」になります。)、中には「平方根は a の 1/2 乗のこと」という事実を利用し、冪乗演算で求めようとする学生もいます。

これ自体は別に問題ないのですが、そういった学生が書くコードでよくあるのが

a^(1/2)

というものです。つまり、「a^b」で「a の b 乗」を意味すると解釈してのコードです。残念なことに、このコードはうまく動作しません。私が授業で用いているプログラミング言語は C# と呼ばれる言語なのですが、C# での「^」は「論理排他的ORビット演算子」というもので、ここでは本題と外れるので解説はしませんが冪乗とはまったく異なる演算です。しかし、数値同士の演算としては文法的には間違ってないので、普通にビルドはできてしまいます。算出する数値は当然おかしなものになりますので、実行結果はおかしくなるわけです。C# で冪乗演算をするには「Math.Pow(a, b)」を用います。

ちなみに、実は「a^(1/2)」は (1/2) の部分も問題で、両方とも整数として記述しているので 1/2 の演算も整数として処理がなされてしまいます。整数演算での割り算では余りは切り捨てられるので、結果的に「0」になってしまいます。実数演算を行いたい場合は「(1.0/2.0)」と記述すべきところです。

さて、毎年数人の学生が「^」を冪乗演算子として使用してくる(そして間違える)のですが、私は「何故学生は『^』を冪乗演算子と認識しているのか」ということを不思議に思いました。見た目には冪乗を連想するようなものではありませんし、「^」を冪乗演算子として採用しているプログラミング言語はそれほど多くないのです。有名どころな言語の中では Visual Basic, R, Haskell くらいで、今時の一般的な大学1,2年が事前に習得している言語としてはちょっと考えづらいものばかりです。もしこれらの言語を習得しているようなプログラミングマニアな学生であったとしても、そもそも C# で ^ を冪乗と勘違いするようなことはしないと思われます。

という疑問を SNS で呟いてみたところ、数人から意見が寄せられました。まず「LaTeX では?」という人がいました。LaTeX は理系にはお馴染みの文書整形システムで、私の研究室の卒論では Word のかわりに LaTeX を利用するように指導しています。理系分野ではプレーンテキストで冪乗を表すのに「^」を用いることが通例ですが、これも LaTeX が発祥です。ただ、学部1,2年が既に利用していると考えるのはちょっと無理があります。

他に「Excel でも冪乗は ^ でできる」という意見もありました。Excel はちょっと盲点でしたが、確かに上記の各言語に比べれば学生が触れている可能性が高そうです。ただ、学部1,2年の段階で Excel 内で冪乗を扱う場面ってちょっと想像しづらいんですね。

候補は色々とあったものの、どうも納得できずにモヤモヤしているところに、「数学の先生達がプレーンテキスト内で冪乗に ^ を使ってて、それを見たのでは?」という意見がありました。おそらくこれが私の求めていた答えなのだろうと考えています。この発想は自分だけでは絶対に出てこないものだったので、何気なく呟いてみて幸いでした。まあここ数年は SNS を自分から書くことはあまりなくなってしまいましたが...

(メディア学部教授 渡辺大地)

おもしろメディア学」カテゴリの記事

« 9月に実施される東京都の創業セミナーのオンラインイベントのポスターをプロ演「企業・団体のプロモーション技法」で制作しました。 | トップページ | メディア社会コース ソーシャル・デザイン科目群の紹介 1) »